Linux 與 GNU 系統
作者:Richard Stallman許多電腦使用者每天都在執行修改過的GNU 系統,但自己卻沒有意識到。由於一連串奇特的事件,今天廣泛使用的 GNU 版本經常被稱為「Linux」,而許多使用者並未意識到它基本上是由GNU 計劃開發的 GNU 系統。
Linux 確實存在,而且人們也正在使用它,但它只是他們所使用系統的一部分。Linux 是核心:系統中將機器資源分配給你執行的其他程式的程式。核心是作業系統的重要組成部分,但本身是無用的;它只能在完整作業系統的上下文中運作。Linux 通常與 GNU 作業系統結合使用:整個系統基本上是加入了 Linux 的 GNU,或 GNU/Linux。所有所謂的「Linux」發行版實際上都是 GNU/Linux 的發行版。
許多使用者不了解核心(即 Linux)和整個系統(他們也稱之為「Linux」)之間的區別。名稱的含糊不清用法無助於人們理解。這些使用者經常認為 Linus Torvalds 在 1991 年開發了整個作業系統,只是稍微有人幫忙。
程式設計師通常知道 Linux 是一個核心。但是,由於他們通常也聽到整個系統被稱為「Linux」,他們經常設想一個歷史,可以證明以核心來命名整個系統是合理的。例如,許多人認為,一旦 Linus Torvalds 完成了 Linux(核心)的編寫,其使用者便四處尋找其他自由軟體來搭配使用,並發現(沒有特別的原因)製作類 Unix 系統所需的大部分東西都已經可用。
他們發現的絕非偶然——那是尚未完全完成的 GNU 系統。可用的自由軟體加起來成為一個完整的系統,因為 GNU 計劃自 1984 年以來一直致力於製作一個。在GNU 宣言中,我們闡述了開發一個名為 GNU 的自由類 Unix 系統的目標。GNU 計劃的初始公告也概述了 GNU 系統的一些原始計劃。在 Linux 開始時,GNU 幾乎已經完成。
大多數自由軟體專案的目標是為特定工作開發特定程式。例如,Linus Torvalds 著手編寫類 Unix 核心 (Linux);Donald Knuth 著手編寫文字格式化程式 (TeX);Bob Scheifler 著手開發視窗系統 (X Window System)。很自然地,要透過專案產生的特定程式來衡量此類專案的貢獻。
如果我們嘗試以這種方式衡量 GNU 計劃的貢獻,我們會得出什麼結論?一家 CD-ROM 供應商發現,在其「Linux 發行版」中,GNU 軟體是最大的單一組成部分,約佔原始碼總量的 28%,其中包括一些沒有它們就無法形成系統的重要主要組件。Linux 本身約佔 3%。(2008 年的比例類似:在 gNewSense 的「主要」儲存庫中,Linux 佔 1.5%,而 GNU 套件佔 15%。) 因此,如果您要根據系統中程式的編寫者來為系統選擇名稱,最合適的單一選擇將是「GNU」。
但這並非考慮這個問題的最深入方式。GNU 計劃過去不是,現在也不是開發特定軟體套件的專案。它不是一個開發 C 編譯器的專案,儘管我們確實做了。它不是一個開發文字編輯器的專案,儘管我們確實開發了一個。GNU 計劃的目標是開發一個完整的自由類 Unix 系統:GNU。
許多人對系統中的自由軟體做出了重大貢獻,他們都因其軟體而 заслуговують 讚譽。但它之所以成為一個整合的系統——而不僅僅是一組有用的程式——是因為 GNU 計劃的目標是使其成為一個整合的系統。我們列出了製作完整自由系統所需的程式清單,並系統地找到、編寫或找到人員來編寫清單上的所有內容。我們編寫了必要的但不起眼的[1]組件,因為沒有它們就無法形成系統。我們的一些系統組件(程式設計工具)在程式設計師中自行流行起來,但我們編寫了許多非工具的組件[2]。我們甚至開發了一款西洋棋遊戲 GNU Chess,因為一個完整的系統也需要遊戲。
到 90 年代初期,除了核心之外,我們已經組裝了整個系統。我們還啟動了一個核心,即GNU Hurd,它在 Mach 之上運行。開發這個核心比我們預期的要困難得多;GNU Hurd 在 2001 年開始可靠地工作,但它離準備好供人們普遍使用還很遙遠。
幸運的是,由於 Linux 的出現,我們不必等待 Hurd。一旦 Torvalds 在 1992 年釋出了 Linux,它就填補了 GNU 系統中最後一個主要缺口。然後,人們可以將 Linux 與 GNU 系統結合,製作一個完整的自由系統——GNU 系統的一個版本,其中也包含 Linux。換句話說,就是 GNU/Linux 系統。
使它們協同工作良好並非易事。某些 GNU 組件[3]需要進行重大更改才能與 Linux 一起工作。將完整系統整合為可以「開箱即用」的發行版也是一項繁重的工作。它需要解決如何安裝和啟動系統的問題——這是我們尚未解決的問題,因為我們還沒有達到那個階段。因此,開發各種系統發行版的人們做了許多必要的工作。但從本質上講,這項工作肯定會由某人來完成。
GNU 計劃支持 GNU/Linux 系統以及the GNU 系統。FSF 資助了 GNU C 函式庫中與 Linux 相關的擴充功能的重寫,因此現在它們已很好地整合,並且最新的 GNU/Linux 系統使用當前函式庫版本,無需任何更改。FSF 還資助了 Debian GNU/Linux 開發的早期階段。
今天,GNU/Linux 系統有許多不同的變體(通常稱為「發行版」)。它們中的大多數都包含非自由程式——它們的開發人員遵循與 Linux 相關的「開放原始碼」哲學,而不是 GNU 的「自由軟體」哲學。但也存在完全自由的 GNU/Linux 發行版。FSF 為其中的一些發行版提供電腦設備支持。
製作自由 GNU/Linux 發行版不僅僅是消除各種非自由程式的問題。如今,常見版本的 Linux 也包含非自由程式。這些程式旨在在系統啟動時載入到 I/O 設備中,並且它們以長串數字的形式包含在 Linux 的「原始碼」中。因此,維護自由 GNU/Linux 發行版現在也需要維護自由版本的 Linux。
無論您是否使用 GNU/Linux,請不要通過含糊不清地使用「Linux」這個名稱來混淆公眾。Linux 是核心,是系統的重要主要組件之一。整個系統基本上是 GNU 系統,加入了 Linux。當您談論這種組合時,請稱其為「GNU/Linux」。
如果您想在「GNU/Linux」上建立連結以供進一步參考,則此頁面和 https://gnu.dev.org.tw/gnu/thegnuproject.html 是不錯的選擇。如果您提及 Linux(核心),並想添加連結以供進一步參考,則 https://foldoc.org/linux 是一個不錯的 URL。
後記
除了 GNU 之外,另一個專案也獨立製作了一個自由類 Unix 作業系統。這個系統被稱為 BSD,它是在加州大學柏克萊分校開發的。它在 80 年代是非自由的,但在 90 年代初期變為自由的。今天存在的自由作業系統[4]幾乎可以肯定是 GNU 系統的變體,或某種 BSD 系統。
人們有時會問,BSD 是否也像 GNU/Linux 一樣是 GNU 的一個版本。BSD 開發人員受到 GNU 計劃的範例啟發,使其程式碼成為自由軟體,GNU 活動家的明確呼籲也有助於說服他們,但該程式碼與 GNU 的重疊很少。今天的 BSD 系統使用一些 GNU 程式,就像 GNU 系統及其變體使用一些 BSD 程式一樣;然而,從整體上看,它們是兩個獨立發展的不同系統。BSD 開發人員沒有編寫核心並將其添加到 GNU 系統中,像 GNU/BSD 這樣的名稱並不適合這種情況[5]。
註腳
- 這些不起眼但必要的組件包括 GNU 組譯器 (GAS) 和連結器 (GLD),它們現在都是 GNU Binutils 套件、GNU tar 和許多其他組件的一部分。
- 例如,Bourne Again SHell (BASH)、PostScript 直譯器 Ghostscript 和 GNU C 函式庫 不是程式設計工具。GNUCash、GNOME 和 GNU Chess 也不是。
- 例如,GNU C 函式庫。
- 自撰寫本文以來,已經開發了一個幾乎完全自由的類 Windows 系統,但從技術上講,它與 GNU 或 Unix 完全不同,因此它實際上並不影響這個問題。Solaris 的大部分核心已經自由化,但如果您想從中製作一個自由系統,除了替換核心的缺失部分外,還需要將其放入 GNU 或 BSD 中。
- 另一方面,自撰寫本文以來,GNU C 函式庫已被移植到多個版本的 BSD 核心,這使得將 GNU 系統與該核心結合變得簡單明瞭。就像 GNU/Linux 一樣,這些確實是 GNU 的變體,因此被稱為 GNU/kFreeBSD 和 GNU/kNetBSD,具體取決於系統的核心。典型桌面上的一般使用者很難區分 GNU/Linux 和 GNU/*BSD。
更多資訊請參閱GNU/Linux 常見問題以及為何選擇 GNU/Linux?