最初的軟件共享羣體

1971年,當我開始在麻省理工學院人工智能(AI)實驗室工作時,我成了那裏的軟件共享羣體的一分子,這個軟件共享羣體已經存在多年。其實,軟件的共享並不限於我們這一特定的羣體,它的歷史與計算機一樣長久,這兩者之間的關係就像人類很早就交換食譜與烹飪一樣。但我們做得比大多數人更多。

AI實驗室當時使用了一種稱爲ITS(Incompatible Timesharing System,非兼容分時系統)的分時操作系統,這是我們實驗室工作人員專爲Digital PDP-10(那個時代的大型計算機)設計的操作系統,而且是用彙編語言開發的。作爲這個羣體的成員,我是一個AI實驗室的系統黑客(System hacker),我的工作就是完善這一系統。

當時我們並不把我們的軟件稱爲“自由軟件”(free software),因爲這個詞語當時還不存在,但事實上那就是自由軟件。每當其他大學或者公司的人要求移植或者使用我們的某個程序時,我們總是應允的。如果你看到某人在使用一個陌生而且有趣的程序時,你總可以要求查看它的源代碼,以便可以讀代碼、對源代碼進行修改,或者套用原代碼的一部分來創作新程序。

羣體的崩潰

20世紀80年代初,Digital公司停止f對PDP-11系列的開發,那時情況發生了鉅變。以60年代的標準來看,PDP-11系列的體系結構是精巧和強大的,但無法自然地適應80年代的技術所允許的更大尋址空間。這意味着,幾乎我們所有的程序,包括lTS,都一下子報廢了。

在這前不久,AI實驗室的黑客羣體已經分崩離析。1981年,從實驗室分離出去了一個公司,名爲“Symbolics”,幾乎僱走了所有的黑客,剩下的羣體盛況難再。Steve Levy編寫過《黑客》一書,這本著作十分傳神地描述了這個羣體鼎盛時期的情況。當AI實驗室於1982年購置了一臺新的PDP-11機器時,系統管理員決定使用Digital的非自由分時系統,而不是ITS。

那個時代的流行計算機系統,如VAX和68020,都有自己的操作系統,但這些系統都不是自由軟件:即使爲了獲得機器可執行程序的拷貝,也應該簽署不公開協議(nondisclosure agreement)。

這就意味着,你開始使用計算機的第一步就是要保證不幫助你身邊的人。相互協作的羣體是被禁止的。專有軟件(proprietary software)所有者制訂的規則是:“與他人共享軟件就是盜版行爲;如果你需要對程序作任何修改,磕頭央求我們吧。”

專有軟件社會系統(即聲明用戶不能分享或修改軟件的系統)的觀念是反社會的、不道德的、完全錯誤的。這一觀點可能會讓一些讀者驚詫不已。但是,對於一個基於分裂公衆、使用戶孤立無援的價值系統,我們還能說些什麼呢?對這一觀點感到難以接受的讀者,可能早已對專有軟件熟視無睹,或者從專有軟件工業的角度出發才作出了這樣的判斷。這也難怪,因爲軟件出版商巳經長期爲此努力工作,以使人確信對於這一事情只能有一個觀察角度。

當軟件出版商談到“確保”他們的“權益”,或“禁止盜版行爲”時,他們實際上所說的東西是次要的。他們在版權聲明中真正傳遞的信息卻是他們認爲不言自明的假設,公衆似乎應該不加批判地接受之。現在讓我們來逐條地檢查這些假設。

假設之一,是軟件公司具備無可置疑的自然權力佔有軟件,從而有權凌駕於所有用戶之上。如果這確實是一種自然權力的話,那麼無論它對公衆有多大的傷害,我們都無法反對。有趣的是,美國的憲法和司法傳統拒絕這種看法:版權並非一種自然權力,而是一種人爲的、由政府強行實施的一種壟斷,以限制用戶拷貝的自然權力。

另一種沒有挑明的假設是,軟件的唯一重要意義在於軟件可以允許用戶做什麼——而我們計算機用戶不應該關心我們必須接受什麼樣的社會。

第三種假設是,如果不允許某個公司凌駕於其軟件產品的用戶之上,我們就不會有任何可用的軟件,或者永遠不會有所需要的軟件去完成這樣或那樣的特別任務。這個假設一度顯得頗有道理,但是後來的自由軟件運動表明,我們可以創造出足夠多的有用軟件,而無須加以一連串的限制。

如果我們拒絕接受上述假設,並將用戶置於優先的地位,從普通的、常識性的道德價值出發審視這些問題,我們就會得到截然不同的結論。計算機用戶應該可以自由地修改程序以適應他們自己的需求,可以自由地共享軟件,因爲幫助他人是社會存在的基礎。

這裏沒有足夠的篇幅容納得出這一結論的詳細邏輯推理,因此我推薦你閱讀我們的Web主頁,網址是http://www.gnu.org/philosophy/why-free.html。

艱難的道德選擇

雖然原來的羣體已經消失,但繼往開來並非不可能,只是我面臨一個道德選擇。

一條簡單的出路是加入專有軟件世界,簽署不公開協議,並許諾不再幫助我同事中的黑客。這樣做的結果很可能是我也開發軟件,而且軟件也以不公開協議的形式發佈,從而對其他不願意背叛同伴的人進一步施加壓力。

我有可能由此而發財,而且也從編寫代碼中獲得樂趣。但我明白,在我的職業生涯結束時,我回過頭來看到的景象將是這些年來築起高牆林立,並將人們分隔開來,我會覺得自己的一生努力的結果會把這個世界搞得更糟。

在此之前,我已有過接受不公開協議的經驗。當時,別人拒絕向MIT人工智能實驗室和我提供我們打印機的控制程序的源代碼。該程序缺乏某些功能,打印機使用起來極端麻煩。因此,我不能對自己說不公開協議是清白的。他拒絕與我們共享代碼,當時我非常憤怒。我不可能轉頭對其他每一個人都如法炮製同一做法。

另一種選擇,直截了當但令人不快,是離開計算機領域,如果那樣,我的技能就不會被檻用,但我的才能仍然會被浪費掉。我個人不會成爲分隔、限制計算機用戶的幫兇,但社會上的分隔和限制依舊在發生。

因此,我要尋求一種解決之道,使我作爲一個程序員能夠做些好事。我捫心自問,我是否能寫出一個或一些程序,能使我所珍視的羣體再生呢?

答案很清楚:最急需的首先是一個操作系統。這是開始使用計算機最至關重要的軟件——有了操作系統,可以做許多事情;沒有操作系統,你連計算機都使用不了。一個自由的操作系統,會使我們可以再度擁有一個相互合作的黑客羣體,而且進一步邀請其他任何人蔘與進來。每個人都可以安心使用計算機,而無須變成剝奪自己朋友權益的同謀。

作爲操作系統開發人員,我擁有的技能正適合這項工作。因此,儘管我不認爲成功唾手可得,但是我覺得這是我的天賦。我決定將系統設計得與UNIX兼容以便移植,同時也便於UNIX用戶移民到這一新的操作系統上來。我按照一項黑客的傳統選擇了GNU這個名字,GNU是“Gnu’s not UNIX”(GNU不是UNIX)的遞歸同義詞。

操作系統並不僅僅是一個只能運行其他程序的內核。在70年代,任何排得上號的操作系統都包括有命令解釋器、彙編器、編譯器、解釋器、調試器、文本編輯器和電子郵件軟件包等等。ITS包括這些東西,Multics有,VMS有,UNIX有,GNU操作系統也應該含有這些東西。很久之後我看到了以下的詩句,據傳來自Hillel:

如果我不爲自己打算,誰會爲我考慮?

如果我只爲自己打算,我又變成了什麼東西?

如果現在不動手,還要等到什麼時候?

啓動GNU工程的決定,正是基於同樣的精神。

Freedom中的自由

“free software”這種術語有時會被誤解——事實上它和價格毫無關係。它的涵義是自由。這是自由軟件的定義所決定的。對於你,某個特定的用戶來說,如果某個程序稱爲自由軟件,那麼:

  • 你擁有運行該程序的自由,而且可以用於任何目的。

  • 你擁有修改該程序以適應你個人需要的自由。(爲了在實踐中使這一自由成爲可能,你必須能夠獲得源代碼,因爲沒有源代碼而試圖修改程序是極端困難的。)

  • 你擁有再發行拷貝的自由,可以是無償的,也可以收費。

  • 你擁有發行該程序修改後版本的自由,從而使社團可以從你所作的改進中獲益。

因爲這裏“free”的涵義是自由而非價格,自由軟件和銷售拷貝之間並沒有矛盾。事實上,銷售拷貝的自由是至關重要的:把自由軟件收集到CD-ROM上出售對整個社團都很重要,而銷售它們又是爲開發自由軟件籌集資金的重要手段。因此,如果人們無法將某個程序自由地收集到這些集合中時,這個軟件就不是自由軟件。

由於“free”一詞具有歧義,人們長久以來都在尋找另外的詞來替代它,但直到現在還沒有找到其合適的替代詞。英語的單詞與單詞之間的細微差別比世界上其他的語言更多,然而它卻缺少一個簡單明瞭、沒有歧義的單詞表示自由(freedom)中的“free”。“unfettered”(除去鐐銬的)也許是詞意與之最接近的詞了。其他諸如“liberated”(被解放的)、“freedom”(自由的)和“open”(開放的)也被考慮過,但是這樣替代詞要麼語義不對,要麼就是存在其他缺陷。

GNU軟件與GNU系統

開發一個操作系統是一個非常龐大的工程。考慮到可行性,我決定只要有可能就採用和使用現成的自由軟件。例如,最初我就決定使用TeX作爲主要的文本格式化工具;幾年之後,我決定使用X Window系統,而不是另起爐竈爲GNU寫一個窗口系統。

由於這些決定,GNU系統不等價於所有GNU軟件的集合。GNU系統中包括非GNU軟件、由其他人或者其他開發項目出於各自目的而編寫的程序,但正因爲它們是自由軟件,所以我們可以使用。

工程之發軔

1984年1月,我辭去了在MIT的職務,開始專心致志編寫GNU軟件。離開MIT是必要的,這樣MIT就無法干涉我將GNU作爲自由軟件發行。如果我繼續在學校的工作,那麼MIT可以聲稱擁有我的工作成果,可以實施他們自己的軟件發行條件,甚至可以將它們變成專有軟件。我無意在付出大量的勞動後,最終只是看到結果對自己的初衷沒有幫助。我的初衷是:創造一個新的軟件共享羣體。

不過,當時MIT人工智能實驗室的領導,溫斯頓教授(Prof. Winston),卻友善地邀請我繼續使用實驗室的設備。

最初的步驟

啓動GNU工程之前不久,我聽說荷蘭自由大學有一種編譯器軟件包(又稱VUCK,荷蘭語中表示“自由”的詞以字母“V”開頭)。這是一個爲處理多種編程語言(包括C和Pascal)而設計的編譯器,並且支持多種目標機。我給它的創作者寫了一封信,詢問GNU工程是否可以使用它。

他的回信不無嘲弄,聲稱大學是自由的,但他的編譯器不是。因此我決定爲GNU開發的第一個程序是一個支持多語言、多平臺的編譯器。

我希明避免單槍匹馬地開發整個編譯器,我獲取了在勞倫斯·利福摩實驗室(Laurence Livermore Lab)開發的多平臺編譯器,即Pastel的源代碼。它支持Pascal,本身就是專爲系統編程而設計,而且是Pascal語言的一個擴展版本。我加上了一個C的前端(frontend),然後開始將它移植到摩托羅拉68000計算機上去。但我不得不放棄,因爲我後來發現該編譯器需要許多兆字節的棧空間,而當時的68000 UNIX系統只支持64K。

於是,我判定該Pascal編譯器的設計思想是將整個輸入文件處理成爲一個語法樹,將整個語法樹轉化爲一連串的“指令”,然後生成整個輸出文件,在全過程之中不會釋放任何內存。從那時起,我決心從頭開始編寫一個完整的編譯器。這個新編譯器現在的名字就是GCC,它完全沒有使用任何Pastel編譯器的代碼,但我設法用上了我原來編寫的C前端,不過這卻是幾年以後的事情了。我首先完成了GNU Emacs。

GNU Emacs

我開發GNU Emacs的工作始於1984年,1985年初GNU Emacs便可以開始使用了。這使我可以在UNIX機器上進行編輯工作。而在此之前,因爲沒有興趣使用vi或ed,我的文本編輯工作都是在其他系統上完成的。

這時,人們開始希望能使用GNU Emacs,這就引發瞭如何發行的問題。我將它放到了我所使用的MIT機器的匿名FTP服務器上(prep.ai.mit.edu這臺計算機從此成爲GNU FTP發行的主站點。幾年之後機器不敷使用時,我們將它的名字轉到新的FTP服務器上)。但在當時,許多有興趣使用GNU Emacs的人都不在因特網上,也就無法利用FTP以獲得Emacs的拷貝。那麼,我應該告訴他們什麼呢?

我可以說:“找一個能上網的朋友,他會幫助你獲得拷貝的。”或者按照我最初在PDP-10上發行Emacs的方式,對他們說:“寄給我一盤磁帶和一個郵資已附的回信信封。我會把Emacs寄回給你的。”但當時我沒有工作,正在尋找通過自由軟件掙錢的方能。因此我宣佈會爲所有希望得到它的人郵寄一份,定價是150美元。這樣。我開始了商業性自由軟件的發行業務。這也是當今衆多銷售完整的、基於Linux的GNU系統的公司之濫觴。

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

一個程序作爲自由軟件離開原作者之手後,並不一定意味着它對於每個擁有拷貝的人都是自由軟件。舉例來說,公用領域軟件(public domain software,沒有版權的軟件)是自由軟件,但任何人都可以將它稍作修改的版本變成專有軟件。同理,許多自由軟件雖然有版權聲明,但發行許可證過於簡單寬縱,以至有人可以將它修改成爲專有軟件。

這個問題的例證之一是X Window系統。X Window系統是在MIT開發出來的,它以一種比較寬容的許可證發佈之後。很快就被很多計算機廠商所採用。他們將二進制碼的X Window系統附加到各自專有的UNIX系統中,加上了與UNIX同樣的不公開協議。這些X Window系統的拷貝與UNIX一樣,它們並不是自由軟件。

X Window系統的開發者事先並不認爲這是一個問題——他們的意圖正是這樣,並且期望這樣的情況發生。他們的目的並非自由,而只是“成功”,即“擁有許多用戶”。他們不關心這些用戶是否擁有自由,而只要用戶數量衆多就可以了。

這導致了一個自相矛盾的情況:對“這個程序自由嗎?”這一問題,按照兩種不同的自由程度計算方法會得出不同的答案。如果你按照基於MIT發行版發行條件來進行判斷它所提供的自由,那麼可以認爲X Window系統是自由軟件;但如果考慮一般X Window系統用戶的自由,你不得不認爲它是專有軟件。絕大多數X Window系統用戶以前是在使用UNIX系統附帶的專有版本,而不是自由版本。

Copyleft與GNU GPL

GNU的目的是給用戶以自由,而不僅是爲了爭取大最用戶。因此我們必須使用某種發行條件,以避免將GNU軟件變成專有軟件。我們使用的方法稱爲“Copyleft”(版權所無)。

Copyleft利用了版權法,但反其道而行之,以達到與通常相反的目的:將一種將軟件私有化的手段轉變成了保持軟件自由的手段。

Copyleft的中心思想,是我們給予任何人運行、拷貝、修改以及發行改變後程序的許可,但不准許附加他們自己的限制。從而保障了每個人都有獲得“自由軟件”的軟件拷貝的自由,它們成爲了不可異化的權力。

要保證Copyleft的有效性,那麼修改後的版本必須也是自由的。這保障了在我們工作的基礎上所完成的成果一旦公佈後,也能爲我們的社團所用。當專業編程人員自願幫助改進GNU軟件時,“Copyleft”可以防止他們的僱主聲稱:“你不能和人共享這些改動,因爲我們會用它創建我們自己專有軟件的版本。”

所以爲確保程序對每位用戶都自由,那麼所作改動也必須保持自由這個前提是必不可少的。將X Window系統私有化的那些公司通常對程序做了某些修改,以便將X Window System移植到他們的系統和硬件上。這些改動與整個X Window系統的廣泛內容相比並不算大,但並非微不足道,如果這些修改可以作爲拒絕給用戶以自由的藉口,人們都會輕而易舉地利用這一藉口。

一個相關的問題涉及到將自由的程序與不自由的代碼相組合。這樣一個組合將不可避免地失去自由性;無論不自由的部分缺乏何種自由,都會使整個程序喪失自由。一旦允許這種漏洞存在,那麼所造成的損失可以大於再沉一艘“泰坦尼克”號。因此,“Copyleft”的一個關鍵要求是封堵這一漏洞:任何添加或者組合到自由軟件上的部分都不允許附加其他限制,從而保證其結果的整體是自由的、版權所無的(Copylefted)。

作爲Copyleft的一種特定實現形式,我們用“GNU公衆許可證”(GNU General Public License,簡稱GPL)來標明絕大多數GNU軟件的許可證。我們還有在特殊情況下使用的其他種類的“Copyleft”許可證。GNU的使用手冊也採取了Copyleft許可證,但使用的是一種大大簡化的方式,因爲手冊不需要GNU GPL那樣的複雜度。

自由軟件基金會(The Free Software Foundation)

隨着人們使用Emacs的興趣日益增加,其他人也開始參與GNU工程,我們覺得這是再次尋求資助的時機。所以我們在1985年創辦了“自由軟件基金會”(Free Software Foundation,FSF),這是一個完全致力於自由軟件開發的免稅福利機構。FSF同時也接管了Emacs磁帶發行業務,接着FSF在磁帶上增加了GNU的和其他非GNU的自由軟件,並出售自由軟件的使用手冊,FSF的業務得到了進一步的擴展。

FSF接受捐贈,但它的絕大多數收入來源於銷售自由軟件拷貝以及其他服務。今天它銷售的產品包含含有源代碼的光盤、可執行程序的光盤、印製精美的使用手冊(全都包括修改和再發行的自由)及其豪華版(我們爲客戶指定的平臺製作完整的軟件包)。

自由軟件基金會的僱員編寫了並維護着數量相當多的GNU軟件包。其中值得一提的兩種是C Library和l shell(命令解釋器)。任何運行於GNU/Linux系統之上的程序都用GNU C Library作爲與Linux內核通信的中介。它是由自由軟件基金會的一位工作人員Roland McGrath開發的。絕大多數GNU/Linux系統上使用的shell都是BASH(Bourne Again Shell),它由FSF僱員Brian Fox開發。

我們資助了這些程序的開發,因爲GNU工程的注意力並不只侷限於工具和開發環境。我們的目的是一個完整的操作系統,而這些程序是實現這一目的所必須的。

自由軟件的支持

自由軟件的哲學拒絕一種廣爲流傳的特定商業行爲,但它並非反對商業,如果商業機構尊重用戶的自由,那麼我們希望他們成功。

銷售Emacs的拷貝就展示了一種自由軟件的商業運作方式。當FSF接管了這項業務後,我需要另一種方法養家餬口。解決辦法是圍繞我原來開發的自由軟件來銷售服務。這包括教授如何使用GNU Emacs編程、如何定製GCC之類的課題,以及怎樣開發軟件(主要是將GCC移植到新的平臺上)。

今天,上述的每一種自由軟件業務模式都被一些公司採用。其中一些發行自由軟件的集合(收集在CD-ROM上),另一些銷售支持(技術服務),支持級別很廣泛,從回答用戶的問題到解決軟件中的bug,乃至增加重大的新特性。我們甚至開始看到市場上出現了發行自由軟件新產品的公司。

但要注意,一些將自己與“開源軟件”(Open Source)慨念相聯繫起來的公司,事實上是將他們的業務建築在與自由軟件一起工作的非自由軟件上。這不是自由軟件公司,而是專有軟件的公司,他們推出產品誘惑用戶遠離自由。他們美其名曰“增值”,這個名字也反映出了他們希望我們接受他們的價值觀:方便超越自由。如果我們相比之下更珍視自由的話,我們可以把他們的產品稱之爲“減少自由”的增值品。

技術目標

GNU的基本目標在於自由軟件。即使GNU在技術上對UNIX無優勢可言,它仍然具有社團意義上的優勢,允許用戶相互合作,還有道德意義上的優勢,尊重用戶的自由。

但使用廣爲接受的技術質量標準來評判我們的成果,那也是自然而然的。例如,動態地分配數據結構以避免任意固定尺寸限制,同時在任何有意義的場合下都正確處理所有可能的8位代碼。

在此之外,我們決定不支持16位的機器(當時已經清楚,GNU系統完成之時,32位的機器即將普及),不致力縮減內存使用量除非超過1兆字節。這就否定了當時UNIX對小內存的關注,當處理大文件並非關鍵問題時,我們鼓勵程序員將整個輸入文件讀入內存,然後遍歷它的內容而不用去顧及輸入/輸出。

這些決定使許多GNU程序同時在可靠性和速度上都超越了它們的UNIX競爭對手。

捐贈的計算機

隨着GNU工程的聲譽日益增長,人們開始向工程捐贈運行UNIX的機器。它們非常有用,因爲開發GNU元件最簡便的方式莫過於先在UNIX系統上編程,然後將系統的元件逐一替換。但它們也引發了一個倫理方面的問題:我們擁有一個UNIX拷貝是否正確。

UNIX過去是,現在也是專有軟件。GNU工程的哲學認爲我們不應該使用專有軟件。然而,與在正當防衛中使用暴力相似,我按照這一推理得出了一個結論:我確信,在爲開發自由軟件去替代專有軟件,和幫助他人停止使用專有軟件時,如果需要使用專有軟件的確是問題的關鍵的話,那麼使用專有軟件是合乎情理的。

但是,即使這樣做是有理的罪惡,它畢竟仍然是一種罪惡。今天我們不再擁有任何版本的UNIX,因爲我們已經使用了自由的操作系統替代了它們。如果我們不能使用自由的操作系統去替代機器上的操作系統,那麼我們會替換機器本身。

GNU任務清單

隨着GNU工程的進展,越來越多的系統元件被發現或者被開發出來。最後,列出一個剩下課題的清單對我們來說有了意義。我們使用這份任務清單招集開發者以編寫剩餘所欠缺的部分。這一清單以GNU任務清單命名。除了尚缺的UNIX組成部分,我們還包括了各種各樣的、我們認爲一個真正完整的系統應該具備的其他有用軟件以及文檔項目。

時至今日,幾乎沒布任何UNIX的成分還選留在GNU任務清單之中——那些工作已經完成,某些不重要的除外。但情單現在充滿了可以稱爲“應用程序”的項目。任何程序,只要它的適用不僅限於很小一部分用戶,都可以成爲操作系統的有用組成部分。甚至遊戲程序也包括在任務清單之內——從工程一開始就這樣。UNIX包括了遊戲程序,GNU自然也該這樣。但遊戲沒有兼在性問題,因此我們無須原樣照搬UNIX的遊戲。相反,我們列舉了用戶有可能會喜歡的各種類型的遊戲。

GNU Library GPL

GNU C Library使用了一種特殊的“Copyleft”方式,稱爲“GNU Library General Public License”(簡稱LGPL),允許專有軟件可以同Library鏈接,爲什麼要留這樣一個例外呢?

這並非一個原則問題,沒有任何原則允許專有軟件有權包括我們的代碼(何必要爲一個早已決心拒絕與我們共享的項目費力?)。對於C Library應用GPL,或者任何Library應用GPL,屬於策略問題。

C Library完成的是普遍性的工作,任何專有系統或者編譯器都伴隨着一個C Library,因此,限制我們的C Library只能爲自由軟件使用不會爲自由軟件帶來任何優勢——這隻能阻礙它被採用。

有一種系統例外:在GNU系統上(包括GNU/Linux),GNU C Library是唯一的C Library。因此,GNU C Library的發行條件決定是否有可能爲GNU系統編譯專有軟件,並沒有任何道義上的理由允許GNU系統上的專有應用程序存在,但從策略上看,不允許它們的存在更多地是阻礙GNU系統的使用,而不是鼓勵自由應用的發展。

這就是爲何C Library應用Library GPL是一個好策略的緣由。對於其他的Library,則必須視具體情況具體分析,再作策略性的決定。如果一個Library具有特定的功能,足以幫助我們編寫某種類型的程序,那麼以GPL將它發佈、並僅限於自由程序使用,則不失爲幫助其他自由軟件開發者的一種手段,可以給予他們某種優勢去與專有軟件競爭。

讓我們來看看GNU Readline,這是專爲BASH命令行編輯功能所開發的Library。Readline是在通常的GNU GPL下發布的,而不是Library GPL。這或許降低了Readline被使用的頻率,但對我們不構成損失。同時,至少有一個有用的應用程序,因爲要使用Readline,所以被特別地轉化成了自由軟件。這是自由軟件社團的一個真正勝利。

專有軟件開發人員具有資金上的優勢,而自由軟件開發人員則需要相互之間共享長處。我希望將來某天我們擁有大量的GPL涵蓋的Library,它們具有專有軟件無法媲美的優勢,能提供有用的模塊爲構建新的自由軟件添磚加瓦,併爲未來的自由軟件運動增添某種優勢。

給自己搔癢乎?

Eric Raymond說:“每一項好的軟件開發工作始於某個開發人員的搔癢”。這在某些場合下是真的,但是許多GNU軟件的基礎部分是爲了擁有一個完整的自由操作系統而開發的。它們來自一種觀點和計劃,而不是一時的衝動。

例如,我們之所以開發了GNU C Library是因爲一個類UNIX的操作系統需要一個C Library,我們開發了BASH是因爲類UNIX的操作系統需要一個外殼,我們開發了GNU tar是因爲一個類UNIX的操作系統需要一個tar程序。我之所以開發GNU C Compiler、GNU Emacs、GDB和GNU Make也是出於同樣的道理。

有些GNU程序是爲了應付對我們的自由的威脅而開發的,因此,我們開發了gzip以替代Compress(一種壓縮工具軟件),因爲Compress採用了LZW專利(一種算法),自由軟件社團不能使用它。我們找到了人開發Lesstif,而且最近又找到了人開發GNOME和Harmony,以對付專有Library的威脅(下面即將談到)。我們正在開發GNU Privacy Guard來替代流行的非自由的加密軟件。因爲用戶不應該被迫在隱私和自由之間作出選擇。

當然,編寫這些程序的人也開始對工作產生興趣、而且各種人按照他們自己的需求和興趣給程序增添了昨多特性。但是,這不是這些程序存在的原因。

始料未及的開發

在GNU項目開始時,我想象我們將先開發完整個GNU系統,然後再發布它。但後來所發生的情況不是這樣。

由於GNU系統的每一個元件都是在UNIX系統上實現的,每一個元件都可以在UNIX系統上運行,而且在完成GNU系統之前早就大名鼎鼎。其中的有些軟件變得非常流行,用戶開始對它們進行擴充並移植——移植到各種不兼容的UNIX版本上,有時是到其他平臺上。

這一進程使得這些程序功能更加強大,併爲GNU工程吸引了更多的基金和捐贈。但是它也許將一個最小的可以運行的系統的完成時間拖延了幾年,因爲GNU開發人員的時間花在了維護那些移植版本、或者爲已有元件的增添新的特性上,而沒有把精力花在編寫GNU系統上面尚未完成的那些元件上。

GNU HURD

到1990年時,GNU系統幾乎接近完成。主要所缺的東西就是一個內核。我們決定設計一組運行在Mach的基礎上的服務器來作爲我們的內核。Mach是在卡內基梅隆大學開發出來的微內核,後來在猶他大學得到了發展。GNU HURD是運行在Mach之上的一組服務器的集合(或者稱爲“herd of gnus”),這些服務器完成UNIX內核所完成的各種不同的任務。Mach曾經許諾它將作爲自由軟件發行,由於我們等待這一宣佈。因此開發GNU HURD的啓動時間被迫推遲了。

選擇該設計的原因之一,是希望避免看似最爲困難的工作:調試一個內核程序而沒有相應的源代碼級調試器。這部分工作在Mach中已經完成了,而我們期望用GNU調試器(GDB)調試作爲用戶程序的HURD服務器。但我們耗費了許多時間才使它成爲可能,而且相互之間發送信息的多線程服務器也是非常難以調試的。使HURD穩定運行這一工作已多花了幾年的時間。

Alix

GNU內核一開始並不準備叫做HURD。它最初的名稱叫做Alix——當時我所愛女人的名字。她,作爲一個UNIX系統管理員,曾經指出她的名字是如何吻合UNIX系統版本的命名規範;她對朋友說過這樣的玩笑話:“會有人用我的名字命名一個系統內核。”當時我沒有說什麼,但決心用一個名叫Alix的內核讓她大吃一驚。

這個名字並沒延續下來。Michael Buchneil,內核的主要開發者(現在是Thomas),更喜歡HURD這個名字,並把Alix重新定義爲內核的一個組成部分——通過向各HURD服務器發送信息而捕捉系統調用並進行處理的那部分。

最後,Alix和我分手了,她也改了姓名;同時與之無關的是HURD的設計也作了修改,C Library會向服務器直接發送信息,也就使Alix元件從設計中消失了。

但在這些事情發生前,她的一個朋友在HURD源代碼中看到了Alix,並且告訴了她。所以這個名字還是起過作用的。

Linux與GNU/Linux

GNU HURD還不能投入正式使用。幸運的是,有另一個內核可用。1991年,Linus Torvalds開發了一個與UNIX兼容的內核並稱之爲Linux。1992年左右,Linux與尚未大功告成的GNU系統融合成爲一個完整的自由操作系統(當然,兩者之間的結合本身就是一項非常艱鉅的工作)。有了Linux,我們今天有了一個真正的可以運行的GNU系統版本。

我們稱這個系統版本爲GNU/Linux,以表示它由GNU系統與作爲內核的Linux組合而成。

我們將來的挑戰

我們已經證實,我們自己有能力開發一整套的自由軟件。但這並不意味着我們就不可戰勝,或者勢不可遏,我們正面臨着幾個挑戰,它們使得自由軟件前途難卜;迎接這些挑戰需要持續不懈的努力和耐力,也許會要以年來計算。這要求人們表現出在珍視自由而不讓任何人奪走它時的那種決心。

下面四個小節討論這些挑戰。

祕而不宣的硬件

硬件生產商日益趨向將硬件規格說明祕而不宣。這給編寫自由的驅動程序以讓Linux與XFree86支持新硬件帶來了困難。今天我們擁有完整的自由系統,但如果我們不能支持明天的計算機,我們明天就會失去它。

有兩種方式來對付這一問題。一是程序員可以通過反向工程搞清楚如何支持硬件。另外。我們其他的人可以選擇使用那些自由軟件所支持的硬件,當我們的人數增加時,保密的規格說明書就會不攻自破。

實施反向工程是一項繁重的工作,我們是否有程序員具有足夠的決心去承擔它呢?會有的——如果我們能夠建立這樣一種強烈的感性認識,即自由軟件是一個原則問題,而非自由的驅動程序是不可容忍的。另外,我們大家會花費額外的金錢,甚或是一點額外的時間以使用自由的驅動程序嗎?會的,如果堅持自由的決心被廣泛接受的話。

非自由的Library

在自由的操作系統上運行的非自由的Library是針對自由軟件開發人員的一個陷阱。這些Library吸引人的功能是誘餌;如果你使用了這些Library,你就掉進了陷阱,因爲你的程序便不能成爲自由操作系統的一個有用組成部分(嚴格地說,我們可以收集你的程序,但它離開了Library而無能繼續“運行”)。甚至更糟的是,如果一個使用專有Library的程序流行起來的話,它會引誘其他不存疑心的程序員自投羅網。

這個問題的第一個例證是80年代的Motif工具包。儘管當時尚沒有自由的操作系統,但情況已經很清楚,Motif日後會給它們帶來問題。GNU工程的迴應有兩種方式:其一是請求各個自由軟件項目同時支持Motif和自由的X toolkit widget(X工具包窗口組件);其二是請求人們編寫一個自由的Motif替代品。這個工作花費了許多年。Lesstif由“飢餓的程序員小組”(the Hungry Programmers)開發,直到1997年才強大到足以支持絕大多數Motif應用程序。

大約是在相同的時間,另一個非自由的GUI工具包Library開始流行起來。這就是Troll Technologies公司的Qt。最後,Qt被用於一系列重要的自由軟件,KDE桌面系統。

自由的GNU/Linux系統無法使用KDE,因爲我們無法使用其Library。然而,某些不那麼遵從自由軟件原則的GNU/Linux商業發行商將KDE添加到了他們的系統中——結果得到了一個功能增強但自由減少的系統。KDE開發小組正積極地鼓勵更多的程序員使用Qt,而數以百萬計的新“Linux用戶”從未有機會得到提醒,從而認識這樣做是有問題的。情況相當嚴峻。

自由軟件社團以兩種解決方法作出了反應:GNOME與Harmony。

GNOME,即“GNU網絡化對象模式環境”,是GNU的桌面環境項目,在1997年由Mignel de Icaza發起,在Red Hat(紅帽子軟件公司)的支持下開展。GNOME的目標是用完全的自由軟件實現與KDE相近的功能。它也有技術上的優勢,例如支持一組不同的語言,而不僅僅是C++。但它的主要目的在於自由:不再需要使用任何非自由軟件。

Harmony是一個與KDE兼容的Library,使得不用Qt就運行KDE軟件成爲可能。

在1998年11月,Qt的開發者宣佈更改許可證協議,一旦實施,將使Qt成爲自由軟件。雖然無法肯定,但我認爲這部分上是由於整個社團對Qt作爲非自由軟件而顯示的強烈不滿的態度使之作出了這個決定。(新的許可證不方便也不公正,因此將來避免使用Qt還是可取的。)

我們將如何應對下一個誘人的非自由Library呢?整個自由軟件社團都能理解不受誘惑而掉進陷阱的需要嗎?或者我們中的許多人會因放棄自由、追求方便而產生一個重大問題嗎?我們的前途取決於我們的哲學。

軟件專利

我們面臨最嚴重的威脅來自軟件專利,它可以在長達二十年之久的時間內禁止算法和特性爲自由軟件所用。LZW壓縮算法的專利是1983年申請的,因此我們仍舊無法發行自由軟件以產生正確壓縮的GIF文件。1998年,一個生成MP3壓縮聲音文件的自由程序迫於起訴的威脅而撤消了發行。

對付專利也有多種辦法:我們可以蒐集某項專利無效的證據,我們也可以尋求其他的途徑以完成工作。但這兩種方也都只適用於部分情況。當兩者都失敗時,一個專利也許會迫使所有自由軟件都缺乏用戶希望的一些特性。這種情況一旦發生。我們應該如何處理?

我們當中爲自由的緣故而珍視自由軟件的人總會堅持與它站在一起。我們會想方設法完成任務,而不用已申請專利的特性。但那些因爲期望自由軟件有技術優勢而重視它的人,則有可能因爲一項專利拖它的後腿而認爲自由軟件是失敗的。因此,儘管探討“大教堂”開發模式的實用有效性以及自由軟件的可靠性和力量大有裨益,我們不應僅此而滿足。我們必須談自由、談原則。

自由文檔

我們的自由操作系統中最大的不足並不在軟件——而是我們可以包括在系統中優秀的自由文檔不足。文檔是任何軟件包中基本的組成部分之-;一個重要的自由軟件包沒有相應的優秀自由文檔,那是一個大漏洞。今天我們有許多這樣的漏洞。

自由文檔如同自由軟件,是自由的問題而不是價格問題。自由文檔的判斷準則很大程度上與自由軟件相同:給予所有的用戶某種自由。再發行(包括商業銷售)必須被准許,無論是聯機形式還是印刷品,以便使用手冊能與每個自由軟件的拷貝相依爲伴。

准許修改也是很關鍵的。但是從整體上來說,我並不認爲準許人們修改所有的文章與書籍是不可或缺的。例如,我就不認爲,你或者我有必要授權別人隨意改動闡述我們的行動和觀點的文章,就像這一篇。

但准許修改自由軟件文檔是有特殊理由的,當人們使用自己的權利修改軟件,並增加或修改其特性時,如果他們盡責,他們也會修改文檔——從而能夠爲修改後的程序提供精確可用的文檔。如果使用手冊不允許程序員盡心盡力,善始善終(修改文檔的話),那就不適應我們社團的需求。

某些種類的限制修改不會構成任何問題。例如,要求保存原作者的版權公告、發行條件,或者所有作者的列表等,都是可以的。要求改動後的版本作出聲明,以表明它們已經改動也沒有問題,甚至可以要求整個的章節不被刪除或者修改也可以接受,只要這些章節圍繞非技術問題。

這類限制之所以不構成問題,是因爲它們不妨礙盡責的程序員修改使用手冊,以適應修改後的程序。換言之,它們不阻礙自由軟件社團最大限度地利用文檔。

然而,必須能夠修改手冊的所有‘技術”內容,然後通過所有普通的介質和所有普通的渠道,來發布修改後的結果;否則,這些限制就會阻礙社團,手冊就不再自由,我們就需要另一份使用手冊。

自由軟件的開發者會有意識和決心以製作一整套的自由手冊嗎?再說-次,我們的前途取決於我們的哲學。

我們必須談論自由

今天估計約有一千萬左右的用戶在使用GNU/Linux系統,例如Debian GNU/Linux與Red Hat Linux。自由軟件已取得了這樣的實際優勢,以致於大量的用戶爲了純粹實用的理由蜂擁而至。

這一情況的良好影響是顯而易見的:具有開發自由軟件興趣的人更多了,自由軟件產業的顧客也更多了,還有更強的能力以鼓勵公司來開發商業化的自由軟件而不是專有的軟件產品。

但人們對自由軟件的興趣增長,比對自由軟件的哲學基礎的認知來得更迅速,這會引起麻煩。我們迎接上述機遇與挑戰的能力取決於我們堅持自由的意志和毅力。爲了保證我們的社團具備這樣的意志和毅力,我們有必要在新用戶加入社團的時候將這一觀念貫輸給他們。

但是我們這樣的嘗試正在失敗:吸收新用戶加入我們這一社團的努力要遠大於將我們社團宗旨傳授給他們的努力。這兩方面的工作都不可偏廢,而且我們需要把一碗水端平。

“開源軟件”(Open Source)

向新用戶傳授自由的概念在1998年變得更爲困難,因爲社團的一部分決定停止使用“自由軟件”,而代之以“開源軟件”(open-source software)。

傾向於這一說法的有些人希望能避免free的歧義性,即避免將“自由”與“免費”相混淆——這是一個合理的目標。但是,另一些人的目的則是把激勵自由軟件運動與GNU工程的原則精神擱置一旁,轉而去吸引公司經理們和商業用戶們,他們中許多人所持的意識形態置利潤於自由之上、社會之上、原則之上。因此,“開源軟件”的詞義着重於創造強大的、高質量軟件的潛力,而回避了自由、社會和原則這些概念。

《Linux》雜誌是這一傾向的明顯代表——它上面充斥和可在GNU/Linux上運行的專有軟件的廣告。當下一個Motif或Qt出現時,這些雜誌是警告程序員們對它們敬而遠之,還是爲它們敲鑼打鼓呢?

來自公司的支持可以在很多方面爲社團做出貢獻,如果其他條件不變,它是大有裨益的。然而,通過少提自由與原則以獲取它們的支持將會是災難性的;它會使在自由軟件外延的影響與對自由軟件內涵的認識之間業已存在的不平衡進一步惡化。

“自由軟件”與“開源軟件”多多少少描述了軟件的同一範疇,但強調了軟件的不同側面和價值觀。GNU工和將繼續使用“自由軟件”這一名詞,以表示自由、而不僅僅是技術,纔是重要的。

嘗試!

Yoda的哲學(沒有“嘗試”可言)聽起來不無道理,但它不適用於我。當我憂鬱自己是否有能力完成工作,而且我不能肯定我所做的-切是否能夠達到預期的目標時,我已經完成了絕大部分工作。但無論如何,我仍舊嘗試了,因爲除了我以外,沒有其他人站在敵人和我的城市之間。讓我自己吃驚的是,有時我成功了。

有時我會失敗,我的一些城市會陷落。接着我發現另一座城市正面臨威脅,我得隨之做好投入下一場戰鬥的準備。隨着時光流逝。我學會了探察威脅,並將自己置身於它們和我的城市之間,並呼籲其他黑客來與我並肩戰鬥。

時至今日。我常常不是唯一的戰士。看見成羣結隊的黑客掘土加固戰壕,我既感到寬慰,也感到快樂,我明白城市會繼續矗立在這裏——至少現在如此。但失陷的危險與歲俱增。現在微軟已明確地表示將我們的社團列爲打擊目標。我們不能奢理未來的自由會從天上掉下來。天上是不會掉餡餅的!如果你希望維護你的自由,那麼你必須做好準備捍衛它。

(本譯文得到了原作者Richard Stallman的審查和校定,並可以自由地原封不功地拷貝。)

作者簡介

Richard Stallman

這本書中的每個人或多或少的都會欠Richard Stallman(RMS)一份情。15年前,他創建了GNU工程,來保護和培養自由軟件的開發。該項目的目標是開發一個完整的操作系統以及在一個自由和開放的許可證下可使用的完整工具集,從而使人們不再爲軟件付費。

在199l年,Stallman在得了聲望極高的Grace Hopper獎項,該獎項由Association for Computing Machinery頒發,以表彰他開發了Emacs編輯器。在1990年,他獲得了麥克阿瑟基金會的獎金。他在1996年還被瑞典皇家技術學院授予榮譽博士學位。1998年,他和Linux Torvalds一道獲得了Electronic Frontier Foundation的先鋒大獎。

更爲公衆所知的是他對自由軟件的傳播,這遠遠超過了他親自參與的開發工作。

正像一些願意全身心的投入到事業中的人一樣,Stallman在他所在的社團內引發了一連串的爭論。他堅持認爲“開源軟件”這一術語是特別用來爲取消自由軟件中與自由相關方面而設計的,這只是以後他所表現的立場之一,同時這也是讓衆人將其標榜爲一個極端主義者的原因。

許多人說過,“如果Richard不存在的話,那麼就有必要要創造一個像他這樣的人”。這個褒獎表達了人們對他致謝的事實。的確,如果沒有Richard對自由軟件運動的普及和推廣,就不會有現在的開源運動。

除了他的政治立場以外,Richard還以一些軟件項目的開發而聞名。其中兩個最突出的項目是GNU C編譯器(GCC)和GNU Emacs編輯器。GCC是迄今爲止世界上最廣泛被移植到其他系統上的編譯器,但是從更廣泛被使用的角度來講,RMS還是以開發GNU Emacs編輯器而著名。將GNU Emacs編輯器稱爲編輯器就如同把地球稱爲一大塊泥土一樣自然。Emacs是一個編輯器、web瀏覽器、新聞閱讀器、郵件閱讀器、個人信息管理器、排版工具、程序編輯器、十六進制編輯器、字處理器和一些視頻遊戲。許多程序員自己可以在Emacs的基礎上定製自己的工作環境,或者增加新的軟件包。有許多的程序員使用Emacs以後不必再在計算機上做任何其他事。


GNU操作系統與自由軟件運動

i4CN(工業4.0中國-簡稱),是中國最系統化、最全面的工業4.0、工業互聯網、智能製造、無人工廠領域的第三方諮詢公司。公司整合華爲、博世、騰訊、美的等專家,首家提供工業4.0整合方案,包括i4技術項目、i4四大管理體系、十大思想變革的三層金字塔式諮詢架構;能夠指導企業實施專業化的工業4.0變革和無人工廠規劃建設與運營管理。助力國家實現中國製造2025的宏偉藍圖。

GNU操作系統與自由軟件運動

樑卓業 i4CN首席諮詢顧問中國工業4.0、智能製造、無人工廠、工業互聯網專家,華爲ISC、IPD體系專家華爲ISC+項目組成員,智能製造標杆車間項目經理工業4.0十大思想變革、無人工廠建設體系首創人中山大學麻省理工學院雙MBA,廣東工業大學機電學院本科歡迎需要導入華爲ISC、IPD體系,實施工業4.0無人工廠的企業與i4CN合作。

(請搜索i4CN樑卓業老師相關課程視頻並進一步瞭解)

相关文章