《自由軟體,自由社會》:GNU 工程

1 贊 回覆發表於2017-01-29

Copyright © 1998, 2001, 2002, 2005–2008, 2010 Richard Stallman。

本文最初以標題“GNU 作業系統和自由軟體運動”發表於由 Chris DiBona 等人編寫的《開源軟體文集:開源革命之聲Open Sources: Voices from the Open Source Revolution》(Sebastopol: O’Reilly Media, 1999)。儘管我不是 “開放原始碼”的支持者,我還是貢獻了這篇文章, 這樣自由軟體運動的思想不會在那本書中完全失聲。

第一個軟體分享社群

當我在 1971 年開始在 MIT(麻省理工學院)的人工智慧實驗室工作的時候,我成為了那裡一個已存在數年之久的軟體分享社群的一員。在我們這個特別的社群裡,分享軟體不受任何限制;這和計算機的歷史一樣悠久,正如分享菜譜的行為乃是和做飯的歷史一樣久遠的。但我們分享得比大多數人更多。

人工智慧實驗室使用一個叫 ITS(不相容分時系統)的分時作業系統,由實驗室的黑客Hacker員工們設計,並以 Digital PDP-10 ——當年的大型機之一——的組合語言寫成。作為這個社群和人工智慧實驗室系統黑客員工的一員,我的工作便是改進這個系統。

部分大眾傳媒混淆地將“黑客hacker”一詞用來表示“安全破壞者security breaker”。我們作為黑客拒絕認可這個含義,並繼續用這個詞表示“那些喜愛程式設計、享受有趣的才智,或兩者兼備的人。”見拙作 “On Hacking”。

那時我們並不稱我們的軟體為“自由軟體free software”,因為那個詞尚不存在;但它們實際上就是。只要其他大學和公司的人想要移植和使用我們的程式,我們都十分歡迎。要是你看誰在用一個沒見過而有趣的程式,你總可以提出要看看原始碼,以便閱讀,改動,或者吸收其部件以創造新的程式。

社群的解體

80 年代初,Digital 關停了 PDP-10 系列,與此同時,形勢發生了劇變。PDP-10 在60年代優雅而強大的架構無法自然地擴充套件到 80 年代開始可用的更大的地址空間上。這意味著幾乎所有組成 ITS 的程式都要作廢。

人工智慧實驗室的黑客社群不久前就解體了。在1981年,附屬的 Symbolics 公司幾乎僱走了人工智慧實驗室的所有黑客,而嚴重減員使得社群已無法自持(由 Steve Levy 撰寫的《黑客》一書記述了這些事件,並給出了一幅社群全盛時期的清晰圖景)。人工智慧實驗室在1982年買了一臺新的 PDP-10,而其管理員打算使用 Digital 的非自由分時系統取代 ITS。

《黑客:計算機革命的英雄》一書已由機械工業出版社於2011年出版,趙俐、刁海鵬、田俊靜譯。——譯者注

那時的新計算機,如 VAX 或 68020,都自帶著作業系統,但沒有一個是自由軟體:僅僅為了得到一份可以執行的副本,你就得籤保密協議。

這意味著使用計算機的第一步就是要你下保證不會去幫助你的鄰居。協作的社群被禁止了。私有軟體所有者訂立的規則是:如果你和鄰居分享,你就是海盜pirate(在英語中也用該詞表示“盜版者”——譯者注)。想要改動,就來求我們吧。

說私有軟體的社會制度——不許分享和改造軟體的制度——是反社會的、是不道德的、是完全錯誤的,可能令不少讀者吃驚。但是對於一個建立在分裂群眾並保持使用者無助的基礎之上的制度,我們還能說些什麼呢?對上述觀點吃驚的讀者可能已經將私有軟體的社會制度視為理所當然,或用帶有私有軟體行業暗示的詞語來判斷。軟體出版商花了大量的力氣和時間去使人們相信對這個問題只有一種看法。

當軟體出版商談論“行使”他們的“權利”或“停止盜版” 時,他們實際“說”的是次要的。這些宣告真正傳達的是他們將未闡明的假設視為理所當然;公眾被要求不加審視地接受這些。還是讓我們來仔細審視一番吧。

參見《應避免使用(或慎用)的詞語》一文檢視“盜版”一詞的更多錯誤用法。

其中一個假設就是,軟體公司對擁有軟體有著毋庸置疑的自然權利並因此有權置身所有使用者之上。(如果這真是一個自然權利,那麼無論它對公眾有多大害處,我們也不能反對。)有趣的是,美國憲法和法律慣例排斥這種觀點:版權不是自然權利,而是一個政府強加的、限制使用者自然地複製權的人為壟斷。

另一個未闡明的假設是,對軟體唯一重要的是它能讓你做什麼工作——我們計算機使用者不應關心我們應當擁有什麼樣的社會。

第三個假設是,如果我們不授予軟體公司凌駕於程式的使用者之上的權利,我們將沒有軟體可用(或者決不會有一個程式來做這個或那個特定的工作)。這個假設,在自由軟體運動展示了我們能夠製造豐富的有用的軟體而不在上面拴任何鎖鏈之前,也許看似是有理的。

如果我們拒絕接受這些假設,並基於普通常識下的道德把使用者放在首位來判斷這些問題,我們會得到非常不同的結論。計算機使用者應當有自由去修改程式以適應他們的需求,並自由地共享軟體,因為幫助別人是社會的根基。

篇幅所限,結論背後的展開敘述不在此詳述,讀者請參閱文章《為何軟體不應有主》以及《如今自由軟體更加重要》。

嚴酷的道德抉擇

沒了社群,繼續像從前那樣是不可能了。與此相反,我面臨著一個嚴酷的道德抉擇。

最簡單的選擇是加入私有軟體世界,簽署保密協議並下保證不去幫助黑客同仁。很可能我也會開發在保密協議下分發的軟體,因而壓迫他人並迫使他們也去背叛他們的夥伴。這樣我可以掙錢並在寫程式碼時樂在其中。但我知道當我在事業的盡頭,回望築牆分化人們的歲月時,我將發現我竟耗費了生命以使這個世界變得更糟。

當有人拒絕把我們的印表機控制程式(該程式缺少部分特性使得印表機極其難用)的原始碼交給我和 MIT 人工智慧實驗室時,我已經嘗過了當保密協議接受端的滋味。所以我無法對自己說保密協議是無辜的。當他拒絕和我們分享程式碼時我很生氣,己所不欲,毋施於人。

另一個選擇是離開計算機領域,直截了當但令人不快。這樣我的技藝不會被濫用,但它們會荒廢。我將不會因分化限制計算機使用者而被指責,但這種事仍然會發生。

所以我求索一條路線讓程式設計師可以做一些好事。我捫心自問,有沒有可能有什麼專案或程式可以由我來寫,以再重新成立一個社群?

答案很清晰:我們首先需要的是一個作業系統。它是開始使用一臺計算機的至關重要的軟體。有了作業系統你可以做很多事;沒有作業系統你就完全無法使用計算機。有了自由的作業系統,我們就可以再次擁有互助的黑客社群——並邀請任何人加入。而且任何人都能使用計算機而毋須圖謀去剝奪他們的朋友。

作為一個作業系統開發者,我擁有適當的技藝。故我覺上天降此大任於我,縱不覺註定成功。我決定將系統做成和 Unix 相容以使其可移植,而且這樣 Unix 使用者可以很容易切換到它。追隨黑客傳統,我選了 GNU 這個名字,即“GNU's Not Unix”(意為“GNU 不是 Unix”)的遞迴縮寫。

一個作業系統並不意味著僅僅是一個核心,這樣幾乎沒有足夠的水平來執行其他程式。在20世紀70年代,能稱得上作業系統的軟體都包含了命令處理器、彙編器、編譯器、直譯器、偵錯程式、文字編輯器、郵件程式,以及其它許多程式。ITS、Multics、VMS 和 Unix 都有這些。GNU 作業系統也得有。

後來我聽到希勒爾的這些話:

我不為我誰為我? 我只為我我為何? 此時不作更待何時?

作為無神論者,我不追隨任何宗教領袖,但我有時發現我欽佩它們說過的一些話。

啟動 GNU 工程的決定正是基於類似的情懷。

Free 是“freedom”的“free”

自由軟體free software”一語常常引發誤解——它無關價格、它關乎自由。以下是自由軟體的定義:

一個軟體對你,一個特定使用者而言是自由軟體,當:

  • 不論目的為何,有使用該軟體的自由。
  • 有修改軟體以符合自身需求的自由。(為使得該自由有效行使,你必須能夠訪問原始碼, 因為在沒有原始碼的情況下修改程式非常困難。)
  • 有重新分發該軟體副本的自由,既可免費亦可收費。
  • 有發行該軟體的修改版的自由,這樣社群將從你的改進中受益。

因為 “free” 指的是自由,而不是價格,所以在銷售副本和自由軟體之間沒有矛盾。事實上,銷售副本的自由是很重要的:以 CD-ROM 形式賣出的自由軟體集對社群很重要,並且出售它們是為自由軟體開發籌集資金的重要方法。因此,無法給予人們這些自由的程式就不是自由軟體。

因為 “free” 一詞的二義性,人們用了很長時間找尋替代詞,但更好的詞彙尚未找到。英語比其它語言有更多的單詞和詞彙間的微妙差別,但它缺少一個簡單而明確的單詞用來表示“自由”,就像在“freedom”一詞中——最接近此含義的單詞是 “unfettered”。諸如 “liberated",“freedom” 和 “open” 等替代都有錯誤的含義或一些其它缺點。

GNU 軟體和 GNU 系統

開發一個系統是個非常大的工程。為了達成目標,我決定儘可能適配並使用現有的自由軟體。例如,一開始我就決定用 TeX 來做主要的文字排版器;若干年後,我決定使用 X 視窗系統而不是為 GNU 再寫一個視窗系統。

由於上述決定,和其他類似的決定,GNU 系統不同於所有 GNU 軟體的集合。GNU 系統包含非 GNU 的軟體,這些程式是由其他人或專案為了他們自己的目的而開發的。我們之所以能用它們是因為它們是自由軟體。

工程啟動

我在 1984 年 1 月辭去了 MIT 的工作而開始編寫 GNU 軟體。離開 MIT 是必要的,這樣 MIT 就無法干涉我將 GNU 作為自由軟體發行。如果我還在職, MIT 可能會要求擁有這些作品,並強加他們自己的發行條款,甚至將它們變成一個私有軟體包。我不希望做大量工作卻只是看到它背離其初衷:建立一個新的軟體分享社群。

儘管如此,Winston 教授,後來的 MIT 人工智慧實驗室的領導,友善地邀請我繼續使用實驗室的設施。

第一步

GNU 工程開始前不久,我聽說了自由大學編譯器工具包Free University Compiler Kit,又稱 VUCK(荷蘭語的“自由”一詞以 開頭)。該編譯器設計成支援多種程式語言,包括 C 和 Pascal,並支援多種目標機器,我曾寫信給其作者詢問 GNU 是否可以使用它。

他帶著嘲弄回答了,說大學是自由的而編譯器不是。因此我決定首先為 GNU 工程而寫的程式就是一個支援多種語言,多平臺的編譯器。

我希望能避免只靠自己編寫整個編譯器,因此我要來了 Lawrence Livermore 實驗室開發的多平臺編譯器 Pastel 的原始碼。它支援一種適合系統程式設計的 Pascal 語言的擴充版本,並由該語言寫成。我給它加上了一個 C 語言前端,並開始將其移植到 Motorola 68000 計算機。但當我發現該編譯器需要數兆位元組的棧空間,而可用的 68000 Unix 系統僅允許 64k 時,我只得放棄。

隨後我瞭解到 Pastel 編譯器的工作方式是分析整個輸入檔案得到一個語法樹,將整個語法樹轉化為一條“指令”鏈,再產生整個輸出檔案,整個過程不釋放任何記憶體空間。到此為止,我總結我只得從頭開始寫一個新的編譯器。那個新編譯器現在叫 GCC:其中沒有一點 Pastel 編譯器的內容,不過我仍努力把我之前寫的 C 前端適配上去並用上。但那是幾年後的事了:首先,我做出了 GNU Emacs。

GNU Emacs

我從 1984 年 9 月開始寫 GNU Emacs,從 1985 年初它就開始可用了。這使得我開始可以使用 Unix 系統編輯檔案:因為沒有興趣學用 vi 或 ed,在那之前我在其他型別的機器上編輯檔案。

這時候,人們開始想用 GNU Emacs,因此出現了該如何發行它的問題。當然,我把它放在了我在 MIT 時用的計算機的匿名 ftp 伺服器上(那臺計算機 prep.ai.mit.edu,因而成了主要的 GNU ftp 發行站點,當它一年後退役時,我將其域名轉移到我們的新 ftp 伺服器上)。但在那時,不少感興趣的人們並不在網際網路上因而無法通過 ftp 得到副本。所以問題是,我該跟他們說什麼?

我可以說,“找個上網的朋友幫你下載一個”。或者我可以像對原來 PDP-10 Emacs 那樣做:跟他們說,“寄一盤磁帶和 SASE (貼足郵資寫明發信人)來,我會把 Emacs 寫到磁帶上寄回去。”但我沒有工作,而我正在尋找通過自由軟體掙錢的方法。所以我宣佈我會寄一盤磁帶給任何想要的人,要價 150 美元。我以這種方式啟動了發行自由軟體的事業,那是今天發行整個 GNU/Linux 系統的公司們的先驅。

是一個對任何使用者都自由的程式嗎?

如果一個程式離開作者的手時是自由軟體,這並不一定意味著它對擁有其副本的每一個人都是自由軟體。例如,公有領域的軟體(沒有版權的軟體)是自由軟體;但任何人都可以製作由它修改而來的私有版本。類似的,不少自由程式是被版權保護但按照一個簡單的、允許私有修改版的寬容性協議發行。

參見《自由與非自由軟體的分類》查詢更多的公有領域軟體。

這個問題的典型例子是 X 視窗系統。這是一個由 MIT 開發並以一個寬容性協議發行的自由軟體,它很快被各個計算機公司接受。它們把 X 以僅有二進位制的形式加到它們的私有 Unix 系統中,並被同樣的保密協議控制著。這些 X 的副本和 Unix 一樣,已經不再是自由軟體。

X 視窗系統的開發者們並不認為這是一個問題——他們期望並有意使其發生。他們的目標不是自由,而僅僅是“成功”,那種定義為“有許多使用者”的成功。他們不在意這些使用者是否擁有自由,只是希望他們人數眾多。

這導致一個矛盾的情形,兩種不同的自由度計算方法對同一個問題“這個程式自由嗎?”給出不同的回答。如果你基於 MIT 許可證的發行條款給出的自由作判斷,你就會說 X 是自由軟體。但是如果你以一般 X 使用者的自由來衡量,你就只能說它是私有軟體。大多數 X 使用者當時正在使用的是隨 Unix 系統而來的私有版本,而不是自由版本。

左版Copyleft和 GNU GPL

GNU 的目標是給與使用者自由,而不僅僅是流行。所以我們需要使用可以阻止 GNU 軟體被轉變成私有軟體的發行條款。我們使用的方法叫“左版”。

在1984或1985年,Don Hopkins(一位非常有想象力的朋友)寄給我一封信。在信封上他寫下了不少有趣的話,包括這句:“Copyleft——逆轉一切權利。”我用 “copyleft” 一詞來命名我正在開發的發行理念。

在本文中採用雲南大學的賈星克、李極光二位教授的“左版”的譯法——譯者注。

左版使用版權法,但使它的作用與之通常的作用相反:它成為一種保持程式自由的手段,而不是限制程式的手段。

左版的核心思想是給與任何人執行程式、複製程式、改寫程式,和發行改寫後的程式的許可——但沒有新增他們自己的限制的許可。這樣一來,定義“自由軟體”的關鍵自由藉由每個擁有副本的人得以保證,這些自由成了不可剝奪的權利。

對於一個有效的左版,修改版也得是自由的。這確保了建立在我們的工作基礎上的作品釋出後將有用於社群。當以程式設計師為業者志願改進 GNU 軟體時,左版能防止他們的僱主說:“你不能分享那些改進,因為我們要用它們來做一個我們的私有版本。”

如果我們要確保程式的每個使用者的自由,就需要做出修改保證必須的自由。那些私有化 X 視窗系統的公司通常作了一些修改以將其移植到它們的系統和硬體。這些改動與 X 的大規模擴充套件相比而言是較小的,但是它們並非微不足道。如果進行修改是拒絕使用者自由的一個藉口,任何人來利用這一藉口都是非常容易的。

一個有關的問題涉及將自由的程式和非自由的程式碼結合到一起。這樣的結合體將不可避免變得不自由;任何一個在非自由部分上缺失的自由也將在整體上缺失。允許這樣的結合將會開啟足以沉掉一艘船的缺口:任何新增或結合到左版程式上的東西必須使得更大的結合版也是自由和左版的。

我們明確為大多數 GNU 軟體使用了左版的 GNU 通用公共許可證,或簡稱 GNU GPL。我們在特定場合下有其它種類的左版可以使用。GNU 手冊也是左版的,但使用一個非常簡化的左版型別,因為GNU GPL 的複雜性對手冊是不需要的。

我們現在對文件使用 GNU 自由文件許可證GNU Free Documentation License

自由軟體基金會Free Software Foundation

隨著使用 Emacs 的興趣的增長,開始有其他人加入 GNU 工程,我們感到再次籌集資金的時候到了。所以我們在 1985 年建立了自由軟體基金會Free Software Foundation(FSF),一個發展自由軟體的免稅慈善機構。FSF 也接手了發行 Emacs 磁帶的工作;後來通過將其他自由軟體(既有 GNU 的也有非 GNU 的)加到磁帶上,和賣軟體的自由手冊擴充套件了該業務。

FSF 的大部分收入曾經來自銷售自由軟體的副本和其他相關服務(原始碼的 CD-ROM、二進位制檔案的 CD-ROM、精心印刷的手冊,都有著再發行和修改的自由),以及豪華的發行版(我們為客戶選擇的平臺定製的完整的軟體集)。今天 FSF 仍然銷售手冊和其他部件,但大部分的資金來自成員的會費。你可以通過 http://fsf.org/join 來加入 FSF。

於我們的線上商店中可見。

自由軟體基金會的僱員已經編寫並維護了大量的 GNU 軟體包。兩個值得注意的是 C 庫和 shell。GNU C 庫是執行於 GNU/Linux 系統上的任一程式用於和 Linux 通訊的元件,由自由軟體基金會的成員之一,Roland McGrath 所開發。用於大部分 GNU/Linux 系統的 shell 是 BASH,“Bourne Again Shell”,由 FSF 僱員 Brian Fox 編寫。

“Bourne Again Shell” 是對 “Bourne Shell”——Unix 上普遍使用的 shell 玩的文字遊戲。

(Bourne 與表示出生的 born 諧音——譯者注)

我們資助了這些程式的開發是因為 GNU 工程並不僅僅與工具和開發環境有關。我們的目標是一個完整的作業系統,而該目標需要這些程式。

支援自由軟體

自由軟體的哲學抵制一種特定的分佈極廣的商業實踐,但它不反對商業。當商業尊重使用者的自由時,我們祝願它們成功。

銷售 Emacs 的副本展現了一種自由軟體的生意。當 FSF 接手了這項生意之後,我需要另一種方法謀生。我在銷售與我所開發的自由軟體相關的服務中找到了它。它包括教人們諸如對 GNU Emacs 程式設計,定製 GCC,和主要是移植 GCC 到新平臺的軟體開發的課題。

今天,每個此類的自由軟體生意被許多公司實踐著。有的通過 CD-ROM 發行自由軟體集;其他的則銷售服務,從回答使用者問題,到改正程式錯誤,以至增加大的新功能等不同層次上。我們甚至開始看到基於發起新的自由軟體產品的自由軟體公司。

值得特別注意的是,不少公司儘管將它們自己與 “open source” 一詞聯絡在一起,實際上它們的生意是基於與自由軟體一起工作的非自由軟體。它們不是自由軟體公司,它們是私有軟體公司,其產品誘惑使用者遠離自由。它們稱此為“增值包”,反映了它們希望我們接受的價值觀念:便利在自由之上。如果我們更珍惜自由,我們應該稱它們為“去自由的”包。

技術目標

GNU的首要目標是作為自由軟體。即使 GNU 對 Unix 沒有技術優勢,它也有允許使用者合作的社會優勢;它還有道德優勢:尊重使用者的自由。

但是將已知好的實踐檢驗過的標準應用到工作上是很自然的——例如,動態地分配資料結構以避免武斷地固定大小限制,並在任何有意義之處處理所有可能的 8 位程式碼。

另外,我們放棄了面向小記憶體的 Unix 設計,決定不支援 16 位機器(顯然 32 位機器在 GNU 系統完成時將成為主流),並且不為了減少記憶體使用而作任何努力,除非超過了一兆位元組。在處理非常大但不是至關緊要的檔案的程式中,我們鼓勵程式設計師們將整個檔案讀入記憶體,然後掃描其內容而不必顧慮輸入輸出的問題。

這些決定使得不少 GNU 程式在可靠性和速度上超越了在 Unix 上的對應的程式。

捐來的計算機

當 GNU 工程聲名鵲起,人們開始給該工程捐贈執行 Unix 的計算機。這非常有用,因為開發 GNU 元件最輕鬆的方法就是在一個 Unix 系統上做,然後一個一個地替換掉 Unix 系統上的元件。但這引發了一個道德問題:我們擁有 Unix 的副本從根本上說是不是正當的。

Unix 以前是(並且現在還是)私有軟體,而 GNU 工程的哲學說我們不該用私有軟體。然而,應用與推論出“自衛的暴力是正當的”相同的理由,我的結論是:在開發用來幫助其他人停止使用私有軟體包的自由軟體代替品的關鍵時刻,使用私有軟體包是合理的。

但是,儘管這是一個可以合理化的罪惡,它仍然是罪惡。今天我們已經不再持有任何 Unix 的副本,因為我們已經用自由的作業系統取代了它們。如果我們不能將一臺計算機的作業系統換成自由的,我們就把整臺計算機都換掉。

GNU 任務清單

隨著 GNU 工程的進行,以及越來越多的系統元件被找到或開發,最終使得整理一份未完成工作的清單變得很有用。我們用它來招募開發者來編寫缺失的部分。它被稱為 GNU 任務清單。除了尚未完工的 Unix 元件外,我們列出了額外的各種各樣的其它有用的軟體和文件專案,我們認為,這些是一個真正完整的系統所應當擁有的。

如今,留在 GNU 任務清單中的 Unix 元件除了一些無關緊要的之外已經幾乎沒有了——它們都已經被完成了。但清單中充滿了可以被稱為“應用程式”的專案。將任何不止能吸引一小部分使用者的程式加到作業系統中都是有益的。

就連遊戲都在任務清單裡——而且從一開始就有。Unix 包含遊戲,所以 GNU 自然也該包含。但相容性對遊戲來說不是問題,所以我們沒有跟著 Unix 已有的遊戲列表走。作為代替,我們列出了使用者可能會喜歡的一系列不同種類的遊戲。

任務清單寫於 1998 年。2009 年我們不再維護長任務列表。社群的自由軟體開發得很快,我們沒法全部追蹤到。取而代之,我們有一個高優先順序專案的列表——一個更短的列表,列舉了我們十分想要鼓勵人們去寫的專案。

GNU 庫 GPL

GNU C 庫使用一種特別的左版,稱作 GNU 庫 GPL(LGPL),允許將私有軟體連結到該庫上。為什麼需要這樣的特例?

這個許可證現在叫 GNU 寬通用公共許可證GNU Lesser General Public License,以免給出所有庫都該使用它的印象。更多資訊見 “Why You Shouldn’t Use the Lesser GPL for Your Next Library”。

這不是個原則問題:沒有哪個原則說私有軟體產品有資格包含我們的程式碼(為什麼要為一個嚴辭拒絕與我們分享的工程作貢獻呢?)為 C 庫,或任何庫使用 LGPL,是個策略問題。

C 庫做的是通用的工作:每個私有系統或編譯器都附帶 C 庫。因此,讓我們的 C 庫只能為自由軟體所用不會為自由軟體帶來任何優勢——這隻會嚇阻人們使用我們的庫。

有一個系統是這個的例外:在 GNU 系統(包括 GNU/Linux)中,GNU C 庫是唯一的 C 庫。所以 GNU C 庫的發行許可決定了是否可以為 GNU 系統編譯私有程式。沒有道德理由允許私有應用在 GNU 系統中執行,但從戰略上來看禁止它們會更多地嚇阻人們使用 GNU 系統,而不是鼓勵開發自由應用。所以使用庫 GPL 對 C 庫是個好策略。

對於其他的庫,策略性的決定需要具體問題具體分析。當一個庫做的是一種能幫助編寫特定種類程式的特殊工作時,那麼將其用 GPL 發行,限制其只能被用於自由軟體,是一種幫助其它自由軟體開發者的方法。這給了他們面對私有軟體的一個優勢。

想一下 GNU Readline,一個被開發用來為 BASH 提供命令列編輯功能的庫。Readline 是用普通的 GNU GPL 而不是庫 GPL 發行的。這可能確實減少了 Readline 的使用量,但這對我們沒有損失。與此同時,至少有一個可用的應用特地為了能夠使用 Readline 而變成了自由軟體,那是社群真正的收穫。

私有軟體有金錢提供的優勢;自由軟體開發者則要相互取得優勢。我希望有朝一日我們能擁有大量受 GPL 保護的、沒有可用的私有替代的庫,提供作為新自由軟體的磚石的有用模組,併為進一步的自由軟體開發新增巨大的優勢。

搔到癢處?

Eric Raymond 說“每一個優秀的軟體作品都從搔到開發者個人的癢處(意為“解決開發者個人的問題”——譯者注)開始。”也許有時是這樣。但不少 GNU 軟體的關鍵部分是為了一個完整的自由作業系統而開發的。它們來自願景和計劃,而不是衝動。

Eric Raymond 是開源的主要擁護者;參見《為什麼說開源漏掉了自由軟體的要點》。

他的《大講堂與集市》已由機械工業出版社於2014年出版,衛劍釩譯。

例如,我們開發了 GNU C 庫因為類 Unix 系統需要一個 C 庫,開發了 BASH 因為類 Unix 系統需要一個 shell,還有 GNU tar 因為類 Unix 系統需要一個 tar 程式。我們自己的程式也同樣如此—— GNU C 編譯器,GNU Emacs,GDB 和 GNU Make。

有些 GNU 程式是為應對我們的自由的特定威脅而開發的。為此,我們開發了 gzip 來取代因 LZW 專利而從社群流失的 Compress 程式。我們發現有人開發 LessTif,最近更開始了 GNOME 和 Harmony,來解決因某些私有軟體庫(見下文)所帶來的問題。我們正在開發 GNU 隱私衛士(即 GnuPG 簡稱 GPG。基於 OpenPGP 協議實現的自由的用於加密、數字簽名及產生非對稱金鑰對的軟體。——譯者注)來取代流行的非自由加密軟體,因為使用者不應該在隱私和自由之間作出選擇。

當然,寫這些程式的人們變得對這項工作感興趣,許多人為了自己的興趣和需要給它們新增了很多功能。但那並不是這些程式存在的原因。

出乎意料的發展

在 GNU 工程剛剛開始的時候,我覺得我們將開發整個 GNU 系統,然後整個發行。而這並沒有發生。

因為 GNU 系統的每一個元件都是在 Unix 系統中實現的,每個元件早在一個完整的 GNU 出現以前就都可以在 Unix 系統中執行。這些程式有的變得流行,而使用者們開始擴充並移植它們——到各種互不相容的 Unix 版本上,有時也會移植到其他系統。

這個過程使得這些程式更加強大,且為 GNU 工程引來了資金和貢獻者。但或許也使得一個最小可用系統延遲了數年,因為 GNU 的開發者們把時間投入到維護這些移植版和為已有元件增加特性,而不是去編寫一個個缺失的元件上。

GNU Hurd

到了 1990 年,GNU 系統幾乎已完成了:唯一主要的缺失部分是核心。我們已經決定將我們的核心實現為一組執行在 Mach 上的服務程式。Mach 是一個由卡內基梅隆大學,而後在猶他大學開發的微核心;GNU Hurd 是執行於 Mach 之上一組服務(正如一群牛羚——GNU)(Hurd 與 herd 諧音,而 herd 有“群”的意思——譯者注),負責 Unix 核心的各種任務。開發的啟動,因為我們要等 Mach 像它承諾的那樣作為自由軟體發行,而有所延誤。

選擇這種設計的一個原因是為了避免此工作中看起來似乎是最困難的一部分:在沒有一個原始碼層偵錯程式的條件下除錯核心程式。這部分工作在 Mach 中已被完成,因此我們期待能將 Hurd 服務作為使用者程式來除錯,用 GDB。但這花了很長時間才做到,而互相發訊息的多執行緒服務群實際上非常難以除錯。這使得讓 Hurd 能夠穩定工作的程式延長了很多年。

Alix

GNU 的核心原本並未打算叫 Hurd。它原本的名字是 Alix——以我當時的戀人命名。她,作為一個 Unix 系統管理員,指出她的名字是多麼符合 Unix 系統版本的一般命名模式;作為玩笑,她跟朋友說:“有人一定得用我的名字給一個核心起名。”我什麼都沒說,但打算用一個叫 Alix 的核心讓她吃一驚。

事情並沒有保持不變。Michael(現在叫 Thomas)Bushnell,核心的主要開發者,鐘意 Hurd 這個名字,並重新定義了 Alix 來表示核心的某個特定部分——用於捕獲系統呼叫並向 Hurd 伺服器發訊息以處理的那個部分。

後來,Alix 和我分手了,她還改了名字;與此獨立地,Hurd 的設計改變了,以至於 C 庫直接向伺服器發訊息,而這使得那個 Alix 元件從設計中消失了。

但在這些事情發生以前,她的一個朋友在 Hurd 的原始碼中偶然見到了 Alix 這個名字,並告訴了她。所以她確實有機會發現有一個核心以她命名。

Linux 和 GNU/Linux

GNU Hurd 尚不適合用於生產,我們也不知道它還能不能適合。這個基於能力的設計有著直接來源於設計靈活性的問題,而且不知道有沒有解決方案。

幸運的是,有另一個核心可用。在1991年,Linus Torvalds 開發了一個 Unix 相容的核心並稱之為 Linux。它一開始是私有的,但在 1992 年,他使其成為自由軟體;整合 Linux 和尚不完整的 GNU 得到了一個完全自由的作業系統(當然,整合工作自身也很重要)。正是因為 Linux,我們今天終於能執行 GNU 系統的一個版本。

我們稱這個版本的系統為 GNU/Linux,以表達他是由 GNU 系統和作為核心的 Linux 整合而成的。不要實用主義地稱整個系統為“Linux”,因為那將我們的工作歸於他人。請同等程度地提及我們。

更多資訊見 “GNU/Linux FAQ” 和《Linux 和 GNU 作業系統》。

未來的挑戰

我們已經證實了我們開發多種型別的自由軟體的能力。但這並不意味著我們是不可戰勝、不可阻擋的。一些挑戰使得自由軟體的未來變得不確定;與它們會戰將需要堅實的努力和耐力,有時要奮戰數年。這將會需要那種當人們珍惜他們的自由,並且不讓任何人將其奪走時所顯示的決心。

下邊四個段落將討論這些挑戰。

機密硬體

硬體廠商愈發傾向於對硬體規格保密。這使得編寫讓 Linux 和 XFree86 能支援新硬體的自由驅動程式變得很難。現在我們有了完整的自由作業系統,但是如果不能支援明天的計算機,我們將會在明天失去它們。

有兩種方法來應付這個問題。程式設計師可以採取逆向工程的手段來了解如何支援這些硬體。其他的人則可以選用被自由軟體支援的硬體;隨著我們的人數增加,規格保密將成為一個自取滅亡的策略。

逆向工程是件大工作;我們會有程式設計師具備足夠的決心去擔負這件工作嗎?是的——如果我們已經建立了認為自由軟體是個原則問題,而私有驅動程式不可容忍的堅定信念。我們中的大多數人會額外花錢,或甚至額外花時間,從而我們可以使用自由驅動程式嗎?是的,如果擁抱自由的決心被廣泛傳播。

[2008 腳註:這個問題同樣延伸到 BIOS. 有一個自由的 BIOS,LibreBoot(coreboot 的一個發行版);這個問題對計算機變得重要起來,因為 LibreBoot 可以不用非自由的“Blob”就能支援它們。]

不自由的庫

執行於自由作業系統上的非自由庫表現得就像針對自由軟體開發者的陷阱一般。庫的誘人特性是誘餌;如果你用了這個庫,你就掉進了陷阱,因為你的程式無法有用地成為自由作業系統的一部分(嚴格來說,我們可以包含你的程式,但沒有了該庫它就無法執行)。更糟糕的是,如果一個使用私有庫的程式流行起來,它可引誘其他沒有懷疑的程式設計師們落入陷阱。

這樣的程式的第一個例項是 80 年代的 Motif 工具箱,儘管那時還沒有自由作業系統,但是很顯然 Motif 以後會對自由作業系統引發什麼問題。GNU 工程通過兩種方式回應這個問題:通過請求個別的自由軟體工程在支援 Motif 的同時也支援自由的 X 部件工具箱,並請求一些人編寫替代 Motif 的自由軟體。該工作花費許多年時間;由匈牙利程式設計師們開發的 LessTif,在 1997 年才變得足夠強而得以支援大多數 Motif 應用程式。

在 1996 到 1998 年間,另一個不自由的 GUI 工具箱庫,叫 Qt,被用在 KDE 桌面這一包含大量自由軟體的集合中。

自由的 GNU/Linux 系統不能使用 KDE,因為我們不能使用那個庫。但是一些不嚴格堅持自由軟體的 GNU/Linux 系統商業發行者將 KDE 加入到它們的系統中——而產生了有更強能力,和更少自由的系統。KDE 小組積極地鼓勵更多的程式設計師們使用 Qt,成百萬的新“Linux 使用者”從來都不知道有這樣一個問題的存在。情形相當糟糕。

自由軟體社群以兩種方法應對這個問題: GNOME 和 Harmony。

GNOME,GNU Network Object Model Environment(譯為“GNU 網路物件模型環境”,現在已經不再用這個說法——譯者注),是 GNU 的桌面專案。從1997年開始,由 Miguel de Icaza 在紅帽軟體的支援下開發,GNOME 開始提供類似的桌面工具,但排它地只使用自由軟體。它也有技術上的優勢,如支援多種語言,而不僅僅是 C++。但是它的主要目的是自由:不需要使用任何非自由軟體。

Harmony 是一個相容的替代庫,設計為使得無需 Qt 執行 KDE 軟體成為可能。

在 1998 年 11 月,Qt 的開發者宣告改動許可證,當其實施後,應該會使得 Qt 成為自由軟體。雖然沒辦法確信,但是我想這應該部分歸功於社群對 Qt 是非自由軟體時所造成的問題的堅定回應(新的許可證既不方便也不公正,所以仍舊值得去避免使用 Qt)。

[後記:2000 年 9 月, Qt 按 GNU GPL 發行,實際解決了這個問題。]

我們將如何應對下一個誘人的非自由庫呢?整個社群會明白要遠離陷阱嗎?或者我們中的許多人將為了方便而放棄自由,從而產生一個大問題?我們的未來將取決於我們自身的哲學。

軟體專利

我們面對的最惡劣的威脅來自軟體專利,它可以對自由軟體加上演算法和功能的限制多達二十年。LZW 壓縮演算法的專利申請於1983年,而我們仍然無法發行能夠生成適當壓縮過的 GIF 的自由軟體。[直到2009年這些專利才過期。]1998年,由於專利訴訟威脅,一個用於生成 MP3 壓縮音訊的自由程式被迫從發行版中移除。

仍有辦法對付專利:我們可以尋找證據以證明一個專利是無效的,也可以尋找替代方法來完成工作。但是這每一種方法只是偶爾才起作用;當它們都失敗時,一個專利可能會迫使所有的自由軟體都缺少某些使用者想要的功能。當這種事發生時我們可以做些什麼呢?

我們中因自由而重視自由軟體的人們無論如何都將與自由軟體共進退。我們將設法不用專利保護的功能而完成工作。但是那些認為自由軟體技術出眾而重視它的人們,有可能在專利抑制自由軟體時認為這是自由軟體的失敗。因而,雖然討論軟體開發的“市集”模式的實用效力和一些自由軟體的可靠性和能力是有用的,但我們決不能止步於此。我們必須探討自由和原則。

自由文件

我們自由作業系統的最大不足不是在軟體中——而是缺乏可以包含在我們系統中的優秀自由手冊。文件資料是任何軟體包的要害部分;當一個重要的自由軟體包沒有與優秀的自由手冊一起出現,那就是一個重大缺陷。今天我們有許多這樣的缺陷。

自由文件,像自由軟體一樣,是自由問題,不是價格問題。自由手冊的標準幾乎與自由軟體完全相同:它是為了給予所有使用者某種自由。必須允許重新發布(包括商業銷售),不論是線上還是書面形式,因而手冊能夠伴隨每個程式的每個副本。

改動的許可同樣至關重要。作為一個普遍規律,我不相信人們有必要擁有修改所有種類文章和書籍的許可。例如,我不認為你或我應該被迫給予修改像本文這樣描述我們行為和我們觀點的文章的許可權。

但是有一個特殊的原因說明為什麼修改自由軟體文件資料的自由是要緊的。當人們行使他們修改軟體的權利,並且增加或改變其功能時,如果他們是盡職的,則他們也會同時修改文件和資料——因而他們能隨著修改過的程式一起提供正確和可用的文件資料。一個不允許程式設計師們盡職並完成該工作的手冊不符合我們社群的要求。

關於修改應該如何完成的一些限制並不會造成問題。例如,保持原作者的版權宣告,發行條款,或作者列表的要求是正當的。要求修改後的版本包括它們是修改版本的宣告也是沒有問題的,即使有整個章節不能刪除或修改,只要這些章節處理的是非技術主題。這些型別的限制不是問題,因為它們不阻止盡職程式設計師修改手冊以適應修改過的程式。換種說法,它們不妨礙自由軟體社群完全利用該手冊。

然而,必須能夠修改手冊中的所有技術性內容,並將結果以所有常規介質,通過所有常規渠道分發;否則,這些限制將對社群造成阻礙,手冊將變得不自由,而我們需要另一手冊。

自由軟體開發者們會有覺悟和決心去生產全系列的自由手冊嗎?再說一次,我們的未來取決於哲學。

我們必須談論自由

估計當今有數千萬的使用者使用諸如 Debian GNU/Linux 和紅帽“Linux”這樣的 GNU/Linux 系統。自由軟體已經發展到了這樣實用的優勢,使得使用者純粹為了實用原因而聚集到它身邊。

這種現象的好結果是明顯的:更多人有興趣開發自由軟體,更多使用者參與到自由軟體產業,以及更能鼓勵公司開發商業自由軟體而不是私有軟體產品。

但是對軟體的興趣增長快於對其指導哲學的瞭解,這帶來了一定麻煩。我們面對上述挑戰和威脅的能力依賴於堅決主張自由的意志。為了確定我們的社群擁有這個意志,我們需要在新使用者來到社群時向他們傳播這樣的思想。

但是我們正在這點上失敗:吸引新使用者加入社群的努力大大超越了教育他們成為我們社群的好公民的努力。我們需要做這兩件事,而且我們也需要保持這兩個努力的平衡。

開放原始碼Open Source

當 1998 年一部分社群決定停止使用術語“自由軟體free software”並改為說“開源軟體open source software”時,教導新使用者有關自由的觀念變得更加困難。

一些喜歡該術語的人想要避免“自由free”與“免費gratis”的混淆——這個目標是正當的。其他人卻打算將激勵了自由軟體運動和 GNU 工程的原則精神拋到一邊,反而迎合行政和商業使用者,而這些使用者中的許多人持有一種將利潤置於自由,社群和原則之上的意識形態。因而,“開源open source”的花言巧語集中在製作高質量,強有力軟體的潛能上,但是避開自由,社群和原則的思想。

《Linux》雜誌是一個清晰的例子——其中充滿了利用 GNU/Linux 執行私有軟體的廣告。當下一個 Motif 或 Qt 出現時,這些雜誌將警告程式設計師們遠離它還是為它登載廣告呢?

商業支援能以許多方式為社群作貢獻;其它種類的支援也都一樣,它是有益的。但是為了贏得他們的支援而減少對自由和原則宣講可能損失慘重;它使得前述“軟體推廣和公民意識教育”之間的失衡變得愈加糟糕。

“自由軟體”和“開放原始碼”或多或少地描述了同一個軟體的型別,但對軟體本身和價值觀的描述是不同的。GNU 工程繼續使用“自由軟體”這個術語,來表達自由是重要的思想,而不僅僅是技術。

嘗試!

猶達大師的名言“沒有‘嘗試’ There is no ‘try’ ”聽似幽雅,但對我不起作用。我已經完成了我的大部分工作,與此同時擔心我能不能做,且不確定如果我做了,我的努力夠不夠完成目標。不過無論如何我嘗試了,因為在敵人和我的城池之間除了我沒有任何人。令我吃驚的是,我有時會成功。

有時我失敗了;我的一些城池陷落了。隨後我發現另一個受到威脅的城池,併為另一場戰鬥做好準備。天長日久,我學會了尋找威脅並將我置於城池和威脅之間,並召集其他黑客和我聯合。

今天,我不是在單打獨鬥。當我看見一個團的黑客挖戰壕堅守戰線時的感覺是一種安慰和樂趣,我意識到,目前,這個城池也許能倖存。但是危險與年俱增,並且現在 Microsoft 已經明確地將目標對準我們的社群。我們不能把自由的將來視為天命。別把它當作天命!如果你想要保持你的自由,你必須備戰以保衛它。

相關文章