## 第?48?章?Linux
**目錄**
[Linux 誕生和發展](ch48.html#id3167675)
[UNIX 操作系統的誕生](ch48s02.html)
[MINIX 操作系統](ch48s03.html)
[GNU 計劃](ch48s04.html)
[POSIX 標準](ch48s05.html)
[Linux 操作系統的誕生](ch48s06.html)
[Linux 操作系統版本的變遷](ch48s07.html)
[Linux 名稱的來由](ch48s08.html)
[附錄:Linux 發行版分支圖](ch48s09.html)
## Linux 誕生和發展
作者:不詳
Linux 操作系統是UNIX 操作系統的一種克隆系統。它誕生于1991 年的10 月5 日(這是第一次正式向外公布的時間)。以后借助于Internet 網絡,并經過全世界各地計算機愛好者的共同努力下,現已成為今天世界上使用最多的一種UNIX 類操作系統,并且使用人數還在迅猛增長。Linux 操作系統的誕生、發展和成長過程始終依賴著以下五個重要支柱:UNIX 操作系統、MINIX 操作系統、GNU 計劃、POSIX 標準和Internet 網絡。
下面主要根據這五個基本線索來追尋一下Linux 的開發歷程,它的醞釀過程,最初的發展經歷。首先分別介紹其中的四個基本要素(UNIX、MINIX、GNU 和POSIX,Internet 的重要性顯而易見,所以不再贅述),然后根據Linux 的創始人Linus Toravlds 從對計算機感興趣而自學計算機知識,到心里開始醞釀編制一個自己的操作系統,到最初Linux 內核0.01 版公布,以及從此如何艱難地一步一個腳印地在全世界hacker 的幫助下最后推出比較完善的1.0 版本這段時間的發展經過,也即對Linux 的早期發展歷史進行詳細介紹。
## UNIX 操作系統的誕生
Linux 操作系統是UNIX 操作系統的一個克隆版本。UNIX 操作系統是美國貝爾實驗室的Ken.Thompson和Dennis Ritchie 于1969 年夏在DEC PDP-7 小型計算機上開發的一個分時操作系統。當時Ken Thompson 為了能在閑置不用的PDP-7 計算機上運行他非常喜歡的星際旅行(Space travel)游戲,在1969 年夏天乘他夫人回家鄉加利福尼亞渡假期間,在一個月內開發出了unix 操作系統的原型。當時使用的是BCPL 語言(基本組合編程語言),后經Dennis Ritchie 于1972 年用移植性很強的C 語言進行了改寫,使得UNIX 系統在大專院校得到了推廣。
## MINIX 操作系統
MINIX 系統是由Andrew S. Tanenbaum(AST)開發的。AST 是在荷蘭Amsterdam 的Vrije 大學數學與計算機科學系統工作,是ACM 和IEEE 的資深會員(全世界也只有很少人是兩會的資深會員)。共發表了100 多篇文章,5 本計算機書籍。AST 雖出生在美國紐約,但是是荷蘭僑民(1914 年他的祖輩來到美國)。他在紐約上的中學、M.I.T上的大學、加洲大學Berkeley 分校念的博士學位。由于讀博士后的緣故,他來到了家鄉荷蘭。從此就與家鄉一直有來往。后來就在Vrije 大學開始教書、帶研究生了。荷蘭首都Amsterdam 是個常年陰雨綿綿的城市,而對于AST 來說,這最好不過了,因為這樣他就可以待在家里擺弄他的計算機了。MINIX 是他1987年編制的,主要用于學生學習操作系統原理。到91年時版本是1.5。目前主要有兩個版本在使用: 1.5 版和2.0 版,當時該操作系統在大學使用是免費的,但其它用途不是,當然目前都已經是免費的,可以從許多FTP上下載。
對于Linux 系統,他表示對其開發者Linus 的稱贊。但他認為Linux 的發展有很大原因是因為他為了保持minix 的小型化,能讓學生在一個學期內就能學完,而沒有接納全世界許多人對Minix 的擴展要求。因此這激發了Linus 編寫Linux。Linus 正好抓住了這個好時機。
作為一個操作系統,MINIX 并不是優秀者,但它同時提供了用C 語言和匯編語言寫的系統源代碼。這是第一次使得有抱負的程序員或hacker 能夠閱讀操作系統的源代碼,在當時這種源代碼是軟件商一直小心地守護著的。
## GNU 計劃
GNU 計劃和自由軟件基金會(the Free Software Foundation - FSF)是由Richard M. Stallman 于1984 年一手創辦的。旨在開發一個類似 Unix、并且是自由軟件的完整操作系統:GNU 系統。(GNU 是"GNU's Not Unix"的遞歸縮寫,它的發音為"guh-NEW"。)各種使用linux 作為核心的GNU 操作系統正在被廣泛的使用。雖然這些系統通常被稱作"Linux",但是嚴格地說,它們應該被稱為GNU/Linux 系統。
到上世紀90 年代初,GNU 項目已經開發出許多高質量的免費軟件,其中包括有名的emacs 編輯系統、bash shell 程序、gcc 系列編譯程序、gdb 調試程序等等。這些軟件為Linux 操作系統的開發創造了一個合適的環境,是Linux 能夠誕生的基礎之一。以至于目前許多人都將Linux 操作系統稱為"GNU/Linux"操作系統。
## POSIX 標準
POSIX(Portable Operating System Interface for Computing Systems)是由IEEE 和ISO/IEC 開發的一簇標準。該標準是基于現有的UNIX 實踐和經驗,描述了操作系統的調用服務接口,用于保證編制的應用程序可以在源代碼一級上在多種操作系統上移植運行。它是在1980 年早期一個UNIX 用戶組(usr/group)的早期工作的基礎上取得的。該UNIX 用戶組原來試圖將AT&T 的系統V 和Berkeley CSRG的BSD 系統的調用接口之間的區別重新調和集成,從而于1984 年產生了/usr/group 標準。1985 年,IEEE操作系統技術委員會標準小組委員會(TCOS-SS)開始在ANSI 的支持下責成IEEE 標準委員會制定有關程序源代碼可移植性操作系統服務接口正式標準。到了1986 年4 月,IEEE 就制定出了試用標準。第一個正式標準是在1988 年9 月份批準的(IEEE 1003.1-1988),也既以后經常提到的POSIX.1 標準。
1989 年POSIX 的工作被轉移至ISO/IEC 社團,并由15 工作組繼續將其制定成ISO 標準。到1990 年,POSIX.1 與已經通過的C 語言標準聯合,正式批準為IEEE 1003.1-1990(也是ANSI 標準)和ISO/IEC 9945-1:1990 標準。
POSIX.1 僅規定了系統服務應用程序編程接口(API),僅概括了基本的系統服務標準,因此期望對系統的其它功能也制定出標準。這樣IEEE POSIX 的工作就開始展開了。在1990 年,剛開始有十個批準的計劃在進行,有近300 多人參加每季度為期一周的會議。著手的工作有命令與工具標準(POSIX.2)、測試方法標準(POSIX.3)、實時API(POSIX.4)等。到了 1990 年上半年已經有25 個計劃在進行,并且有16 個工作組參與了進來。與此同時,還有一些組織也在制定類似的標準,如X/Open,AT&T,OSF 等。
在90 年代初,POSIX 標準的制定正處在最后投票敲定的時候,那是1991-1993 年間。此時正是Linux剛剛起步的時候,這個UNIX 標準為Linux 提供了極為重要的信息,使得Linux 的能夠在標準的指導下進行開發,能夠與絕大多數UNIX 系統兼容。在最初的Linux 內核代碼中(0.01 版、0.11 版)就已經為Linux與POSIX 標準的兼容做好了準備工作。在0.01 版的內核/include/unistd.h 文件中就已經定義了幾個有關POSXI 標準要求的常數符號,并且在注釋中就寫到"ok,這也許是個玩笑,但我正在著手研究它呢"。
1991 年7 月3 日在comp.os.minix 上發布的post 上就已經提到了正在搜集POSIX 的資料。(當然此時還不存在Linux 這個名稱,當時Linus 的腦子里想的可能是FREAX ,FREAX 的英文含義是怪誕的、怪物、異想天開等)。其中透露了他正在進行Linux 系統的開發,并且在Linux 最初的時候已經想到要實現與POSIX(UNIX 的國際標準)的兼容問題了。
## Linux 操作系統的誕生
1981 年IBM 公司推出享譽全球的微型計算機IBM PC。在1981-1991 年間,MS-DOS 操作系統一直是微型計算機上操作系統的主宰。此時計算機硬件價格雖然逐年下降,但軟件價格仍然是居高不下。當時Apple 的MACs 操作系統可以說是性能最好的,但是其天價沒人能夠輕易靠近。
當時的另一個計算機技術陣營是Unix世界。但是Unix操作系統就不僅是價格貴的問題了。為了尋求高利率,Unix經銷商將價格抬得極高,PC小用戶就根本不能靠近它。曾經一度受到Bell Labs的許可而可以在大學中用于教學的UNIX源代碼一直被小心地守衛著不需公開。對于廣大的PC用戶,軟件行業的大型供應商始終沒有給出有效的解決該問題的手段。正在此時,出現了MINIX操作系統,并有一本詳細的書本描述它的設計實現原理。由于AST的書寫的非常詳細,并且敘述有條有理,幾乎全世界的計算機愛好者都在看這本書以理解操作系統的工作原理。其中也包括Linux系統的創始者Linus Benedict Torvalds。當時(1991年),Linus Benedict Torvalds 是赫爾辛基大學計算機科學系的二年級學生,也是一個自學hacker。這個21 歲的芬蘭年輕人喜歡鼓搗計算機,測試計算機的能力和限制。但當時缺乏的是一個專業級的操作系統。MINIX 雖然很好,但只是一個用于教學目的簡單操作系統,而不是一個強有力的實用操作系統。
到1991 年,GNU 計劃已經開發出了許多工具軟件。最受期盼的Gnu C 編譯器已經出現,但還沒有開發出免費的GNU 操作系統。即使是MINIX 也開始有了版權,需要購買才能得到源代碼。而GNU 的操作系統HURD 一直在開發之中,但并不能在幾年內完成。對于Linus 來說,已經不能等待了。從1991 年4 月份起,他開始醞釀并著手編制自己的操作系統。剛開始,他的目的很簡單,只是為了學習Intel 386 體系結構保護模式運行方式下的編程技術。但后來Linux 的發展卻完全改變了初衷。
1991 年初,Linux 開始在一臺386sx 兼容微機上學習minix 操作系統。通過學習,他逐漸不能滿足minix 系統的現有性能,并開始醞釀開發一個新的免費操作系統。根據Linus 在comp.os.minix 新聞組上發布的消息,我們可以知道他逐步從學習minix 系統到開發自己的Linux 的過程。
Linus 第1 次向comp.os.minix 投遞消息是在1991 年3 月29 日。題目是"gcc on minix-386 doesn't optimize",是有關gcc 編譯器在minix-386 上運行的優化問題,由此可知,Linus 在1991 年的初期已經開始深入研究了minix 系統,并在這段時間有了改進minix 操作系統的思想,而且在進一步學習minix系統中,逐步演變為想自己重新設計一個基于Intel 80386 體系結構的新操作系統。他在回答有人提出minix 上的一個問題時,所說的第一句話是"閱讀源代碼"("RTFSC (Read the Fucking Source Code :-)")。他認為答案就在源程序中。這也說明了對于學習系統軟件來說,你不光需要懂得系統的工作基本原理,還需要結合實際系統,學習實際系統的實現方法。因為理論畢竟是理論,其中省略了許多枝節,而這些枝節問題雖然沒有太多的理論含量,但卻是一個系統必要的組成部分,就像麻雀身上的一根羽毛。
從1991 年的4 月份開始,Linus 幾乎花了全部時間研究386-minix 系統(hack the kernel),并且嘗試著移植GNU 的軟件到該系統上(GNU gcc、bash、gdb 等)。并于4 月13 日在comp.os.minix 上發布說自己已經成功地將bash 移植到了minix 上,而且已經愛不釋手、不能離開這個shell 軟件了。
第一個與Linux 有關的消息是在1991 年7 月3 日在comp.os.minix 上發布的(當然此時還不存在Linux 這個名稱,當時Linus 的腦子里想的可能是FREAX ,FREAX 的英文含義是怪誕的、怪物、異想天開等)。其中透露了他正在進行Linux 系統的開發,并且在Linux 最初的時候已經想到要實現與POSIX(UNIX 的國際標準)的兼容問題了。
在Linus 的下一發布的消息中(1991 年8 月25 日 comp.os.minix),他向所有minix 用戶詢問"What would you like to see in minix?"("你最想在minix 中見到什么?"),在該消息中他首次透露出正在開發一個(免費的)386(486)操作系統,并且說只是興趣而已,代碼不會很大,也不會象GNU 的那樣專業。開發免費操作系統這個想法從4 月份就開始醞釀了,希望大家反饋一些對于minix 系統中喜歡那些特色不喜歡什么等信息,由于實際的和其它一些原因,新開發的系統剛開始與minix 很象(并且使用了minix 的文件系統)。并且已經成功地將bash(1.08 版)和gcc(1.40 版)移植到了新系統上,而且在過幾個月就可以實用了。
最后,Linus 申明他開發的操作系統沒有使用一行minix 的源代碼;而且由于使用了386 的任務切換特性,所以該操作系統不好移植(沒有可移植性),并且只能使用AT 硬盤。對于Linux 的移植性問題,Linus 當時并沒有考慮。但是目前Linux 幾乎可以運行在任何一種硬件體系結構上。
到了1991 年的10 月5 日,Linus 在comp.os.minix 新聞組上發布消息,正式向外宣布Linux 內核系統的誕生(Free minix-like kernel sources for 386-AT)。這段消息可以稱為Linux 的誕生宣言,并且一直廣為流傳。因此10 月5 日對Linux 社區來說是一個特殊的日子,許多后來Linux 的新版本發布時都選擇了這個日子。所以RedHat 公司選擇這個日子發布它的新系統也不是偶然的。
## Linux 操作系統版本的變遷
* 0.00 (1991.2-4?) 兩個進程分別顯示AAA BBB
* 0.01 (1991.9?)第一個正式向外公布的Linux 內核版本。
* 0.02 (1991.10.5)該版本以及0.03 版是內部版本,目前已經無法找到。
* 0.03 (1991.10.5)
* 0.10 (1991.10)由Ted Ts'o 發布的Linux 內核版本。
* 0.11 (1991.12.8)基本可以正常運行的內核版本。
* 0.12 (1992.1.15)主要加入對數學協處理器的軟件模擬程序。
* 0.95 (0.13) (1992.3.8) 開始加入虛擬文件系統思想的內核版本。
* 0.96 (1992.5.12)開始加入網絡支持和虛擬文件系統VFS。
* 0.97 (1992.8.1)
* 0.98 (1992.9.29)
* 0.99 (1992.12.13)
* 1.0 (1994.3.14)
* 1.20 (1995.3.7)
* 2.0 (1996.2.9)
* 2.20 (1999.1.26)
* 2.40 (2001.1.4)
* 2.60 (2003.12.17)
將Linux 系統0.13 版內核直接改稱0.95 版,Linus 的意思是讓大家不要覺得離1.0 版還很遙遠。同時,從0.95 版開始,對內核的許多改進之處(補丁程序的提供)均以其他人為主了,而Linus 的主要任務開始變成對內核的維護和決定是否采用某個補丁程序。
## Linux 名稱的來由
Linux 操作系統剛開始時并沒有被稱作Linux,Linus 給他的操作系統取名為FREAX,其英文含義是怪誕的、怪物、異想天開等意思。在他將新的操作系統上載到ftp.funet.fi 服務器上時,管理員Ari Lemke很不喜歡這個名稱。他認為既然是Linus 的操作系統就取其諧音Linux 作為該操作系統的目錄吧,于是Linux 這個名稱就開始流傳下來。
在Linus 的自傳《Just for Fun》一書中,Linus 解釋說:"坦白地說,我從來沒有想到過要用Linux 這個名稱發布這個操作系統,因為這個名字有些太自負了。而我為最終發布版準備的是什么名字呢?Freax。實際上,內核代碼中某些早期的Makefile - 用于描述如何編譯源代碼的文件 - 文件中就已經包含有"Freax"這個名字了,大約存在了半年左右。但其實這也沒什么關系,在當時還不需要一個名字,因為我還沒有向任何人發布過內核代碼。而Ari Lemke,他堅持要用自己的方式將內核代碼放到ftp 站點上,并且非常不喜歡Freax 這個名字。他堅持要用現在這個名字(Linux),我承認當時我并沒有跟他多爭論。但這都是他取的名字。所以我可以光明正大地說我并不自負,或者部分坦白地說我并沒有本位主義思想。但我想好吧,這也是個好名字,而且以后為這事我總能說服別人,就象我現在做的這樣。"-- Linus Torvalds《Just for fun》第84-88 頁。
通過上述說明,我們可以對上述Linux 的五大支柱歸納如下:
* UNIX 操作系統 -- UNIX 于1969 年誕生在Bell 實驗室。Linux 就是UNIX 的一種克隆系統。UNIX的重要性就不用多說了。
* MINIX 操作系統 -- Minix 操作系統也是UNIX 的一種克隆系統,它于1987 年由著名計算機教授Andrew S. Tanenbaum 開發完成。由于MINIX 系統的出現并且提供源代碼(只能免費用于大學內)在全世界的大學中刮起了學習UNIX 系統旋風。Linux 剛開始就是參照Minix 系統于1991 年才開始開發。
* GNU 計劃-- 開發Linux 操作系統,以及Linux 上所用大多數軟件基本上都出自GNU 計劃。Linux只是操作系統的一個內核,沒有GNU 軟件環境(比如說bash shell),則Linux 將寸步難行。
* POSIX 標準 -- 該標準在推動Linux 操作系統以后朝著正規路上發展起著重要的作用。是Linux前進的燈塔。
* INTERNET -- 如果沒有Intenet 網,沒有遍布全世界的無數計算機駭客的無私奉獻,那么Linux最多只能發展到0.13(0.95)版的水平。
## 附錄:Linux 發行版分支圖

- 開源世界旅行手冊
- 授權
- 致謝
- 序言
- 更新紀錄
- 導讀
- 如何寫作科技文檔
- 部分?I.?氣候
- 第?1?章?GUI? CLI?
- 第?2?章?UNIX 縮寫風格
- 第?3?章?版本號的迷霧
- 第?4?章???Vim 還是 Emacs
- 第?5?章???DocBook 還是 TeX
- 第?6?章?完全用 Gnu/Linux 工作
- 第?7?章?病毒
- 第?8?章?磁盤 分區
- 第?9?章?文件系統
- 第?10?章???發行版介紹
- 第?11?章???編程語言
- 第?12?章?無根的根:無名師的 Unix 心傳
- 部分?II.?地理
- 第?13?章?基礎知識
- 第?14?章?命令系統
- 第?15?章?基本系統
- 第?16?章?軟件管理
- 第?17?章?核心工具集
- 第?18?章?編譯工具鏈
- 第?19?章?圖形界面
- 第?20?章?國際化
- 第?21?章???內核
- 第?22?章?Grub
- 第?23?章?服務器
- 第?24?章?Vim 編輯器
- 第?25?章?Emacs 入門
- 第?26?章?正則表達式
- 第?27?章?docbook 指南
- 第?28?章?Git 版本控制系統
- 第?29?章?ConTeXt 入門指南
- 部分?III.?景觀
- 第?30?章?終極 Shell -- ZSH
- 第?31?章?完美工作站 Archlinux
- 第?32?章?組織你的意念:Emacs org mode
- 第?33?章???Zsh+screen
- 第?34?章???gentoo stage3
- 第?35?章???硬件問題
- 第?36?章???網絡設置
- 第?37?章???自制 LiveCD
- 第?38?章?awesome
- 第?39?章?openbox 工作環境
- 第?40?章???Emacs muse
- 第?41?章???寫作工具鏈
- 第?42?章?使用 lftp
- 第?43?章???Firefox 使用技巧
- 第?44?章???FVWM
- 部分?IV.?地質
- 第?45?章?Unix
- 第?46?章???Gnu
- 第?47?章?軟件業自由之神——Richard Stallman
- 第?48?章?Linux
- 第?49?章?GNOME與KDE的戰爭
- 第?50?章???Vim Emacs
- 第?51?章???年代紀
- 第?52?章?我的選擇
- 第?53?章???補遺