Linux發展的歷史脈絡

Linux背景詳解

  1. Linux的誕生和發展

       Linux操作系統是UNIX操作系統的一種克隆模式。它誕生於1991年10月5日(這是第一次正式向外公佈時間)。此後藉助Internet,經過全世界各地計算機愛好者的共同努力,現已成爲當今世界上使用最多的一種UNIX類操作系統,並且使用人數還在存猛增長。

       Linux操作系統的誕生、發展和成長過程依賴於以下五個重要支柱:UNIX操作系統、MINIX操作系統、GNU計劃、POSIX標準和Internet。

       目前2017年11月Linux內核版本已經開發到4.14.2版,Linux內核版本號命名的規則:r.x.y
* r:表示目前發佈的內核主版本。
* x:x是偶數表示穩定版本; 若是奇數表示開發中版本。
* y: 修訂版本號,表示修改的次數。

  1. UNIX操作系統的誕生

       UNIX操作系統是美國貝爾實驗室的Ken Thompson和Dennis Ritchine於1969年夏天在DEC PDP-7小型計算機上開發的一個分時操作系統。當時是使用BCPL語言(基本組合編程語言),後經Dennis Ritchie於1972年用移植性很強的C語言進行了改寫,使得UNIX系統在大專院校得到推廣。

  1. MINIX操作系統

       MINIX系統是由Andrew S.Tanenbaum開發的。Tanenbaum在荷蘭阿姆斯特丹的Vrije大學數學與計算機科學系工作,是ACM和IEEE的資深會員(全世界也只有很少的=人是兩會的資深會員)。共發表了100多篇文章和5部計算機著作。

       MINIX是他1987年編制的,主要用於學生學習操作系統的原理。當時該操作系統在大學使用是免費的。對於Linux系統,他後來曾表示對其開發者Linus的稱讚。但他認爲Linux的發展很大的原因是由於他爲了保持MINIX的小型化,能讓學生在一個學期內就能學完,因而沒有接納全世界許多人對MINIX的擴展要求。因此在這樣的前提下Linus編寫了Linux系統。

       作爲一個操作系統,MINIX並不是優秀者,但它同時提供了用C語言和彙編語言編寫的系統源代碼。這是第一次使得有抱負的程序員或黑客能夠閱讀操作系統的源代碼。在當時,這種源代碼是軟件商們一直小心守護的祕密。

  1. GNU計劃

       GNU計劃和自由軟件基金會FSF(the Free Software Foundation)是由Richard M.Stallman於1984年一手創辦的。易在開發一個類似UNIX並且是自由軟件的完整操作系統:GNU系統(GNU是”GNU’s Not UNIX”的遞歸縮寫,他的發音爲“guh-NEW”)。各種使用Linux作爲Linux作爲核心的GNU操作系統正在被廣泛使用。雖然這些系統通常被稱作“Linux”,但是Stallan認爲,嚴格地說,他們應該被稱爲GNU/Linux系統。

       到20世紀90年代初,GNU項目已經開發出許多高質量的免費軟件,其中包括有名的emacs編輯系統、bash shell程序、gcc系列編譯程序、gdb調試程序等等。這些軟件爲Linux操作系統的開發創造了一個合適的環境,是Linux能夠誕生的重要因素。

  1. POSIX標準

       POSIX(Portable Operating System Interface fir Computing Systems)是由IEEE和ISO/IEC開發的一簇標準。該標準基於現有的UNIX實踐的和經驗,描述了操作系統的調用服務接口,用於保證編制的應用程序可以在源代碼一級上在多種操作系統上移植和運作。它是在20世紀80年代一個UNIX用戶組(usr/group)的工作基礎上取得的。該UNIX用戶組原來試圖將AT&T的System V操作系統和Berkeley CSRG的BSD操作系統的調用接口之間的區別重新調和集成。

       在1991年7月3日,Linus在comp.os.minix上提到,他正在蒐集POSIX的資料。其中透露了他正在着手一個操作系統的開發,並且在開發之初已經想到要實現POSIX兼容的問題。

  1. Linux操作系統的誕生

       在1981年,IBM公司推出了享譽全球的微型計算機 IBM PC。在1981~1991年間,MS-DOS操作系統一直是微型計算機操作系統的主宰。此時計算機硬件價格雖然逐年下降,但軟件價格仍然居高不下。當時Apple的 Mac操作系統可以說是性能最好的,但是其天價使得沒人能夠輕易靠近。

       當時的另一個計算機技術陣營就是UNIX世界。但是UNIX操作系統就不僅是價格昂貴的問題了。爲了尋求高利潤率, UNIX經銷商們把價格擡得極高,PC小用戶根本不能靠近它。一度得到Bell Labs許可而能在大學中用於教學的UNIX源代碼也一直被小心地守衛着不許公開。對於廣大的PC用戶,軟件行業的大型供應商們始終沒有給出有效的解決這個問題的手段。

       正在此時,出現了MINIX操作系統,並且有一本描述其設計實現原理的書同時發行。由於Tanenbaum的這本書寫得非常詳細,並且敘述得有條有理,於是幾乎全世界的計算機愛好者都開始看這本書,以期能理解操作系統的工作原理。其中也包括Linux系統的創始者Linus Torvalds。

       當時(1991年),Linus是赫爾辛基大學計算機科學系的二年級學生,也是一個自學的計算機hacker。這個21歲的芬蘭年輕人喜歡鼓搗他的計算機,測試計算機的性能和限制。但當時他所缺乏的就是一個專業級的操作統

       在同一年間,GNU計劃已經開發出了許多工具軟件。其中最受期盼的GNU C編譯器已經出現,但還沒有開發出免費的GNU操作系統。即使是教學使用的MINIX操作系統也開始有了版權,需要購買才能得到源代碼。雖然GNU的操作系統HURD一直在開發之中,但在當時看來不能在幾年內完成。

       爲了能更好地學習計算機知識(或許只是出於興趣),Linus使用聖誕節的壓歲錢和貸款購買了一臺386兼容電腦,並從美國郵購了一套MINIX系統軟件。就在等待MINIX軟件期間,Linus認真學習了有關Intel 80386的硬件知識。爲了能通過Modem撥號連接到學校的主機上,他使用彙編語言並利用80386 CPU的多任務特性編制出一個終端仿真程序。此後爲了將自己一臺老式電腦上的軟件複製到新電腦上,他還爲軟盤驅動器、鍵盤等硬件設備編制出相應的驅動程序。

       通過編程實踐,並在學習過程中認識到MINIX系統的諸多限制(MINIX雖然很好,但只是一個用於教學目的簡單操作系統,而不是一個強有力的實用操作系統),Linus已經有了一些類似於操作系統硬件設備驅動程序的代碼,於是他開始有了編制一個新操作系統的想法。此時GNU計劃已經開發出許多工具軟件,其中最受期盼的GNU C編譯器已經出現。雖然GNU的免費操作系統HURD正在開發中。但Linus已經等不急了。

       從1991年4月份起,他通過修改終端仿真程序和硬件驅動程序,開始編制起自己的操作系統來。剛開始,他的目的很簡單,只是爲了學習Intel 386體系結構保護模式運行方式下的編程技術。但後來Linus卻完全改變了初衷。根據Linus在comp.os.minix新聞組上發佈的消息,我們可以知道他逐步從學習 MINIX系統階段發展到開發自己的Linux系統的過程。

       Linus第一次向comp.os.minix投遞消息是在1991年3月29日。所發帖子的題目是“gcc on minix-386 doesn’t optimize”,是有關gcc編譯器在MINIX-386系統上運行優化的問題(MINIX-386是一個由Bruce Evans改進的利用Intel 386特性的32位MINIX系統)。由此可知,Linus在1991年初期就已經開始深人研究了MINIX系統,並在這段時間有了改進MINIX操作系統的思想。在進一步學習MINIX系統之後,這個想法逐步演變成設計一個基於Intel 80386體系結構的新操作系統的構思。

       他在回答有人提出MINIX上的一個問題時,所說的第一句話就是“閱讀源代碼”。他認爲答案就在源程序中。這也說明了對於學習系統軟件來說,我們不光需要懂得系統的工作基本原理,還需要結合實際系統,學習實際系統的實現方法。因爲理論畢竟是理論,其中省略了許多枝節,而這些枝節問題雖然沒有太高的理論含量,卻是一個系統必要的組成部分,就像麻雀身上的一根羽毛。

       從1991年4月份開始,Linus幾乎花費了全部時間研究MINIX-386系統(Hacking the kernrl),並且嘗試着移植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系統的開發,並且已經想到要實現與POSIX兼容的問題了。

       在Linus發佈的另一個消息中(1991年8月25日,comp.os.minix),他向所有MININ用戶詢問“你最想在MINIX系統中見到什麼?”(“What would you like to see in minix?”),在該消息中他首次透露出正在開發一個(免費的)386(486)操作系統,並且說只是興趣而已,代碼不會很大,也不會像GNU的那樣專業。希望大家反饋一些對於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的新版本發佈時都選擇了這個日子。

  1. Linux操作系統版本變遷

       Linux操作系統從誕生到1.0版正式出現,共發佈了下表中所示的一些主要版本。Linus在2003年9月份開始學習使用版本管理工具BitKeeper時又把以上這些1.0之前的所有版本瀏覽了一遍。實際上,Linux系統並沒有0.00這個版本,但是自從Linus在自己的80386兼容機上嘗試在時鐘中斷控制下兩個任務相互切換運行並獲得成功時,在某種程度上更增強了他開發自己操作系統的想法。因此我們也列爲一個版本。Linux0.01版內核於1991年9月17日編制完成。但是Linus還根本沒有版權意識,所以僅在該版的include/string.h文件中出現一次版權所有信息。該版本內核的鍵盤驅動程序僅硬編碼進芬蘭語代碼,因此也只支持芬蘭鍵盤。也只支持8MB物理內存。由於後Linus一次操作失誤,導致隨後的0.02、0.03版內核源代碼被破壞丟失。

  • 表內核的主要版本:
版本號 發佈/編制日期 說明
0.00 1991.2~4 兩個進程,分別在屏幕上顯示“AAA…”和“BBB…”(注:沒有發佈)
0.01 1991.9.17 第一個正式向外公佈的Linux內核版本。多線程文件系統、分段和分頁內存管理。還不包含軟盤驅動程序
0.02 1991.10.5 該版本以及0.03版是內部版本,目前己經無法找到。特點同上
0.10 1991.10 由 Ted Ts’o發佈的Linux內核版本。增加了內存分配庫函數。在boot目錄中含有一個把as86彙編語法轉換成gas彙編語法的腳本程序
0.12 1992.1.15 主要增加了數學協處理器的軟件模擬程序。增加了作業控制、虛擬控制檯、文件符號鏈接和虛擬內存對換(swapping)功能
0.95.x (即0.13) 1992.3.8 加人虛擬文件系統支持,但還是隻包含一個MINIX文件系統。增加了登錄功能。改善了軟盤驅動程序和文件系統的性能。改變了硬盤命名和編號方式。原命名方式與MINIX系統的相同,此時改成與現在Linux系統的相同。支持CDROM
0.96.x 1992.5.12 開始加人UNIX socket支持。增加了 ext文件系統測試程序。 I驅動程序被正式加人內核。軟盤類型自動識別。改善了串行驅動、高速緩衝、內存管理的性能,支持動態鏈接庫,並開始能運行 x· Wind“程序。原彙編語言編制的鍵盤驅動程序已用 c重寫。與0,95內核代碼比較有很大的修改
0.97.x 1992.8.1 增加了對新的SCSI驅動程序的支持;動態高速緩衝功能; msdos和ext文件系統支持;總線鼠標驅動程序。內核被映射到線性地址3GB開始處
0.98.x 1992.9.28 改善對TCP/IP(0.8.1)網絡的支持,糾正了extfs的錯誤。重寫了內存管理部分(mm),每個進程有4GB邏輯地址空間(內核佔用1GB)。從0.98.4開始每個進程可同時打開256個文件(原來是32個),並且進程的內核堆棧獨立使用一個內存頁面
0.99.x 1992.12.13 重新設計進程對內存的使用分配,每個進程有4GB線性空間
1.0 1994.3.14 第一個正式版本

       現存的010版內核代碼是 Ted Ts’o當時保存下來的版本, Linus自己的也已經丟失。這個版本要比前幾個版本有很大的進步,在這個版本內核的系統上已經能夠使用GNU編譯內核,並且開始支持加載/卸載(mount/umount)文件系統的操作。從這個內核版本開始,Linus爲每個文件都添加了版權信息:“(C)1991 Linus Torvalds”。該版本的其他一些變化還包括:把原來引導程序boot/boot.s分割成boot/bootsect.s和boot/setup.s兩個程序;最多支持16M物理內存;爲驅動程序和內存管理程序分別建立了自己的子目錄;增加了軟盤驅動程序;支持文件預讀操作;支持dev/port和dev/null設備;重寫了kemel/signal.c代碼,添加了對sigaction()的支持等。

       相對0.10版來說,Linux0.11版的改動較小。但這個版本也是第一個比較穩定的版本,並且開始有其他人員參與內核開發。這個版本中增添的主要功能有:執行程序的需求加載;啓動時可執行/etc/rc初始文件;建立起數學協處理器仿真程序框架程序結構;Ted Ts’o增加了對腳本程序的處理代碼;Galen Hunt添加了對多種顯示卡的支持;John T.Kohl修改了kernel/console.c程序,使控制檯支持鳴叫功能和 KILL字符;提供了對多種語言鍵盤的支持。

       Linux012是Linus比較滿意的內核版本,也是一個更穩定的內核。在1991年的聖誕節期間,他編制完成了虛擬內存管理代碼,從而在只有2MB內存的機器上也能使用像gcc這種“大型”軟件。這個版本讓Linus覺得發佈1.0內核版本已經不是什麼遙遙無期的事了,因此他立刻把下一個版本(013版)提升爲0.95版。Linus這樣做的另一個意思是讓大家不要覺得離1.0版還很遙遠。但是由於0.95版發佈得太倉促,其中還包含較多錯誤,因此0.95版剛發佈時曾有較多Linux愛好者在使用中遇到問題。當時Linus覺得就好像遇到了一個大災難。不過此後他接受了這次的教訓,以後每次發佈新的內核版本時,他都會進行更周密的測試,並且讓幾個好朋友先試用後纔會正式公佈出來。0.12版內核的主要變化之處有:Ted Ts’o添加了終端信號處理支持;啓動時可以改變使用的屏幕行列值;改正了一個文件IO引起的競爭條件;增加了對共享庫的支持,節省了內存使用量;符號連接處理;刪除目錄系統調用;Peter MacDonald實現了虛擬終端支持,使得Linux要比當時的某些商業版UNIX還要更勝一籌;實現對select()函數的支持,這是Peter MacDonald根據一些人爲MINIX提供的補丁程序修改而成的,但是MINIX卻沒有采納這些補丁程序;可重新執行的系統調用;Linus編制完成數學協處理器仿真代碼等。

       0.95版是第一個使用GNU GPL版權的Linux內核版本。該版本實際上有3個子版本,由於1992年3月8日發佈第1個0.95版時遇到了一些問題,因此此後不到10天(3月17日)就立刻發佈了另一個0.95a版,並在1個月後(4月9日)又發佈了0.95c+版本。該版本的最大改進之處是開始採用虛擬文件系統VFS結構。雖然當時仍然只支持MINIX文件系統,但是程序結構已經爲支持多種文件系統進行了大範圍調整。有關MINIX文件系統的代碼被放進了單獨一個MINIX子目錄中。0.95版內核的其他一些變化部分有:增加了登錄界面;Ross Biro添加了調試代碼(ptrace);軟盤驅動器磁道緩衝;非阻塞管道文件操作;系統重啓(Ctrl-Alt-Del);swapon()系統調用,從而可以實時選擇交換設備;支持遞歸符號鏈接;支持4個串行端口;支持硬盤分區;支持更多種類鍵盤;James Wiegand編制了最初的並行口驅動程序等。

       另外,從0.95版開始,對內核的許多改進工作(提供補丁程序)均以其他人爲主了,而Linus的主要任務變成對內核的維護和決定是否採用某個補丁程序。到現在爲止,最新的內核版本是2017年11月24日公佈的4.14.2版。在4.14.2版本中包括65000多個文件,其源代碼壓縮包linux-4.14.2.tar.xz文件有97MB。

  1. Linux名稱由來

       Linux操作系統剛開始時並沒有被稱作Linux,Linus給他的操作系統取名爲FREAX,其含義是怪誕的、怪物、異想天開的意思。在他將新的操作系統上載到ftp.funet.fi服務器上時,管理員Air Lemke很不喜歡這個名稱。他認爲既然是Linus的操作系統就取其諧音Linux作爲該操作系統的名稱吧,於是linux這個名稱就開始流傳下來。

發佈了169 篇原創文章 · 獲贊 268 · 訪問量 117萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章