1. 程式人生 > >初遇林納斯(Linux)——Linux歷史

初遇林納斯(Linux)——Linux歷史

  首先糾正一下半年來的錯誤讀法,Linux:lin-na-si,不是lin-niu-ke-si;GNU:ge-nu;GUI:gu-yi。
  這篇部落格主要是在看了一些Linux學習視訊之後來總結敘述一下Linux的歷史,普及一下常識。當然,只是儘可能準確,有錯誤歡迎指出。
  在上世紀60年代,雖然此時第一臺電子計算機問世不久(1946年2月14日在費城開始執行的ENIAC計算機),但是電子計算機的超強計算能力給當時社會所帶來的影響卻是十分廣泛的。在那個年代,一臺計算機的價格昂貴,並且體積龐大,在普通民眾群體中是十分稀有的資源。後來麻省理工學院(MIT)開發了分時作業系統,也就是一個大型主機提供多個終端機連結,實現多個使用者在某個時間段內分別使用主機的CPU資源。當然,這種方式在CPU頻率很高的前提下並不會給使用者帶來為了使用計算機排隊的感覺。不過這種終端機只能是個IO裝置,並且限於硬體和技術的發展水平,在當時一個比較先進的主機最多也就能支援30臺左右的終端機。
  為了充分利用主機資源,實現一個主機同時支援300終端機工作的這麼一個目的,在1965年,貝爾實驗室(Bell)、麻省理工學院(MIT)和通用電氣公司(GE)三家巨頭公司共同發起了一個名為Multics的專案,這在當時是如此興師動眾的一個工程,三家巨頭各自出動了一批優秀的年輕人才。經過幾年的努力,Multics的基本功能實現了,可以支援多程式、多使用者,不過就算在大型機上面執行,效能仍然不怎麼樣。在基本功能完成後,三家都沒有停止這個專案的意思,繼續在為Multics延展一些功能。又過了一段時期,失去目標的Multics專案不再一如當前的吸引人,所以GE、BELL相繼退出,只剩了MIT仍然在繼續。不過Multics仍然是成功了的,據說福特公司使用曾購買使用Multics,一直執行到2000年以後才下線。
  Bell退出之後,當初為Multics招來的許多工程師就空閒了,其中有個叫Ken Thompson的年輕人 ,他曾經負責在Multics上面開發名為Space Travel這麼一款遊戲。在退出之後,由於無法再免費使用Multics來繼續他的遊戲開發,他就申請去購買一套Multics裝在機器上面。在1972年左右,市面上流行的主機是PDP-11,由DEC公司生產的,是一款小型機,屬於VAX系列。當時一臺PDP-11數萬美元。理所當然,Ken的申請被拒絕了。不過流浪在Bell的期間他發現了一臺老舊沒人用的PDP-7,雖然跨了四代(跨四代對電腦什麼概念不必多言),不過還好能用。但是限於當時的Multics是用匯編語言所寫,對硬體的依賴程度還是非常高的,所以Ken必須要自己開發一套核心來跑他的遊戲。於是Ken憑藉隊此前的Multics的記憶,花了四個星期寫了一套核心,並且還成功的跑起了他的遊戲。Ken就向實驗室裡的同事炫耀他的遊戲,然而沒人看好他介面醜陋的遊戲,大家倒是對他所開發的那套系統十分感興趣。那套系統十分小巧,被實驗室裡的人稱為UNICS,後來才改稱為UNIX。此後的一年,出色的效能使得UNICS風靡Bell。不過同樣的道理,UNICS是用匯編語言開發的,跟硬體平臺緊密結合,在不同的硬體架構的電腦之間移植非常困難。為了扭轉劣勢。這時Bell實驗室裡的另外一名叫做Dennis M.Ritchis主動找到Ken,表示可以用高階語言重新開發UNICS,這樣用編譯器在不同的電腦上編譯就能實現系統移植。兩人不謀而合,立即著手對當時的B語言改進,通過引入靜態變數,指標等一堆東西之後,B語言也升級成了赫赫有名的、廣為流傳的C語言。繼而倆人用C語言改寫了UNIX,最後發行出了UNIX正式版本。值得一提的是由於高階語言的一些特性(比如通過結合一些額外的機制,彌合多種硬體之間的不同),使得相對於組合語言執行效率低了大概30%。在硬體速度相對慢的時代,這是非常大膽的舉動。不過這也是倆人預見以後硬體速度的提升肯定會日新月異,果不其然,現在的高階語言的效率問題在電腦平臺上幾乎可以忽略了。
  UNIX發行之後,倆人聯合署名在在美國計算機通訊雜誌上面發表了一篇論文,來宣傳UNIX。這樣一來,很多的高校和科研機構都希望能獲得一份原始碼。由於Bell屬於AT&T,在美國反壟斷法的規定中,AT&T是不能銷售除了電報電話之外的任何產品的,並且在別人需要的時候要無償提供。這樣很多著名的大學包括伯克利分校都獲得了UNIX的原始碼。在有了這麼突出的貢獻之後,Ken獲得了年休的機會,於是藉此機會,他在1976年時去伯克利分校任教。在伯克利分校有個很厲害的研究生叫Bill Joy,他成立了一個叫BSRG的團體,專門是改進UNIX,修復bug,加入些新功能之類的。事實上在Ken加入之後,伯克利分校幾乎成為UNIX研究領域的領頭羊。
  隨著研究的進行,後來美國軍方網路平臺需要一套傳輸資料的報文協議,軍方不想在封閉的系統平臺上面開發這一套協議,所以就把這個任務交給BSRG團隊。BSRG團隊在加入包括擁塞控制等一些列機制之後,再柔和進UNIX很多新功能,將研發結果打包發行,並稱為BSD(伯克利系統發行版),開始了賣系統。在這之後不久,Bell被賣給另一家公司,看到BSRG賣UNIX掙了很多錢,Bell也迫不及待開始打包發行UNIX,並且以40000美元一個授權的價格,也掙了一大筆錢。後來兩家為了UNIX正統之爭開始打官司,一打就是十年。導致這段時間UNIX的研究陷入停頓狀態。起初的UNIX只能在PDP系列上執行,由於當時PC機上的Inter晶片介面醜陋不堪,效能也不好,所以沒人來將UNIX改造使其能執行在PC機上。
  後來美國一個教授,開發了CP/M,售價大概兩三萬美元,當時的PC機也是售價兩三萬,使得個人能買一臺能用的計算機非常昂貴,所以PC機的銷量並不好。IBM和當時的康柏公司就迫切一個解決方案。在1981年美國的西雅圖,比爾蓋茨成立了微軟公司,最初公司一共3個人以賣basic編譯器和包裝發行UNIX為主。公司成立不久之後,在比爾蓋茨的好友艾倫的一個好友所在的公司,有一個程式設計師寫了個在PC機上的小系統。於是比爾蓋茨非常敏銳的捕捉到這個商機,利用他母親IBM公司董事會董事的關係,找到IBM董事長沃森,說有這麼一個系統可以賣給IBM公司,不過他只是賣給沃森版權,也就是裝一個這樣的系統只要給比爾蓋茨幾美元就行了。沃森當即就同意了。比爾蓋茨於是讓艾倫以50000美元找那個程式設計師買斷了這個系統,再和她一起改造了之後,更換名字為Dos。結果PC機大賣,比爾蓋茨也掙了很多錢。不過Dos是單任務、單使用者的系統,實際上並不好用。此時又有一家公司成立了,也就是Jobs成立的蘋果公司。Jobs目的是生成PC機,並且要生成比IBM的PC相容機效能強很多的真正的PC機。有趣的是Jobs這個人特別崇拜圖靈,不過圖靈是個同性戀,被當時的人們關押之後,圖靈羞憤之下咬了一口塗了氰化鉀的蘋果死了,所以蘋果的Logo是現在這樣咬了一口的蘋果。蘋果公司所生產的1型PC機是基於UNIX的,賣了很多臺。最初蘋果電腦的CPU是PowerCPU,不是Inter的。
  為了給他的電腦新增一些新的東西,Jobs利用各種關係進入了施樂公司(賣印表機的)的PARK實驗室參觀,此時實驗室裡一個人在UNIX系統首先上研究出了世界上第一個滑鼠,而且並且出了第一個圖形操作介面。但是賣印表機為主的施樂公司領導層並不喜歡這個產品,當Jobs發現這個之後就向施樂公司高價買了一份回去研究。回去之後他就立即著手組織人對這個寶貝進一步研發(Jobs本人並不是程式設計師)。於是在蘋果二代就有了圖形作業系統,這使得裝Dos系統的PC機銷量日下。於是比爾蓋茨也很想搞這麼一套程式碼來開發他的系統,比爾蓋茨就想方設法去接近Jobs,希望一起研究進一步開發這個圖形介面,於是他成功的從Jobs手中騙走了一份原始碼,並且立即開始了改進他的系統。所以Windows系統就誕生了,但是Windows是在Dos基礎上研發的,經常藍屏。
  此時的UNIX還在戰爭期間,當BSD和Bell發現微軟和蘋果搞得這樣火爆時才決定放棄了正統之爭。之後BSD研究團隊就解散了,但是裡面一些人仍然在繼續隊UNIX的研發,並且開發了第一個可以在PC機上執行的UNIX,名字為FreeBSD。此後還出現了其他可在PC機上跑的UNIX發行版,如OpenBSD、NetBSD等。到現在蘋果系統的核心仍然是FreeBSD核心。之前領導BSRG的Bill Joy,隨後成立了著名的Sun公司,主要是生成工作站,並且開發了自己的作業系統Sun OS,後來結合UNIX系統改名為Solaris。Bill Joy最突出的貢獻是為UNIX添加了一個程式:csh,也就是相容C語言的shell。
  再回到蘋果和微軟,微軟公司的Windows系統一直到Windows95、98版本之後,藍屏問題仍然沒有解決,由於Dos這個基礎並沒有改變。前面提到生產PDP主機的DEC公司,這家公司生產的機器上裝的是自己開發的OpenVMS系統。在DEC公司被收購之後,OpenVMS系統的研發人員就被比爾蓋茨接收進微軟公司,來改進他的Windows系統。整個OpenVMS研發團隊進入微軟之後,新版本的Windows系統就在OpenVMS之上修改而成,改名為WindowsNT,此時的核心不再是Dos。之後又發行了WindowsXp,windows2000等等,這些系統的核心都是基於OpenVMS。儘管Windows系統的藍屏問題解決了,但是介面不如蘋果系統,因為不論微軟吹噓得多厲害的技術,基本都是別人幾年前就不用的技術,直到現在。不過,蘋果強大的介面都是依靠硬體支援,所以現在的圖形工作站主機多數都是蘋果機。
  再回到UNIX,當UNIX商用之後,很多高校就不能在免費用了。荷蘭一個大學裡,有個叫安德魯的教授,此前一直在使用UNIX教學,UNXI商用之後他就自己開發了一個作業系統上課用,叫Minix,也就是和UNIX十分相似的很小的系統。在他去芬蘭赫爾辛基大學教學之後,這個系統也被帶了過去。由於他是用匯編寫的這個系統,所以學生要使用就要自己開發核心。
  要再繼續講Linux就得先介紹一個著名的人,麻省理工學院的教授Richard Matthew Stallman。他是一個著名的黑客,認為程式是全人類的,於是舉起自由的大旗,成立GNU組織,開始了程式界的共產主義運動,並且草擬了著名的GPL。Stallman開發了很多程式,如Emacs、GNU C(GCC)、GNU C Library(GLIBC)、Bash shell等。在赫爾辛基大學裡有個叫Linus的學生,他20歲生日時收到外公的一個禮物——一臺80386PC機。在1991年,他自己使用bash、gcc等工具在這臺PC機上寫了個很小的核心程式,命名為Linux。之後他在電子公告牌上宣佈了這個訊息,這讓很多人感興趣,並加入了對他寫的這個核心的維護中來。此前說的Stallman所開發的程式都是在UNIX上執行的,此時Linux的出現正和GNU組織核心的需求相吻合。但是Linus提供的Linux只是核心,不是程式,沒有庫,之後Linus在Linux上移植了很多bsh,於是全球黑客開始了為Linux編寫程式的活動。於是在1994年,Linux1.0誕生,由於所有人都在努力將Linux移植到各種硬體上,所以此時的Linux已經可以跑在很多PC上面上。要再次說明的是Linux只是個核心程式,GNULinux才是個系統。不過兩者都是原始碼,要執行在PC機上面得先編譯。但是不是所有人都會編譯,另外由於CPU支援二進位制的格式不同,並且ABI(應用二進位制介面)不同所以編譯要求兩臺主機完全一樣,比如編譯後要在x86架構主機上執行,就必須在x86架構主機上編譯才行。此時一些第三方組織出現,他們負責編譯核心和外圍應用程式,並打包發行。著名的包括RedHat、Debian、SUSE,他們不是Linux 的開發者,只是打包發行而已,Linux 的核心由linus和開發團體提供,軟體由GNU提供。發行商在其中加入自己的配置檔案,使得Linux不同版本之間看起來各不相同。
  由於早期的軟體都是和核心打包發行,使用者不能自己更改。所以後來出現了軟體管理器,如Debian的Dpkg,RedHat的RPM,使得軟體有安裝、解除安裝、升級等功能。遵循GPL所規定的,發行商發行的原始碼必須公開。為了盈利,RedHat在釋出源程式,但是不發放編譯好的二進位制檔案,而且在軟體升級時也不發放二進位制升級補丁。這樣的情況下出現了另一個組織,CentOS(社群企業作業系統)。每當RedHat發行原始碼時,CentOS都給搞成二進位制程式碼免費發放,並且和RedH發行的版本完全相容,不過CentOS不提供後續服務。在RedHat9.0(個人版)發行之後,這個系統基本就十分穩定了,所以後來RedH專注於研發RedHa企業版,個人版的更新在2003年終止,並將個人版捐給Fedora公司。Debian是目前唯一一個不受商業組織支援的UNIX發行者,因為Debian的所有者都是自願者,所以最先進的Linux發行版是Debian,不過最難使用的也是Debian。之後Debian的二次發行版,如Ubuntu,主要用於PC,介面很漂亮。還要基於Ubuntu的二次發行,Mint。值得說的是現在流行的Andriod系統也是Linux的一個發行版。具體的Linux發行分支圖參考: