English [en]   ??????? [ar]   català [ca]   ?e?tina [cs]   Deutsch [de]   ελληνικ? [el]   espa?ol [es]   suomi [fi]   fran?ais [fr]   hrvatski [hr]   Bahasa Indonesia [id]   italiano [it]   日本語 [ja]   ??? [ko]   lietuvi? [lt]   Nederlands [nl]   polski [pl]   português do Brasil [pt-br]   русский [ru]   Shqip [sq]   Türk?e [tr]   укра?нська [uk]   簡體中文 [zh-cn]   繁體中文 [zh-tw]  

這是針對英文原版頁面的中文翻譯。

GNU工程

刀塔自走棋手游什么时候出 www.zvajc.icu Richard Stallman

最初發表于開源一書。Richard Stallman本人從來不支持“開源”,但他還是貢獻了此文。這樣做可以避免自由軟件運動的理念在那本書中被完全忽略。

為什么現在堅持軟件自由比以往更加重要。

第一個軟件分享社區

當我1971年開始在MIT的人工智能實驗室工作的時候,我成為了當時已經存在多年的一個軟件共享社區的一員。并不是只有我們的社區分享軟件;分享軟件從電腦出現就開始了,正如分享菜譜從烹飪出現就開始了一樣。但是我們做得更多。

人工智能實驗室當時使用一種稱為ITS的分時操作系統。該系統是實驗室的黑客(1)設計并用匯編語言為Digital公司的PDP-10計算機編寫的,該計算機是當時的大型計算機之一。作為社區一員,也作為人工智能實驗室的系統黑客,我的工作就是改進這個系統。

我們沒有稱我們的軟件是“自由軟件”,因為那時還沒有這個概念;但那些軟件就是自由的。無論何時,只要其他大學或公司想移植和使用一個程序,我們都很高興提供該程序。如果你對別人的程序有興趣但不太熟悉,你總是可以要一份源代碼,因此你可以閱讀源代碼、修改源代碼,甚至把它拆分并用來構建新的程序。

(1) 使用“黑客”一詞來表示“安全破壞者”是部分大眾媒體的亂用。作為黑客,我們拒絕認同這種解釋,我們還是用它來表示熱愛編程的人、享受技術的人,或者二者兼而有之的人。請閱讀我的文章關于黑客。

社區的解體

八十年代初,Digital的PDP-10系列停產,形勢發生了劇變。該系列大型機在六十年代優雅而有力的架構無法自然延伸到八十年代開始使用的更大的地址空間。這意味著幾乎所有構成ITS的程序都過時了。

而不久前,人工智能實驗室的黑客社區已經解體了。1981年,從實驗室分拆出來的Symbolics公司雇傭了幾乎全部實驗室黑客,減員的社區無以為續。(Steve Levy的《黑客》一書描述了這些事件,并給出了社區鼎盛時期的清晰寫照。)當人工智能實驗室在1982年購買了一臺新的PDP-10后,其管理員決定使用Digital公司的非自由分時系統來代替ITS。

那時的新計算機,象VAX或68020,都有它們自己的操作系統,但是都不是自由軟件:即使只是要一份可執行文件的副本,你都需要簽署保密協議。

這表示使用計算機的第一步是承諾不會幫助別人?;ブ納縝喚沽?。專有軟件的所有者制定了規則:“如果你和別人分享軟件,你就是從事盜版。如果你想做軟件更改,請乞求所有者吧。”

專有軟件的社會系統—不能分享或更改軟件的系統—是反社會的,因為它不道德、它完全錯誤。這樣的想法可能令某些讀者吃驚。但是對一個以分裂公眾、使其用戶無助為基礎的系統,我們還能怎么說呢?那些對此吃驚的讀者也許接受了專有軟件的社會系統,或者按照專有軟件行業推薦的術語來做了判斷。軟件發布商長期以來一直努力讓人們相信:對這個問題只有一個看法。

當軟件發布商說到“加強”他們的“權利”或者“打擊盜版”時,他們說的其實是次要問題。他們的真正想法是讓公眾接受這些說法背后的假設是理所當然的、無需審視的。那么,就讓我們審視一下這些假設。

其中一個假設是軟件公司對軟件擁有無可質疑的自然所有權,進而擁有超越其用戶的權力。(如果這是自然權利,那么無論這對公眾造成什么傷害,我們都無法反駁。)有意思的是,美國憲法和法律慣例拒絕這個觀點;版權不是自然權利,而是人為的、政府強加的壟斷,它用來限制用戶拷貝復制的自然權利。

另一個隱含的假設是軟件唯一的重要性在于它能讓你做什么—軟件用戶不必去關心應該擁有什么樣的社會。

第三個假設是如果不讓軟件公司有超越其用戶的權力,那么我們就沒有可用的軟件(或者就沒有能夠執行特定任務的程序)。該假設看起來是可能的,直到自由軟件運動證明:我們可以創造大量有用的軟件而不用在其上橫加鎖鏈。

如果我們拒絕接受這些假設,把用戶放在首位,并根據常識性的道德來判斷,那么我們就可以得出不同的結論。計算機用戶應該能夠自由地修改軟件來適應自己的需求,也應該能夠自由地分享軟件,因為互相幫助是社會的基礎。

鑒于篇幅限制,我們不在此對結論背后的推理做詳細論述,我為讀者提供以下網頁做參考: //www.zvajc.icu/philosophy/why-free.html //www.zvajc.icu/philosophy/free-software-even-more-important.html。

嚴酷的道德抉擇

社區不復存在,我無法維持原樣。反過來,我面臨著嚴酷的道德抉擇。

容易的選擇是加入專有軟件的世界、簽署保密協議并發誓不再幫助我的黑客伙伴。我極有可能也在開發按照保密協議發布的軟件,因此也讓其他人面臨背叛伙伴的壓力。

我可能因此發財,也可能編程時樂在其中。但是我知道在我結束職業生涯之時,當我回顧那些建造圍墻、隔離大眾的歲月之時,我會感到我的一生是在讓這個世界變得更糟糕。

當有人拒絕把控制打印機的源代碼給我和MIT人工智能實驗室的時候(由于缺少一些功能,該程序讓使用打印機的人非常惱火),我就已經體會到了作為保密協議接收方的感受。

另一個選擇,直截了當卻令人不快,就是離開計算機行業。那樣也許我的技術不會被濫用,但還是浪費了。我自己可能不會因為分化和限制計算機用戶而遭受譴責,可這種事還是會發生。

我因而探索一條程序員能夠做些好事的道路。我捫心自問,我能不能寫一些程序,從而使再建社區成為可能?

答案顯而易見:首先需要的是一個操作系統,它是使用電腦的關鍵軟件。有了操作系統,你就可以做許多事情;沒有它,你根本無法運行電腦。有了自由的操作系統,我們就能夠再次建立互助黑客的社區—并邀請人們加入。這樣,人們就可以使用電腦而不必因此失去朋友。

作為操作系統開發者,我正好具備這個技能。即使不能確保成功,我還是意識到我義不容辭。我選擇讓這個系統和Unix兼容,這樣Unix用戶就能夠輕易切換過來。選擇GNU作為名字是延續黑客的傳統1,它是“GNU's Not Unix(GNU并非Unix)”的首字母同義遞歸。它的發音是帶g的單音節。

操作系統并不是僅僅有內核,而無法運行其他程序。在70年代,每個稱得上叫操作系統名字的系統都包括命令行、匯編器、編譯器、解釋器、調試器、文本編輯器、郵件服務,還有很多。ITS有、Multics有、VMS有、Unix也有這些。GNU系統也應該有。

我后來聽到Hillel曾經說過(1):

我不為我,誰會為我?
我只為我,我又是誰?
若非現在,更待何時?

決定開始GNU項目正是基于同樣的情懷。

(1)作為一個無神論者,我并不追捧任何宗教領袖,但是我有時會欽佩他們的一些警句。

Free是freedom所指的自由

“自由軟件(free software)”這一術語時常被誤解—它無關價格,它關乎自由。這里,我們給出自由軟件的定義。

一個軟件對作為用戶的你是自由軟件,如果:

由于“free”指的是自由,而不是價格,所以自由軟件和銷售其拷貝并無矛盾。事實上,銷售拷貝的自由非常關鍵:使用CD-ROM的方式收集和銷售自由軟件對社區很重要,它是為開發自由軟件募集資金的一個重要手段。因此,如果一個軟件不能自由地以這種方式收集和銷售,那么它就不是自由軟件。

因為“free”帶有歧義,人們長久以來一直在找替換它的詞,但是沒有找到更好的。英語比其他語言有更多的詞匯和更微妙的詞義差別,但是它沒有一個簡單、清晰的詞來表達freedom一詞中的“自由”—“unfettered”是意思上最接近的一個詞。象“liberated”、“freedom”和“open”這些詞或者意思不對,或者有其他不足。

GNU軟件和GNU系統

開發整個系統是一個非常大的工程。要達成目標,我決定盡可能改造和利用現有的自由軟件。比如,我一開始就決定使用TeX作為主要的文本排版工具;幾年后,我又決定使用X Window系統而不是另外再為GNU編寫一個窗口管理系統。

由于這些決定,以及類似的其他決定,GNU系統和全部GNU軟件集合并不相同。GNU系統包含一些非GNU的程序,這些程序來自其他人和為其他目的的項目,但是因為它們是自由軟件,所以我們就可以使用。

工程啟動

1984年元月,我從MIT離職并開始編寫GNU軟件。離開MIT是必須的,這樣MIT就不會干擾GNU以自由軟件的形式發布。如果我還是MIT的員工,MIT就可能聲稱是這些軟件的擁有者,進而可能加入他們自己的發布條款,甚至還會把它們變成專有軟件。我決不會花了大力氣而看到結果對最初的目的毫無用處:我們是要創建新的共享軟件社區。

而當時MIT人工智能實驗室的領導,Winston教授,還是友好地邀請我繼續使用實驗室的設施。

最初的幾步

GNU工程開始不久,我聽說了自由大學編譯器工具包,又叫VUCK。(荷蘭語的“自由”一詞以v開頭。)這是一個為處理多種語言而設計的編譯器,它可以處理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,這就提出了如何發布GNU Emacs的問題。當然,我把它放在我用的MIT電腦的匿名ftp服務器上。(該電腦,prep.ai.mit.edu,因此變成了主要的GNU ftp發布站點;當它幾年后退役時,我們把它的名字轉到了新的ftp服務器上。)但是,在那個時候,許多對GNU Emacs感興趣的人并沒有上網,因而無法通過ftp獲得軟件拷貝。問題是,我應該對他們說什么?

我可能說,“找一個聯網并愿意給你一份拷貝的朋友。”或者我會按照對原始PDP-10上的Emacs的做法來做:告訴他們,“郵寄一個磁帶和一個SASE給我,我會用它們把Emacs郵寄回去。”但是我并無工作,而且我當時正在尋找用自由軟件賺錢的方法。所以我聲明,需要的人只要付150美元,我就會把帶有Emacs的磁帶郵寄過去。這樣,我就創立了一個發布自由軟件的行業,它是今天這些發布完整GNU/Linux系統的公司的先驅。

程序對每個用戶都自由嗎?

如果一個程序離開了其作者、成了自由軟件,并不必然意味著對每個擁有該程序拷貝的用戶,它都是自由軟件。例如,公有領域軟件(沒有版權的軟件)是自由軟件;但是任何人都能用它制作一個修改版的專有軟件。同樣地,許多自由軟件有版權但是使用簡單的許可證發布,這些許可證允許制作修改版的專有軟件。

X Window系統就是這個問題的一個范例。它由MIT開發,并使用隨意許可證發布為自由軟件。隨后,許多公司改寫了X Window系統,并把它以二進制形式添加到其專有的Unix系統中,而且用同樣的保密協議加以?;?。這些X Window系統的拷貝就和Unix一樣不再是自由軟件了。

X Window系統的開發者認為這不是問題—他們知道并愿意這樣的事發生。他們的目的不是自由,只是“成功”,就是“擁有很多用戶。”他們不關心這些用戶是否擁有自由,只希望用戶數目龐大。

這導致一個矛盾的情形:當回答“這個程序是否是自由軟件?”的問題時,兩種不同的計算自由的方法會給出不同的答案。如果你用MIT的發布許可證來判斷時,你會說X系統是自由軟件。但是,如果你測量使用X系統的用戶獲得的自由平均數時,你會說它是專有軟件。因為大多數X系統的用戶使用的是其Unix系統帶的專有版本,而非自由軟件版本。

Copyleft和GNU GPL

GNU的宗旨是給用戶自由,而不只是變得流行。所以我們需要使用禁止讓GNU軟件變成專屬軟件的發布條款。我們所用的方法叫做“copyleft”。(1)

Copyleft利用版權法律,但是將其反轉以服務于與其對立的目的:不是限制一個程序,而是要使之保持自由。

Copyleft的中心思想在于賦予任何人運行程序、復制程序、修改程序和發布修改其版本的許可—但是不允許添加他們自己的限制。因此,每個擁有軟件拷貝的人都保有定義著“自由軟件”的關鍵自由;這些權利變得不可剝奪。

作為一個有效的copyleft,軟件的修改版也必須是自由的。這就保障了在我們的基礎上所作的工作,如果發布,就變得社區共享。有工作的程序員如果自愿改善GNU軟件,那么copyleft就會禁止她的雇主說:“你不能分享這些更改,因為它們將被用于發布我們的專有版本。”

如果我們要保障所有用戶的自由,那么要求對程序的更改也必須是自由的是個基本條件。那些將X Window私有化的公司通常就是對X Window做了些改動以移植到他們的系統和硬件上。相對于X系統來說,這些改動是小的,但不算微不足道。如果更改是剝奪用戶自由的借口的話,任何人都可以輕易借此占便宜。

還有就是合并自由軟件和非自由軟件的問題。這樣的合并本來注定是非自由的;非自由部分缺失自由會導致整體也缺失自由。允許這樣的合并會使自由的大堤毀于蟻穴。所以,copyleft的一個關鍵要求就是堵住這個漏洞:任何加入或合并到copyleft程序的結果必須是合并后的大程序也是自由和copyleft的。

大多數GNU軟件采用的copyleft的具體實現是GNU通用公共許可證,簡稱GNU GPL。我們也有針對其他特別情況的其他copyleft實現。GNU手冊也是copyleft的,不過手冊不必用象GNU GPL這樣復雜的許可證,所以它們用的是較簡單的copyleft。(2)

(1)在大約1984或1985年,Don Hopkins(一個極具想象力的家伙)給我寫了封信。他在信封上寫了一些逗趣的話,其中一句說:“Copyleft—保留所有權利。”我采用了“copyleft”來給我當時在開發的發布概念命名。

(2)我們目前使用GNU Free Documentation License來授權文檔。

自由軟件基金會

當人們使用Emacs的興趣起來后,其他人開始加入GNU工程。我們決定再次尋求資金。所以在1985年,我們創立了自由軟件基金會 (FSF),它是一個為開發自由軟件而成立的免稅慈善機構。FSF還承擔了發布Emacs磁帶的業務;該項業務后來擴展到在磁帶中加入其他自由軟件(GNU或非GNU),以及銷售自由文檔。

過去,FSF的收入來自銷售自由軟件的拷貝以及其他相關服務(含源代碼的CD-ROM、含二進制文件的CD-ROM、印制精美的手冊,這些都可以自由修改和再發布),還有就是銷售豪華發布版(為客戶選定的平臺制作全套自由軟件)。如今,FSF仍然銷售手冊和其他裝備,但它的很大一部分資金來自會員費。你可以通過fsf.org加入FSF。

自由軟件基金會的員工編寫并維護著一些GNU軟件包。其中有兩個重要的軟件包是C庫和shell。GNU C庫是每個運行在GNU/Linux系統上的程序和Linux通信要用到的。它由自由軟件基金會的員工開發,包括Roland McGrath。大多數GNU/Linux系統使用的shell是BASH,Bourne Again Shell(1),它是由FSF的員工Brian Fox開發的。

我們資助這些程序的開發是因為GNU工程不僅有工具或開發環境,我們的目標是完整的操作系統,而這些程序是完成目標需要的。

(1) “Bourne Again Shell”是對“Bourne Shell”這一名稱表達敬意,后者是Unix系統上常用的shell。

自由軟件技術支持

自由軟件的哲學拒絕一類特定的廣為人知的商業實踐,但是它并不反對商業。當商業尊重用戶的自由時,我們希望它們能夠成功。

銷售Emacs的拷貝就展示了一種這樣的自由軟件商業模式。當FSF接手了該業務,我就需要找另一種謀生的手段。我發現我可以銷售針對我開發的自由軟件的技術服務。這包括教授,比如如何針對GNU Emacs編程和如何定制GCC;還包括軟件開發,多數情況是將GCC移植到新的平臺。

現如今,不少公司都在進行諸如此類的自由軟件商業實踐。它們有的發行自由軟件CD-ROM,有的做各類技術支持,從回答用戶問題到修復缺陷,以至添加新功能。我們甚至開始看到開發新自由軟件產品的自由軟件公司。

不過,請注意—有些公司號稱自己“開源”,實際從事和自由軟件相關的非自由軟件的業務。它們不是自由軟件公司,它們是專有軟件公司。它們的產品誘使用戶遠離自由。它們號稱其軟件是“增加價值的軟件包”,并希望我們接納其價值:讓好用超過自由。如果我們更珍視自由,我們就應該把這些軟件叫做“消減自由的軟件包”。

技術目標

GNU的首要目標是做自由軟件。即使GNU技術上并不比Unix高明,它也有社區的優勢——允許用戶合作,它還有道德上的優勢——尊重用戶的自由。

但是,在工作中采用好的經驗和標準是自然的—比如,動態分配數據結構可以避免固定的內存使用,只要合理就盡可能地采用8比特編碼。

另外,我們擯棄了Unix的小內存思路,決定不支持16位的計算機(很清楚,當GNU系統完成時,32位的計算機應該是標準設備),而且沒有必要在內存使用未超過1兆字節時就減少內存用量。對于不常使用非常大的文件的程序,我們鼓勵程序員把輸入文件全讀入內存,然后再處理其內容而不再操心輸入輸出(I/O)。

這些決定使許多GNU程序在可靠性和速度上都超過了其Unix對手。

捐贈電腦

隨著GNU工程的聲譽高漲,人們開始捐贈一些運行Unix的電腦給GNU工程。這很有用,因為開發GNU部件最簡單的方法就是在Unix的機器上開發,然后一個一個在該機器上把該部件用GNU部件代替。但是這里有一個道德的問題:我們是否可以有一份Unix拷貝。

Unix是專有軟件,而GNU工程的哲學說我們不應該使用專有軟件。但是,使用和“用武力自衛是合法的”一致的推理,我認定使用專有軟件開發自由軟件是合法的:當這樣做對開發專有軟件的自由替代是關鍵的時候,因為這樣才能幫助人們擺脫專有軟件。

但是,即使有爭議的做惡,還是一種做惡。今天,我們不再有任何Unix拷貝,因為我們已經用自由的操作系統代替了它們。如果我們不能用自由軟件替換掉機器里的操作系統,我們就把機器替換掉。

GNU任務列表

隨著GNU工程的前進,越來越多的系統組件被開發或被發掘出來。最后,我們發現制作一個組件缺失列表會很有用處。我們利用該列表來雇傭開發人員編寫缺失的軟件。這就是GNU任務列表。除了缺失的Unix部件,我們還列出了其他一些有用的軟件和文檔項目,我們認為它們是一個完整的系統所必須的。

今天(1),GNU任務列表上已經沒什么Unix部件了—這部分工作已經完成,除了一些不重要的組件。但是,有人會稱這個列表上的項目是“應用軟件”。它們是對一部分用戶有吸引力的操作系統之上的軟件。

即使游戲也在任務列表上—從一開始就在。Unix帶有游戲,所以GNU自然也應該有。但游戲不必是兼容的,所以我們的游戲和Unix的游戲并不相同。相反,我們列出了一些用戶可能喜歡的不同種類的游戲。

(1)當時是1998年。在2009年我們不再維護很長的任務列表。社區開發自由軟件的速度是如此之快,我們甚至無法全部跟蹤。所以,我們使用了高優先級項目列表,一個非常短的項目列表;我們真的鼓勵用戶來編寫這些軟件。

GNU軟件庫GPL

GNU C庫使用一種特別的copyleft,它叫做GNU庫通用公共許可證(1),它允許使用該庫連接專有軟件。為什么有這樣一個例外?

這不是原則的問題;沒有原則說專有軟件有權包含我們的代碼。(我們為什么要為注定會拒絕和我們分享代碼的項目做貢獻?)C庫或其他任何庫使用LGPL許可證是戰略問題。

C庫完成的是普遍性的任務;每個專有系統或編譯器都有自己的C庫。所以,我們的C庫只供自由軟件使用并不會給自由軟件更多的優勢—它可能只會讓大家避免使用我們的庫。

有一個系統是例外:在GNU系統上(包括GNU/Linux),GNU C庫是唯一的C庫。所以GNU C庫的發布條款決定著是否可以在GNU系統上編譯專有軟件。道德上沒有理由在GNU系統上允許專有軟件,但是戰略上不允許專有軟件可能更加不利于自由軟件的發展。這就是為什么C庫使用LGPL是一個好的戰略。

對于其他庫,戰略決定需要具體情況具體分析。如果一個庫是幫助特定的程序完成特定的任務,那么它以GPL發布,只能用于自由軟件。這樣會幫助自由軟件開發者有超越專有軟件的優勢。

以GNU Readline為例,它是為編輯BASH命令行而開發的庫。它以常規的GNU GPL,而不是以LGPL發布。這樣可能減少了Readline的使用量,但這不是我們的損失。同時,至少能夠使用Readline使自由軟件變得特別,從而使社區獲得優勢。

專有軟件開發者有金錢帶來的優勢;自由軟件開發者需要互相幫助的優勢。我希望有一天我們擁有大量的GPL的庫而專有軟件沒有,這些庫是開發新的自由軟件的材料,它們加在一起構成了進一步開發自由軟件的主要優勢。

(1)該許可證現在叫做GNU寬通用公共許可證,以避免大家誤以為全部庫都可以使用該許可證。參看為什么你的下一個庫不應該使用LGPL許可證來了解更多信息。

解決痛點?2

Eric Raymond說“每個軟件杰作都開始于開發者解決個人的一個痛點。”這個也許時有發生,但是許多GNU軟件是為了完成自由的操作系統而開發的。它們來自于遠見和計劃,而不是沖動。

比如,我們開發GNU C庫因為類Unix的系統需要一個C庫,我們開發BASH因為類Unix的系統需要一個shell,我們開發GNU tar因為類Unix的系統需要一個tar程序。我自己的程序—GNU C編譯器、GNU Emacs、GDB和GNU Make也是一樣。

有些GNU程序的開發是為了對付威脅我們自由的某些特殊敵人。為此,我們開發了gzip來代替Compress程序,該程序由于LZW專利而離開自由社區。我們找人開發LessTif,最近又開始開發GNOME和Harmony,用來解決由于某些專利庫(見下)帶來的問題。我們還在開發GNU Privacy Guard來代替非自由的加密軟件,因為用戶不應該在自由和隱私之間做選擇。

當然,編程的人對這些工作很感興趣,并且許多人因為自己需要和興趣添加了許多功能。但那不是這些程序存在的理由。

未預見的開發

在GNU工程開始時,我想象的是我們可以開發好完整的GNU系統,然后再發布。事實不是那樣發展的。

由于每個GNU部件都是在Unix系統上實現的,所以各個部件在GNU整體完成之前早就在Unix系統上運行了。其中一些程序大家都很喜歡,而且有用戶開始擴展和移植它們—到各種不兼容的Unix版本以及其他一些系統。

這個過程使得這些程序更強大,并且為GNU工程吸引了資金和貢獻者??墑?,它也使完成最小系統的工作延緩了數年,因為GNU開發者的精力都放在維護這些組件的移植和新功能上,而無暇顧及開發那些缺失的組件。

GNU Hurd

1990年時,GNU系統基本上完成了;主要部件只缺少內核。我們早已決定我們的內核是運行在Mach上的服務進程集合。Mach是卡內基梅隆大學和猶他大學先后開發的微內核;GNU Hurd(即GNU駕馭者)是運行在Mach之上的服務程序集合,它們完成Unix內核做的那些工作。因為等待Mach依照保證以自由軟件發布,我們的開發工作延遲開始。

選擇該設計的一個原因是避免看起來是最困難的那部分工作:在沒有源代碼的級別的調試器上調試內核程序。該工作已經在Mach上完成了,我們期待的是用GDB以調試用戶程序的模式調試Hurd的服務進程。但是這個花了很長的時間才實現,互相發送消息的多線程服務程序的調試實際上非常難。使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”,因為那樣就把我們的工作歸功于他人了。請給予我們平等的宣傳。

未來的挑戰

我們已經證明我們有能力開發很多自由軟件。這并不是說我們不可戰勝、不可阻擋。有些挑戰會使自由軟件的未來變得不確定;面對挑戰需要毫不動搖的努力和忍耐力,有時需要長年累月。它需要人們珍重自由時所表現的那種決心,自由絕不能旁落。

以下四節討論這些挑戰。

保密的硬件

硬件制造商越來越傾向于保守硬件規格的秘密。這使為Linux和XFree86編寫支持新硬件的自由驅動軟件變得困難起來。今天我們有了完整的自由軟件系統,但是如果不能支持未來的計算機,我們明天就會失去這個自由軟件系統。

有兩種方法對付這個問題。程序員可以通過逆向工程了解這些硬件的工作原理。其他人可以選擇使用那些被自由軟件支持的硬件;隨著我們的人數增長,保守硬件規格的秘密就變成是固步自封。

逆向工程是一個艱巨的任務;我們的程序員是否有足夠的決心擔起重任?是的—如果我們強烈地感覺到自由是一個原則問題,而非自由的驅動軟件是無法容忍的?;嵊瀉芏噯嗽敢饣ǘ鍆獾那?、甚至花一點額外的時間讓我們用上自由的驅動軟件嗎?是的,如果我們想要自由軟件的決心廣泛傳播。

(2008年注:此問題還擴展到BIOS程序。這里有一個自由的BIOS軟件,LibreBoot(coreboot的一個發行版);問題在于獲得計算機的規格以便LibreBoot能夠不使用非自由的“blobs”軟件包也能夠支持這些計算機。)

非自由軟件庫

運行在自由操作系統里的非自由軟件庫是自由軟件開發者的一個陷阱。這些軟件庫看上去很美的功能是誘餌;如果你使用了該軟件庫,你就落入了陷阱,因為你的程序不能再作為自由軟件的部件來使用。(嚴格來說,我們可以包含你的程序,但是它沒有了非自由軟件庫將無法運行。)更糟糕的是,如果使用專有軟件庫的程序變得流行起來,它就會誘惑其他未起疑心的程序員落入同樣的陷阱。

第一個這樣的例子是80年代的Motif工具包。雖然那時還沒有自由的操作系統,但是很明顯Motif將會導致什么樣的問題。GNU工程做出了兩個回應:一方面請求個別自由軟件項目支持Motif工具包的同時也支持自由的X工具包,另一方面請求黑客編寫替代Motif的工具包。該工作持續了許多年;直到1997年,由匈牙利程序員開發的LessTif,才變得足夠強大來代替Motif的大部分功能。

從1996年到1998年,另一個非自由GUI工具包,叫做Qt,被一個實際上是自由軟件的集合,KDE桌面所使用。

自由的GNU/Linux系統當時無法使用KDE,因為我們不能使用那個工具包。然而,一些商業的GNU/Linux發行商沒有堅持自由軟件的理念,將KDE添加到他們的系統—生產了有更多功能、但更少自由的系統。KDE團隊積極鼓勵更多的程序員使用Qt軟件庫,數百萬的新“Linux用戶”從來沒有被告知這里有問題。情況變得嚴峻。

自由軟件社區對此做出了兩個回應:GNOME和Harmony。

GNOME(GNU Network Object Model Environment,GNU網絡對象建?;肪常┦荊NU的桌面項目。它在1997年由Miguel de Icaza開始,并由Red Hat Software支持開發,GNOME致力于提供相似的桌面支持,但完全使用自由軟件。它在技術上也要領先,比如支持多種編程語言,而不是只支持C++。但是主要的目的還是自由:不必依賴任何非自由軟件。

Harmony是一個兼容性替代庫,其設計用來運行KDE軟件而無需使用Qt。

在1998年11月,Qt的開發者宣布更改授權協議,新協議實際上要使Qt變成自由軟件。雖然無法核實,不過我還是認為這一舉動有一部分是由于我們社區對Qt作為非自由軟件的有力回應。(新的授權協議不方便也不對等,所以最好還是避免使用Qt。)

[后續注:在2000年9月,Qt按照GNU GPL發布,這就從根本上解決了這個問題。]

我們會如何回應下一個非自由軟件庫的誘惑?整個自由社區是否都會理解我們應該躲開陷阱?抑或有人會為了好用而放棄自由,從而制造大麻煩?我們的未來要靠我們的哲學。

軟件專利

我們面臨的最惡劣的威脅是軟件專利,它可以用算法和功能點限制自由軟件最長達20年。LZW壓縮算法于1983年啟用專利,我們至今不能發布可以生成適當壓縮的GIF圖片的自由軟件。[在2009年,這些專利過期。]在1998年,由于受到專利的威脅,一個生成MP3格式的音頻壓縮自由軟件從發行版中被移除了。[在2017年,這些專利過期??純次頤塹攘碩喑な奔?。]

我們有些方法來對付專利:我們可以尋找專利是無效的證據,我們還可以尋找其他的方法替代專利限制的方法。但是這些方法不總是有效;當上述兩種方法都失敗時,專利可能迫使自由軟件無法具備用戶需要的某些功能。經過長時間的等待,專利會過期(MP3專利應該在2018年過期),但是在此之前我們怎么辦?

因為自由的原因而珍視自由軟件的人們總是會和自由軟件保持一致。我們會設法在沒有這些功能的情況下完成工作。但是還有那些因為期待自由軟件功能優越而喜歡自由軟件的人,他們可能在看到專利的限制后會覺得自由軟件是個失敗。因此,當我們談論“集市(bazaar)”開發模式的實際有效性的時候,在我們談論自由軟件的可靠性和強大功能的時候,我們不要停留在這些話題上。我們必須要談論自由和原則。

自由文檔

自由軟件操作系統的最大不足不是軟件—而是缺少優秀的自由文檔。文檔是軟件包的基本組成部分;一個重要的自由軟件包沒有相應的優質自由文檔,就是差距。這樣的差距我們目前有很多。

自由文檔,和自由軟件一樣,關乎自由,而不是價格。自由文檔的標準和自由軟件大同小異:它給予所有用戶自由。文檔必須能夠重新發布(包括商業銷售),無論是在線還是紙質,這樣每個軟件拷貝就都能帶有文檔。

文檔允許修改也很關鍵。作為一般性規則,我不認為有必要允許人們修改所有種類的文章和書籍。比如,我不認為你或我應該被允許修改本文,本文描述的是我們的行動和看法。

但是擁有修改自由軟件文檔的自由是關鍵的,是有特別的原因的。當人們實踐修改軟件的權利—添加或改變軟件的功能時,如果他們是盡責的,他們還會修改文檔—這樣他們就會為修改后的軟件提供準確和可用的文檔。非自由的文檔不允許程序員盡責并完成文檔工作,不符合我們社區的需要。

關于如何修改文檔的某些限制不是問題。比如,要求保留原作者的版權聲明、發布規則或作者列表,是合適的。要求修改版包含修改聲明也沒問題。如果不是技術話題,即使要求整個聲明不被刪除或修改也沒問題。這些限制不是問題因為它們沒有阻止盡責的程序員修改文檔以適應軟件的修改?;瘓浠八?,它們沒有阻止自由軟件社區使用整個文檔。

然而,必須要允許修改文檔的所有技術內容,并允許從所有常規渠道以所有常規媒體發布;否則,就限制了社區,文檔就不是自由的,我們就會需要另一個文檔。

自由軟件的開發者有沒有覺悟和決心來寫出全方位的自由文檔?我們的未來又一次依賴于我們的哲學。

我們必須論及自由

估計當今有一千萬GNU/Linux用戶,他們使用諸如Debian GNU/Linux和Red Hat“ Linux”系統。自由軟件已經發展得如此優越,以至于用戶僅僅因為其實用性就蜂擁而至。

好的效果是顯而易見的:更多開發自由軟件的興趣、更多自由軟件行業的客戶和對開發商用自由軟件而不是專有軟件的公司的更有力的鼓舞。

但是對軟件興趣的高漲超過了對其哲學基礎的認知,這會導致麻煩。我們面對上述挑戰和威脅的能力依賴于我們堅定地站在自由這一邊。要使社區有同樣的意志,我們需要向新加入社區的伙伴傳播我們的理念。

但是我們正在此處失敗:我們吸引新用戶的努力大大超過了教育他們成為合格社區公民的努力。我們要兩手都抓,也要兩手一樣硬。

“開源”

在1998年,教育新用戶自由的理念變得更加困難,當時部分社區成員決定使用“開源”代替“自由軟件”。

其中一些人的目的是避免“自由”和“免費”的混淆—這是個合理的目的。不過,另一些人,卻意在把激勵自由軟件運動和GNU工程的精髓拋在一邊,去迎合行政和商業用戶,其中很多人的理念是盈利超越自由、超越社區、超越原則。因此,“開源”一詞聚焦于制作高質量、強功能的軟件的能力,而回避自由、社區和原則的理念。

“Linux”雜志就是一個明確的例子—其中塞滿了工作在GNU/Linux系統之上的專有軟件的廣告。當再有Motif或Qt之類的軟件出現,這些雜志是該警告程序員遠離它們呢,還是會為它們打廣告呢?

商業的支持能夠在很多方面為社區做貢獻;其他條件合適時,這是有用的。但是通過少說自由和原則來獲取它們的支持是災難性的;這使前面提到的增加用戶和教育公民的不平衡變得更糟。

“自由軟件”和“開源”描述的是大致同一類軟件,但是它們表述的卻是這些軟件的不同層面和價值。GNU工程繼續使用“自由軟件”一詞,來表達自由而不只技術是重要的,這一理念。

嘗試!

猶大的名言(“不存在‘嘗試’”)聽來優雅,但是對我不適用。帶著是否能夠完成任務的焦慮、帶著完成目標是否已足夠的懷疑,我完成了大部分工作。無論如何,我嘗試了,因為在敵人和我的城池之間只有我自己。令我吃驚的是,我有時也能取勝。

我有時也失敗;一些城池淪陷了。然后我找到另一個面臨威脅的城池,并準備好另一場戰役。天長日久,我學會了發現威脅并置身于威脅和城池之間,呼喚其他黑客來加入我的陣營。

現如今,我通常不再是一個人??吹醬罅康暮誑屯謖膠?、守陣線的感覺是輕松和快樂。我意識到城池—眼下安全了。但是危險與年俱增,目前Microsoft明確把矛頭指向我們的社區。我們不能視自由的未來為理所當然。不能認為自由是理所當然!如果要保持自由,你必須準備好捍衛自由。

譯注

  1. 這里的意思是起名字時,在新名字里包含舊名字以體現對舊名字的敬意。
  2. 原文是Scratching an itch?:意思是瘙到癢處。這里指解決一個鬧心的問題,故譯為解決痛點。
最頂

[FSF 標志]“自由軟件基金會(FSF)是一個非盈利組織。我們的使命是在全球范圍內促進計算機用戶的自由。我們捍衛所有軟件用戶的權利。”

加入 購物