GNU工程

GNU 工程

Richard Stallman

最初發表在 "Open Sources" 這本書

[image of What's GNU] [ 捷克語 | 簡體中文 | 繁體中文 | 英語 | 法語 | 印度尼西亞語 | 意大利語 | 朝鮮語 | 俄羅斯語 | 西班牙語 ]

 

第一個軟件共享社團

當我於一九七一年開始爲麻省理工學院(MIT)人工智能實驗室工作時,我成爲那時已經存在多年的一個軟件共享社團的成員。軟件的共享其實並不侷限於我們的特定社團;它與計算機是同齡的,如同食譜的共享與烹調同樣悠久一樣。但是我們比大多數人做的更多。

人工智能實驗室使用一個名叫 ITS(不兼容分時系統)的分時操作系統,它是由實驗室員工電腦黑客們 (1) 爲當年的一種大計算機數位 PDP-1 設計並用彙編語言編寫的。作爲社團的一個成員,人工智能實驗室的一個員工電腦系統黑客,我的工作是來改進這個系統。

我們沒有稱我們的軟件爲「自由軟件」,因爲這個術語當時還不存在;但我們的軟件的確是「自由軟件」。不論何時,當來自其他大學或公司的人想要移植或使用程序時,我們都樂於提供。如果你看到某人正在使用一個你不熟悉但卻有趣的程序時,你總可以要求參閱其源碼,因此你可以讀它、修改它、或者對它加以拆解拼裝製成一個新的程序。

 

(1) 一部分大衆傳播媒體混淆地將「黑客」一詞用來表示「安全破壞者」。我們作爲黑客拒絕認可這個含義,並繼續用這個詞表示「那些喜愛編程並享受在其中變得更擅長於編程的人。」

 

社團的崩潰

這種情形在一九八○年代初期,當 Digital 公司不再繼續其 PDP-10 系列時徹底地改變了。此係列的架構在六○年代著實優雅且有力,但卻無法自然地擴充到在八○年代成爲可能的較大的定址空間。這意味著幾乎所有構成 ITS 的程序都已經被淘汰了。

人工智能實驗室黑客社團在不久以前已經崩潰了。一九八一年,抽資脫離的 Symbolics 公司已經從人工智能實驗室僱傭走了幾乎所有的黑客,人口減少的社團已不能維持其自身。(Steve Levy 所著的《黑客》敘述了這些事件並給出了該社團在鼎盛時的美景。)當人工智能實驗室於一九八二年購買一臺新的 PDP-10 時,其管理層決定使用 Digital 的非自由分時系統而不是 ITS 。

VAX 或 68020 等當代的現代計算機,擁有其自己的操作系統,但它們均不是自由軟件:即使只是獲得一個可執行代碼拷貝,你也必須簽署一個保密協議。

這意味著使用計算機的第一步是承諾不去幫助你的鄰居。一個互助的社團被禁止了。私有軟件擁有者制定的規則是,「如果你與你的鄰居共享,你就是一個侵犯版權者。如果你需要任何更改,求我們來做。」

認爲私有軟件社會體制 -- 不允許你去共享或改變軟件 -- 是反社會的、也是不道德的,並且是完全錯誤的思想,也許對一些讀者來說會產生驚訝。可是我們對於一個建立在分割公衆並讓使用者無助之上的體制又能夠說些什麼呢?對上述思想感到驚訝的讀者或許將私有社會體制視爲理所當然,或者使用私有軟件行業暗示的條款來判斷它。軟件出版者長時間辛苦地努力去使人們信服,只有一種方式來看待這個問題。

當軟件出版者談到「堅持」他們的「權利」或「阻止侵犯版權」時,他們實際所「說」的是次要的。這些聲明真正的訊息是他們將未闡明的假設視爲理所當然;公衆被認爲應當無異議地接受這些。還是讓我們來仔細檢查這些吧。

一個假設就是,軟件公司有毫無疑問的自然權利去擁有軟件並因而有在其所有用戶之上的權利。(如果這是一個自然權利,那麼無論它對公衆造成多大危害,我們也不能反對。)有趣的是,美國憲法和法律慣例否決這種觀點;版權不是一個自然權利,而是一個人爲的,政府強加的限制用戶複製的自然權利的壟斷。

另一個未申明的假設是,關於軟件的唯一重要事情是它允許你作些什麼工作 -- 我們計算機用戶不應該在意我們被允許去擁有哪種社會。

第三個假設是,如果我們不提供軟件公司在用戶之上的程序的權利,我們將沒有可以使用的軟件(或,將決不會有一個程序來做這個或那個特定的工作)。這個假設在自由軟件運動證明我們能夠不必受其束縛而製造豐富的有用軟件之前,也許看起來像是有理的。

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

這兒沒有該結論背後廣泛推理的空間,因此讀者可參閱下邊網頁, http://www.gnu.org/philosophy/why-free.html

一個赤裸的道德選擇。

隨著我的社團沒有了,要像以前那樣繼續是不可能了。取而代之的情況是,我面對一個赤裸的道德抉擇。

加入私有軟件世界是較容易的選擇,簽署保密協議並承諾不去幫助我的黑客夥伴。極有可能我也去開發在保密協議下散佈的軟件,因而對其他人增加壓力迫使他們也去背叛他們的夥伴。

按此方式,我可能已經掙了錢,並或許自己開心地寫代碼。但是我知道在我的事業終點,我將回望築牆隔開人們的這些年,會感到我竟投入了我的生命以使這個世界變成更壞的地方。

當有人拒絕給我和 MIT 人工智能實驗室有關的我們打印機的控制程序源碼時,我已經經歷了處在保密協議的接受端。(該程序某些特色的缺少使得打印機的使用極其困難。)因此我不能告訴我自己保密協議是無害的。當他拒絕讓我們分享其代碼時,我非常生氣;我不能夠轉過身來,然後自己也對每個人做這同樣的事情。

另一個直截了當但不愉快的選擇,是離開計算機領域。那樣的話,我的技術將不會被濫用,但仍會被浪費。我將不會因隔離和限制計算機用戶而被指責,雖然如此,這種情形仍然會繼續發生。

所以我找尋一個程序員可以做一些好事的方法。我問我自己,有沒有一個或一些程序我可以寫,進而有可能再次形成一個社團。

答案是清晰的:我們首先需要的是一個操作系統。它是開始使用一臺計算機的至關重要的軟件。有了操作系統,你可以做很多事情;沒有操作系統,你完全不能運行計算機。有了自由操作系統,我們能夠再次擁有一個互助的黑客社團 -- 並邀請任何人蔘加。任何人都能夠使用計算機而不必從圖謀剝奪他或她的朋友開始。

作爲一個操作系統開發者,我有做這個工作的恰當技能。所以即使我不能把成功當作必然,我認識到我被選擇來從事這項工作。我選擇將該系統做成與 Unix 兼容因而它可被移植,並使 Unix 用戶可以容易地轉換到它。 GNU 這個名字,依照黑客的傳統選中,作爲一個遞歸的「GNU's Not Unix」首字母縮寫。

一個操作系統指的不僅僅是一個內核,剛足夠運行其他程序。在一九七○年代,每個可以稱作操作系統的系統包括命令處理器,彙編程序,編譯器,解釋程序,調試除錯器,文本編輯器,郵件程序,以及其它許多程序。 ITS 、 Multics 、 VMS 和 Unix 都有這些。 GNU 操作系統也將包括它們。

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

我不爲我誰爲我? 我只爲我我爲何? 若非現在要何時?

決定開始 GNU 工程正是基於一個類似的精神。

(1) 作爲一個無神論者,我不跟隨任何一個宗教領袖,但我有時候發現我欽佩他們中的一個說過的話。

自由自在般的自由

「自由軟件」這個術語有時被錯誤地理解 -- 它與價格完全無關【在英語中,自由與免費同字(free),因此在自由軟體運動中,一般以首字母大寫來表自由(Free)】。自由軟件是關於自由。因此這裏是自由軟件的定義:對你,一個特定的用戶,一個程序是自由軟件,當:

  • 你有自由爲任何目的去運行該程序。
  • 你有修改該程序以滿足你需求的自由。(爲使該自由可以有效地實施,你必須可取得源碼,因爲在沒有源碼的情況下對一個程序做修改是非常困難的。)
  • 不論免費或收取一定費用,你有重新散佈拷貝的自由。
  • 你有散佈該程序修改過的版本,從而讓社會得以受益於你的改進的自由。

由於 "free" 所指的是自由,而非價格,賣拷貝和自由軟件之間並沒有矛盾。事實上,販賣拷貝的自由是至關重要的:以光碟型式賣出的自由軟件收藏對於社團是重要的。同時,出售它們是爲自由軟件發展籌集資金的重要方法。因此,一個人們沒有自由將它加入到這些收藏的程序就不是自由軟件。

由於「自由」的含糊性,人們用了很長時間找尋其它選擇,但是從沒有人找到一個合適的選擇。英語比其它語言有更多的單詞和細微差別,但它缺少一個簡單的、明確的單詞用來表示「自由」,就像自由自在 -- 「無拘無束的」,使得這個字成爲最接近此一含義的單詞。諸如「解放的」,「自由自在」和「開放」等其它選擇,都要麼有錯誤的含義或一些其它缺點。

GNU 軟件和 GNU 系統

開發一個完整系統是一個很大的工程。爲了使其達成,我決定只要有可能就去改寫並使用現有的自由軟件。例如,在最初我決定用 TeX 作爲主要的文本格式化程序;一些年後,我決定用 X Window 系統而不是爲 GNU 寫另一個視窗系統。

由於這項決定, GNU 系統與所有 GNU 軟件的堆積不同。 GNU 系統包括非 GNU 軟件程序,這些程序是由其他人或工程爲了他們自己的目的而開發的。我們之所以能用它們是因爲它們是自由軟件。

開始該工程

我於一九八四年一月辭去我在 MIT 的工作並開始編寫 GNU 軟件。離開 MIT 是必要的,這樣可以使 MIT 無法干涉將 GNU 作爲自由軟件而散佈。如果我還在職, MIT 也許已經要求擁有這些作品,並可能強加他們自己的發行條款,或將它們變成私有軟件包。我沒有意圖做大量工作而僅僅看到它變得沒有用,因爲做這件事情的既成目的是:創造一個新的共享軟件社團。

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

初期的腳步

開始 GNU 工程的不久之前,我聽說了叫做 VUCK 的自由大學編譯工具箱。(荷蘭單詞「自由」,寫作爲一個字母 V)這是一個設計來處理多種語言的編譯器,包括 C 和 Pascal ,並支持多重目標機器。我曾寫信給其作者詢問 GNU 是否可以使用它。

他嘲弄地回答了,聲明該大學是自由的而該編譯器不是。因此我決定我的第一個爲了 GNU 工程而寫的程序將是一個多種語言,多種平臺的編譯器。

因爲希望避免自己編寫整個編譯器的必要,我得到了在 Lawrence Livermore 實驗室開發的多平臺編譯程序 Pascal 的源碼。它支持並且用一種設計成爲一個系統編程語言的 Pascal 擴充版本來編寫。我加入一個 C 的前端,並開始將它移植到 Motorola 68000 計算機。但是當我發現該編譯器需要百萬字節的堆棧空間時,我不得不放棄。可用的 68000 Unix 系統僅僅允許 64k 字節。

我隨後瞭解到 Pascal 編譯器的運行是,分析整個輸入文件成爲一個語法樹,轉換整個語法樹成一個「指令」鏈,然後生成完整的輸出文件,而不曾釋放任何存儲空間。到了這個地步,總結下來我仍必須從頭開始寫一個新的編譯器。那個新的編譯器就是現在所知的 GCC;其中沒有一點 Pascal 編譯器的內容,不過我仍設法改編和使用我已寫好的 C 前端。但那是幾年後的事了;首先,我開發 GNU Emacs 。

GNU Emacs

我於一九八四年九月開始著手 GNU Emacs ,它於一九八五年初開始有用。這使得我可以開始使用 Unix 系統作編輯;因爲沒有興趣學習使用 vi 或 ed ,直到那時我是在其它類型機器上做我的編輯的。

這時候,人們開始想用 GNU Emacs,因此出現了該如何發行它的問題。當然,我將它放在我用的 MIT 計算機的匿名 FTP 服務器上。(這臺計算機, prep.ai.mit.edu ,因此成爲主要的 GNU FTP 散佈站點;當它一些年後退役時,我們將其名字轉到我們新的 FTP 服務器。)但是在那時,一些感興趣的人不在 Internet 上,不能通過 FTP 獲得拷貝。所以問題是,我該對他們說什麼?

我興許會說,「找一個上網的朋友做一個拷貝給你。」或者我興許會像我爲原來的 PDP-10 Emacs 所做的:告訴他們,「郵寄給我一盤磁帶和一個貼足郵資的回信封,我會將 Emacs 放在磁帶上寄回去。」但是我沒有工作,我正在尋找從自由軟件掙錢的方法。所以我宣佈我會郵寄一盤磁帶給任何想要的人,並收取 $150 。用這種方法,我開始了自由軟件發行的事業,它是現今發行整個基於 Linux 的 GNU 系統的公司的先驅。

是一個對任何用戶都自由的程序嗎?

如果一個程序在它離開其作者雙手時是自由軟件,這並非必要地意味著它對於每一個擁有其一份拷貝的人都將是自由的。例如,公衆領域軟件(沒有被版權保護的軟件)是自由軟件;但是任何人可以製作一個由它修改而來的私有版本。同樣地,許多自由程序被版權保護但是基於簡單許可證加以發行,允許私有的修改版本。

這個問題的典型例證是 X Window 系統。由 MIT 開發,並用一個許可證方式作爲自由軟件發表,它很快即被不同的計算機公司所採用。他們將 X 以僅二進制形式的方式加到他們的私有 Unix 系統中,並被同樣的保密協議控制著。這些 X 的拷貝,就像 Unix 一樣,再也不是自由軟件。

X Window 系統的開發人員根本不認爲這是一個問題 -- 他們期望並有意使其發生。他們的目標不是自由,而僅僅是「成功」,那種定義爲「有許多用戶」的成功。他們不在意這些用戶是否擁有自由,只是希望他們人數衆多。

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

Copyleft 和 GNU GPL

GNU 的目標是給用戶自由,而不是僅僅成爲流行。所以我們需要使用可以阻止 GNU 軟件被轉變成私有軟件的發行條款。我們所用的方法被稱之爲「copyleft」。(1)

Copyleft 利用著作權法,但卻翻轉它慣常的目的而爲我們所適用:它成爲一種保持軟件自由的手段,而不是將軟件私有化的方法。

Copyleft 的中心思想是我們給予每個人運行該程序,拷貝程序,修改程序和散佈其修改版本的許可 -- 但是沒有增加他們自己的限制的許可。因此,定義「自由軟件」的至關重要的自由是藉由每個人擁有一個拷貝而獲得保證;這些自由因此成爲不能剝奪的權利。

對於一個有效的 copyleft ,修改後的版本必須也是自由的。這確保了建立在我們工作基礎之上的作品,一旦散佈,對我們社團就成爲可利用的。當有工作的程序員們志願改善 GNU 軟件時, copyleft 防止他們的僱主們說,「你不能共享這些修改,因爲我們正準備使用它們來製作該程序的我們的私有版本。」

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

一個相關議題涉及到結合一個自由程序與非自由代碼。如此的結合將不可避免地是非自由的;非自由部分的任何缺乏自由,將也是整個的缺乏。允許這樣的組合將打開一個大得足夠沉掉一艘船的洞。因此, copyleft 的一個至關緊要的需求是堵上這個洞:任何加到或與一個 copyleft 的程序所組合而成的程序必須也使更大的組合版本也是自由的和 copyleft 的。

我們爲大多數 GNU 軟件使用的 copyleft 的明確實現是 GNU 一般公衆許可證,或簡稱 GNU GPL 。我們在特定場合下有其它種類 copyleft 可以使用。 GNU 手冊也是 copyleft 的,但使用一個非常簡化的 copyleft 類型,因爲 GNU GPL 的複雜性對其手冊是不需要的。

(1) 在一九八四或一九八五年, Don Hopkins (一個非常有想像力的朋友)寄給我一封信。在信封上他寫了一些有趣的話,包括這個:「著作權沒有:撤回所有權利」(Copyleft: all rights reversed)。【這裏採用劉瓊雲譯作《黑客倫理與資訊時代精神》(The Hacker Ethic, and the spirit of information age)第七十一頁的譯法,但在此仍用版權一詞。是對「版權所有 翻印必究」(Copyright: all rights reserved)一句的對應感謝石頭成提供的信息。】我用單詞「copyleft」來命名我當時正在發展的散佈概念。

自由軟件基金會

隨著使用 Emacs 興趣的增長,其他人加入了 GNU 工程,我們決定這是再次尋求資金的時候了。在一九八五年,我們創立了自由軟件基金會,一個免稅的爲自由軟件發展的慈善團體。 FSF 也接手了 Emacs 磁帶發行工作;後來它通過往磁帶上增加其它自由軟件(既有 GNU 也有非 GNU ),也通過出售自由手冊擴展了該業務。

FSF 接受捐款,但是其大部分收入常常來自銷售 -- 自由軟件的拷貝,和其它相關的服務。今天它賣源碼的 CD-ROMs ,二進制代碼的 CD-ROMs ,精細打印的手冊(均有再散佈和修改的自由),以及豪華髮行(這兒我們爲你選擇的平臺製作完整的軟件收藏)。

自由軟件基金會員工們已經編寫和維護了一系列的 GNU 軟件包。兩個值得注意的是 C 庫和外殼(shell)。 GNU C 庫是每個運行於 GNU/Linux 系統的程序使用來與 Linux 通信的。它是由自由軟件基金會的一個成員, Roland McGrath 開發的。被大多數 GNU/Linux 系統使用的外殼程序是 BASH , the Bourne Again Shell (1) ,它們是由 FSF 員工 Brian Fox 開發的。

我們資助了這些程序的開發因爲 GNU 工程不僅僅是關於工具或開發環境。我們的目標是一個完整操作系統,而這些工具對於這個目標是需要的。

(1) 「Bourne again Shell」是一個對名爲「Bourne Shell」的 Unix 常用 shell 的玩笑。

自由軟件支持

自由軟件哲學抵制一種特定的分佈廣泛的商業實踐,但是它不是反商業的。當商業活動尊重用戶的自由時,我們祝願它們成功。

銷售 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 從以前到現在都是私有軟件,而 GNU 工程的哲學則說我們不該使用私有軟件。但是,應用與推論出 「自我防衛中的暴力是正當的」 相同的論理,我的結論是:在開發將用來幫助其他人停止使用私有軟件包的自由軟件代替品的關鍵時刻,使用私有軟件包是合理的。

但是,儘管這是一個可合理化的罪惡,它仍然是罪惡。今天我們不再有任何 Unix 拷貝,因爲我們已經用自由操作系統代替了它們。如果我們不能替換一臺計算機的操作系統爲自由操作系統,我們則替換該計算機。

GNU 任務列表

隨著 GNU 工程的進行,以及越來越多的系統部件被發現和開發,最終使得做一個剩餘差距列表成爲一件有意義的事情。我們用它來招聘開發者編寫遺漏的部分。這個列表成爲衆所周知的 GNU 任務列表。除了遺漏的 Unix 部件之外,我們列出了額外的各種各樣的其它有用的軟件和文檔工程,我們認爲,這些是一個真正完整的系統所應當擁有的。

今天,幾乎已經沒有什麼 Unix 部件還留在 GNU 任務列表中 -- 那些工作都已經被完成了,只除了一些無關緊要的。但是該列表滿是可以叫做「應用」的工程。任何吸引多於一個有限用戶種類的程序都將是加到操作系統的有益之物。

即便是遊戲也被包括在任務列表上 -- 而且是從最初就開始了。Unix 包括遊戲,所以 GNU 自然地也應該包括。但是對遊戲來說兼容性不是一個問題,所以我們沒有跟著 Unix 已有的遊戲列表走。作爲代替,我們列出了一系列不同種類的用戶可能會喜歡的遊戲。

GNU 庫 GPL

GNU C 庫使用一個稱做 GNU 較少一般公衆許可證(LGPL)的特殊種類的 copyleft,它允許私有軟件可以鏈接到該庫。爲什麼讓此成爲例外?

這不是一個原則問題;沒有一個原則說私有軟件產品有資格包含於我們的代碼中。(爲什麼要對一個斷言拒絕與我們共享的工程作貢獻呢?)對 C 庫或任何庫使用 LGPL,是一個策略上的事情。

C 庫做的是原生工作;每個私有系統或編譯器都帶有 C 庫。因此,只將我們的 C 庫給自由軟件用並不會給自由軟件帶來任何好處 -- 這將只會阻止使用我們的庫。

有一個系統是這個的例外:在 GNU 系統中(這包括 GNU/Linux),GNU C 庫是唯一的 C 庫。所以 GNU C 庫的發行條款決定了它是否可以用來爲 GNU 系統編譯一個私有程序。允許私有應用在 GNU 系統上運行沒有與道德相關的理由,但是從戰略上看,不接受它們似乎是更多地阻礙使用 GNU 系統,而不是鼓勵自由應用的開發。

這就是爲什麼使用 LGPL 對於 C 庫是一個好的策略。對於其它庫,策略性的決定需要一個案例一個案例地個別考慮。當一個庫做的是一種能幫助編寫特定種類程序的特殊工作時,那麼將其用 GPL 發行,限制其只能被用於自由軟件,是一種幫助其它自由軟件開發者的方法。這給了他們在面對私有軟件的競爭時的一個優勢。

考慮一下 GNU Readline 這一個被開發用來爲 BASH 提供命令行編輯的庫。 Readline 是用普通的 GNU GPL 發行的,而不是 LGPL。這可能真的減少了 Readline 的使用量,但是這對我們沒有損失。因爲在此同時,至少有一個有用的應用軟件被特別地做成自由軟件從而可以使用 Readline,那是對於社團的真正收穫。

私有軟件開發者們有金錢供給的優勢;自由軟件開發者們則需要相互獲得優勢。我希望有一天我們將擁有對私有軟件不存在的類似可利用的巨大且受 GPL 保護的庫集合,提供作爲新自由軟件建築區塊的有用模組,並且進一步強化對於將來自由軟件開發的優勢。

抓癢?

Eric Raymond 說「每個好的軟件作品都開始於抓一個開發者的個人癢。」也許那有時會發生,但是許多 GNU 軟件的基本部分是爲了有一個完整的自由操作系統軟件而被開發的。它們來自於一個願景和一個工程,而不是來自於衝動。

例如,我們開發了 GNU C 庫是因爲一個類 Unix 系統需要一個 C 庫,開發了Bourne-Again Shell(bash) 因爲一個類 Unix 系統需要一個外殼,以及開發了 GNU tar 因爲一個類 Unix 的系統需要一個 tar 程序。對我自己的程序也同樣是如此 -- GNU C 編譯器,GNU Emacs,GDB 和 GNU Make。

一些 GNU 程序被開發來應付對我們自由的特定威脅。因而,我們開發了 gzip 來代替因 LZW 專利而使社團失去的 Compress 程序。我們發現人們開發 LessTif,近期更開始了 GNOME 和 Harmony,來解決因某些私有軟件庫(見下文)所帶來的問題。因爲用戶們不應該在祕密和自由之間作選擇,我們正在開發 GNU Privacy Guard 以代替流行的非自由加密軟件。

當然,編寫這些程序的人們變得對這項工作發生興趣,許多人由於他們自己的需要和興趣而給它們增加了許多功能。但是那並不是這些程序之所以存在的原因。

未預料的開發

在 GNU 工程剛開始時,我設想我們將開發整個 GNU 系統,然後完整地散佈。但那並不是它如何發生的。

由於 GNU 系統的每個部件都是在 Unix 系統上實作出的,因此遠在一個完備的 GNU 系統實際存在之前,每個部件都可以在 Unix 系統上運行。這些程序有的變得流行,使用者開始擴充並且移植它們到許多不兼容的 Unix 版本,有時也會移植到其它的系統。

這個過程使得這些程序更加強而有力,並且吸引了 GNU 工程的資金和貢獻者。但是這或許也延遲了數年來完成一個最小運轉系統,因爲 GNU 開發者們的時間被投入到維護這些部件和給已有部件增加功能當中,而不是轉移到編寫一個接一個遺漏的部件上。

GNU Hurd

一九九○年, GNU 系統幾乎已經完成;唯一主要遺漏的部件是其內核。我們已經決定將內核實現成在 Mach 之上運行的服務器進程集合。 Mach 是在 Carnegie Melon 大學,後在猶他大學開發的微核; GNU HURD 是一個運行於 Mach 之上的服務器集合(或稱爲「角馬獸羣」),並且負責 Unix 內核的各種任務。開發的啓動由於我們等待 Mach 如其許諾的那樣被作爲自由軟件發行而延誤。

選擇該設計的一個原因是爲了避免此工作中看來似乎是最困難的一部分:在沒有一個源碼層次的調試除錯器的條件下調試除錯內核程序。在 Mach 中,這部分的工作已經被完成,因此我們期待著像用戶程序般使用 GDB 來調試除錯 HURD 服務器。但是這花了很長時間才成爲可能,而相互發送訊息的多線程服務器最後仍舊難以進行調試除錯。這使得讓 HURD 能夠穩固地工作的進程延長了很多年。

Alix

GNU 內核原本並不設想被稱作 HURD。它的原名是 Alix -- 按我當時的情人命名。她,一個 Unix 系統管理員,指出她的名字是如何適用於一個 Unix 系統版本的普通命名模式;作爲一個笑話,她對她的朋友們說,「有人應該按我的名字命名一個內核。」我沒說什麼,但已決定用一個名叫 Alix 的內核使她驚奇。

事情並沒有保持不變。 Michael Bushnell (現在的 Thomas),內核的主要開發者,屬意 HURD 這個名字,並重新定義 Alix 來指內核中的某個特定部分 -- 該部分就是捕獲系統呼叫並以發送訊息給 HURD 服務器來處理它們。

最終, Alix 和我分手了,她改了名字;與此無關地, HURD 設計被改變因而使得 C 庫得以直接發送消息給服務器,這導致 Alix 部件從設計中消失。

但是在這些事情發生前,她的一個朋友在 HURD 源碼中偶然見到 Alix 這個名字,並向她提及此事。所以該名字已經起了作用。

Linux 和 GNU/Linux

GNU Hurd 還沒有準備好可以作爲產品使用。幸運的是,另一個內核已經可以取得。在 一九九一年,Linus Torvalds 開發了一個與 Unix 兼容的內核並稱之爲 Linux 。大約在一九九二年,將 Linux 與不是非常完整的 GNU 系統相結合產生了一個完整的自由軟件操作系統。(當然,結合它們本身也是一件重要的工作。)由於 Linux ,我們今天因此可以實際運行一個 GNU 系統的版本。

我們稱此版本的系統爲 GNU/Linux ,以表達它是 GNU 系統和以 Linux 作爲內核的組合。

我們將來的挑戰

我們已經證明了我們開發系列廣泛自由軟件的能力。這並非意味著我們是無敵的和無法被停止的。一些挑戰使得自由軟件的將來充滿不確定性;與它們會戰將需要堅實的努力和耐力,有時持續數年。這將會需要那種人們在當他們珍惜他們的自由,並且不讓任何人將其奪走時所顯示的決心。

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

祕密的硬件

硬件廠商愈加傾向於對硬件規範保密。這使得編寫讓 Linux 和 XFree86 能支持新硬件的自由驅動程序變得困難。現在我們已經完成了自由操作系統,但是如果不能支持明天的計算機,我們將會在明天失去它們。

有兩種方法來應付這個問題。程序員可以採用逆向工程的手段來了解如何支持這些硬件。其他的人則可以選用被自由軟件支持的硬件;隨著我們的人數增加,規範的保密將成爲一個弄巧成拙的策略。

反向工程是件大工作;我們會有程序員具備足夠的決心去擔負這件工作嗎?是的 -- 如果我們已經建立了一個認爲自由軟件是一個原則問題的堅固信念,則非自由驅動程序就是無法忍受的。我們中的大多數人會花額外的錢,或甚至一點額外的時間,從而可以使用自由驅動程序嗎?是的,如果擁有自由的決心是廣泛傳播的。

非自由庫

一個運行於自由操作系統之上的非自由庫的行爲就像是一個針對自由軟件開發者的陷阱。庫中的那些吸引人的功能是誘餌;如果你使用該庫,你就跌入了陷阱,因爲你的程序不能有用地成爲自由操作系統的一個部分。(嚴格來說,我們可以包含你的程序,但沒有了該庫它就無法 運行 。)更糟糕的是,如果一個使用私有軟件庫的程序流行起來,它可引誘其他不懷疑的程序員們落入陷阱。

這個問題的第一個例子是八○年代的 Motif 工具箱。儘管當時還沒有自由操作系統,但是 Motif 以後會對自由操作系統造成什麼問題是很清楚的。 GNU 工程以兩種方式做了迴應:通過請求個別的自由軟件工程在支持 Motif 的同時也支持自由 X 工具箱小部件,並請求一些人編寫替代 Motif 的自由軟件。該工作花費許多年時間;由 Hungry 程序員們開發的 LessTif,在一九九七年才成爲夠強而得以支持大多數 Motif 應用程序。

在一九九六年和一九九八年間,另一個非自由 GUI 工具箱庫,叫做 Qt ,被用在 KDE 桌面這一包含大量自由軟件的集合中。

自由 GNU/Linux 系統無法利用 KDE,因爲我們不能使用其庫。儘管如此,一些不嚴格堅持自由軟件的商業 GNU/Linux 系統發行商將 KDE 加入到他們的系統中 -- 產生了一個具有更強能力,但卻更少自由的系統。 KDE 小組積極地鼓勵更多的程序員們使用 Qt ,成百萬的新「Linux 用戶」從來都不知道有這樣一個問題的存在。情形相當糟糕。

自由軟件社團以兩種方法對這個問題作出迴應: GNOME 和 Harmony 。

GNOME 即 GNU 網絡對象模型環境(Network Object Model Environment),是 GNU 的桌面工程。從一九九七年開始,由 Miguel de Icaza 在 Red Hat Software 支持下開發,GNOME 開始提供類似的桌面工具,排外地只使用自由軟件。它也有技術上的優勢,如支持多種語言,而不僅僅是 C++。但是它的主要目的是自由:不需要使用任何非自由軟件。

Harmony 是一個兼容替代庫,設計用來在沒有 Qt 的情況下也有可能運行 KDE 軟件。

在一九九八年十一月, Qt 的開發者們宣佈了一個許可證的改變,當其實施後,應該會使得 Qt 成爲自由軟件。雖然沒辦法確信,但是我想這應該部分歸功於社團對於 Qt 是非自由軟件時所造成的問題的堅定迴應。(新的許可證既不方便也不公正,所以仍舊值得去避免使用 Qt 。)

[後記:在二○○○年九月, Qt 以 GNU GPL 加以發行,因此實際上解決了這個問題]

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

軟件專利

我們面臨的最壞威脅來自於軟件專利,它可以對自由軟件的演算法和功能加以限制多達二十年。 LZW 壓縮算法專利是一九八三年申請的,因此我們仍舊不能散佈自由程序來產生適當的壓縮 GIFs 。在一九九八年,一個用來產生 MP3 壓縮音效的自由軟件程序由於擔心專利官司威脅而被從發行中拿掉。

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

我們中的那些因自由的緣故而重視自由軟件的人們無論如何都將與自由軟件待在一起。我們將設法不用專利保護的功能而完成工作。但是那些因爲他們認爲自由軟件的技術出衆而重視它的人們,有可能在專利抑制自由軟件時認爲這是自由軟件的失敗。因而,雖然討論軟件開發的「大教堂」模式的實際效力和一些自由軟件的可靠性和能力是有用的,但我們必定不能停在那兒。我們必須探討自由和原則。

自由文檔

我們自由操作系統的最大不足不是在軟件中 -- 而是缺乏我們可以包括在我們系統中的好的自由手冊。文檔資料是任何軟件包的基本部分;當一個重要的自由軟件包沒有與好的自由手冊一起出現,那將是一個大的缺陷。今天我們有許多這樣的缺陷。

自由文檔資料,如同自由軟件,是自由問題,不是價格問題。自由手冊的標準幾乎與自由軟件完全相同:它是爲了給予所有用戶確定的自由。重新發行(包括商業銷售)必須被許可,不論是在線還是書面形式,因而手冊能夠伴隨每個程序的每個拷貝。

允許修改也是至關緊要的。作爲一個普通規則,我不相信人們擁有修改所有種類文章和書籍的許可是至關緊要的。例如,我不認爲你或我應該被迫給予修改像本文這樣描述我們行爲和我們觀點文章的許可權。

但是有一個特殊的原因關於爲什麼修改自由軟件文檔資料的自由是至關緊要的。當人們行使他們修改軟件的權利,並且增加或改變其功能時,如果他們是盡職的,則他們也將修改文檔資料 -- 因而他們能隨著修改過的程序一起提供正確和可用的文檔資料。一個不允許程序員們盡職並完成該工作的手冊不符合我們社團的需要。

加諸在修改應該如何完成的某些限制並不會造成問題。例如,保持原作者的版權聲明,發行條款,或作者列表的要求是可以的。要求修改後的版本包括它們修改版本的聲明也是沒有問題的,即使有整節沒有刪除或修改,只要這些節涉及非技術主題。這些類型的限制不是問題,因爲它們不阻止盡職程序員修改手冊以適應修改過的程序。換種說法,它們不妨礙自由軟件社團完全利用該手冊。

儘管如此,必須有可能修改手冊的所有 *技術* 內容,並將結果以所有常規媒體形式通過所有常規渠道發行;否則,這些約束就阻礙了社團,手冊不是自由的,此時我們需要另一個手冊。

自由軟件開發者們將有知曉和決心去生產一個全系列的自由手冊嗎?我們的未來將再次取決於哲學。

我們必須談論自由

估計當今有數千萬的用戶使用諸如 Debian GNU/Linux 和 Red Hat Linux 的 GNU/Linux 系統。自由軟件已經發展到了這樣實用的優勢,使得用戶純粹爲了實用原因而聚集到它身邊。

這種現象的好結果是明顯的:更多開發自由軟件的興趣,更多自由軟件商業的用戶,以及更多鼓勵公司開發商業自由軟件而不是私有軟件產品的能力。

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

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

"開放源碼"

當一九九八年社團的一部分決定停止使用術語「自由軟件」並改爲說「開放源碼軟件」時,教導新用戶有關自由的觀念變得更加困難。

一些喜歡該術語的人意欲避免「自由」與「白送」的混淆 -- 這是一個正當的目標。可是其他人,打算將激勵了自由軟件運動和 GNU 工程的原則精神拋到一邊,反而迎合行政和商業用戶,而這些用戶中的許多人持有一種將利潤置於自由,社團和原則之上的意識形態。因而,「開放源碼」的花言巧語集中在製作高質量,強有力軟件的潛能上,但是避開自由,社團以及原則的思想。

「Linux」雜誌是其一個清晰的例子 -- 它們被與 GNU/Linux 合作運行的私有軟件廣告所充斥。當下一個 Motif 或 Qt 出現時,這些雜誌將警告程序員們遠離它還是爲它們登載廣告呢?

商業支持可以許多方式爲社團作貢獻;其它種類的支持也都一樣,它是有益的。但是爲了贏得他們的支持而少說自由和原則可能損失慘重;它使得前述「超越和公民意識教育」之間的失衡變得愈加糟糕。

「自由軟件」和「開放源碼」或多或少地描述了同一軟件類別,但是它們談論的軟件和價值則是不同的事情。GNU 工程繼續使用「自由軟件」這個術語,來表達不僅僅是技術,自由也是重要的思想。

嘗試!

Yoda 大師的哲學「沒有『嘗試』」(There is no try)】聽起來幽雅,但是它對我不起作用。我已經在「擔憂我是否可以完成任務的顧慮中,以及不確信如果完成了任務,我所做的是否足以達到目標」中,做了我的大部分工作。但是無論如何我嘗試了,因爲在敵人和我的城市之間除了我之外沒有別人。令我自己驚訝的是,有時我成功了。

有時我失敗了;我的城市中有些已經陷落。隨後我發現另一個受威脅的城市,併爲另一場戰鬥做好準備。隨著時間的消逝,我已經學會尋找威脅並把我自己放在它們和我的城市之間,召喚其他黑客來加入我。

現在,我常常不是唯一的一個。當我看見一大羣黑客努力堅持下去時的感覺是一種安慰和樂趣,我意識到,目前,這個城市也許能倖存。但是危險每年都變得更大,並且現在 Microsoft 已經明確地將目標對準我們社團。我們不能把自由的將來視爲理所當然。別把它看作是理所當然!如果你想要保持你的自由,你必須準備好去捍衛它。


[ 捷克語 | 簡體中文 | 繁體中文 | 英語 | 法語 | 印度尼西亞語 | 意大利語 | 朝鮮語 | 俄羅斯語 | 西班牙語 ]

返回 GNU 首頁

請將有關 自由軟體基金會 與 GNU 的 查詢 與 問題(以英語)送到 [email protected]
或(以中文)送到 [email protected]
您也可以使用 其它方法聯繫 自由軟體基金會。

請將有關 GNU 中文翻譯小組 的意見(以英語或中文)送到 [email protected]
有關 GNU 中文網頁 的意見(以英語或中文)送到 [email protected]
有關 原始英語網頁 的意見(以英語)送到 [email protected]
其它問題則(以中文)送到 [email protected]

Copyright (C) 1998, 2001 Richard Stallman.

Permission is granted to make and distribute verbatim copies of this

transcript as long as the copyright and this permission notice appear. 允許在不變更文件內容的前提下刊登本文副本在任何形式的媒體中,但需保留版權宣告和此聲明。

翻譯:朱 慶九 博士。
驗證:馬 雪萍、劉 昭宏。

朱博士的原譯本 在此

本文另有一份由李極光先生所完成的譯本,待出版後我們會互相參酌,並將兩位翻譯人員列爲共同作者。

(引用自http://www.gnu.org/gnu/thegnuproject.cn.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章