最初發表在 "Open Sources" 這本書
[ 捷克文 | 簡體中文 | 繁體中文 | 英文 | 法文 | 印度尼西亞文 | 義大利文 | 韓文 | 俄羅斯文 | 西班牙文 ]
當我於一九七一年開始為麻省理工學院(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" 所指的是自由,而非價格,賣拷貝和自由軟體之間並沒有矛盾。事實上,販賣拷貝的自由是至關重要的:以光碟型式賣出的自由軟體收藏對於社群是重要的。同時,出售它們是為自由軟體發展籌集資金的重要方法。因此,一個人們沒有自由將它加入到這些收藏的程式就不是自由軟體。
由於「自由」的含糊性,人們用了很長時間找尋其它選擇,但是從沒有人找到一個合適的選擇。英文比其它語言有更多的單詞和細微差別,但它缺少一個簡單的、明確的單詞用來表示「自由」,就像自由自在 -- 「無拘無束的」,使得這個字成為最接近此一含義的單詞。諸如「解放的」,「自由自在」和「開放」等其它選擇,都要麼有錯誤的含義或一些其它缺點。
開發一個完整系統是一個很大的計畫。為了使其達成,我決定只要有可能就去改寫並使用現有的自由軟體。例如,在最初我決定用 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 ,它於一九八五年初開始有用。這使得我可以開始使用 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 系統而來的私有版本,而不是自由版本。
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 任務列表。除了遺漏的 Unix 部件之外,我們列出了額外的各種各樣的其它有用的軟體和文檔計畫,我們認為,這些是一個真正完整的系統所應當擁有的。
今天,幾乎已經沒有什麼 Unix 部件還留在 GNU 任務列表中 -- 那些工作都已經被完成了,只除了一些無關緊要的。但是該列表滿是可以叫做「應用」的計畫。任何吸引多於一個有限用戶種類的程式都將是加到作業系統的有益之物。
即便是游戲也被包括在任務列表上 -- 而且是從最初就開始了。Unix 包括游戲,所以 GNU 自然地也應該包括。但是對游戲來說相容性不是一個問題,所以我們沒有跟著 Unix 已有的游戲列表走。作為代替,我們列出了一系列不同種類的用戶可能會喜歡的游戲。
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 系統幾乎已經完成;唯一主要遺漏的部件是其內核。我們已經決定將內核實現成在 Mach 之上運行的伺服器進程集合。 Mach 是在 Carnegie Melon 大學,後在猶他大學開發的微核; GNU HURD 是一個運行於 Mach 之上的伺服器集合(或稱為「角馬獸群」),並且負責 Unix 內核的各種任務。開發的啟動由於我們等待 Mach 如其許諾的那樣被作為自由軟體發行而延誤。
選擇該設計的一個原因是為了避免此工作中看來似乎是最困難的一部分:在沒有一個源碼層次的調試除錯器的條件下調試除錯內核程式。在 Mach 中,這部分的工作已經被完成,因此我們期待著像用戶程式般使用 GDB 來調試除錯 HURD 伺服器。但是這花了很長時間才成為可能,而相互發送訊息的多線程伺服器最後仍舊難以進行調試除錯。這使得讓 HURD 能夠穩固地工作的進程延長了很多年。
GNU 內核原本並不設想被稱作 HURD。它的原名是 Alix -- 按我當時的情人命名。她,一個 Unix 系統管理員,指出她的名字是如何適用於一個 Unix 系統版本的普通命名模式;作為一個笑話,她對她的朋友們說,「有人應該按我的名字命名一個內核。」我沒說什麼,但已決定用一個名叫 Alix 的內核使她驚奇。
事情並沒有保持不變。 Michael Bushnell (現在的 Thomas),內核的主要開發者,屬意 HURD 這個名字,並重新定義 Alix 來指內核中的某個特定部分 -- 該部分就是捕獲系統呼叫並以發送訊息給 HURD 伺服器來處理它們。
最終, Alix 和我分手了,她改了名字;與此無關地, HURD 設計被改變因而使得 C 庫得以直接發送消息給伺服器,這導致 Alix 部件從設計中消失。
但是在這些事情發生前,她的一個朋友在 HURD 源碼中偶然見到 Alix 這個名字,並向她提及此事。所以該名字已經起了作用。
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 的 查詢 與 問題(以英文)送到 [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. 允許在不變更檔案內容的前提下刊登本文副本在任何形式的媒體中,但需保留版權宣告和此聲明。
翻譯:朱 慶九 博士。
驗證:馬 雪萍、劉 昭宏。
朱博士的原譯本 在此 。
本文另有一份由李極光先生所完成的譯本,待出版後我們會互相參酌,並將兩位翻譯人員列為共同作者。
Updated: $Date: 2003/07/23 13:12:06 $ $Author: chstoneliu $