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 的早期發展歷史進行詳細介紹。
對於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)版的水平。