當前位置: 華文星空 > 心靈

為何 Linus 一個人就能寫出這麽強的系統,中國卻做不出來?

2019-11-15心靈

你看Linus自傳就完事了。

Linus研究生時期開始寫作業系統(大約是91年),那時候個人電腦(PC)雖然興起一些年了,但是還只是小部份程式設計師和狂熱愛好者的玩具。硬體基本上都靠自己攢,軟體也是用開源系統各種魔改。所以普通人根本沒有折騰PC的動力和理由。

Unix已經霸占了許多生產力場景,唯一的缺點就是貴,而且很多發行版是閉源的。個人使用者根本不要考慮。

那時候Linus自己攢了一套386,但是找不到好用,廉價/免費的作業系統用。當時社群裏當然也有一票免費且開源的系統,但是要不就是相容性差,要不就是各種坑,要不就是沒軟體,總之各種各樣的問題。而相容性是最主要的問題,那時候的CPU不像現在的流行架構就那麽兩種(x86,Arm),那時候叫的上名的架構有十幾種,所以作業系統的相容性是非常重要的。

Linus開始自學作業系統,發現了一本很好的教材【作業系統:設計與實作】,然後花了一個暑假看完,開始自己寫作業系統。

【作業系統:設計與實作】這本書的作者是塔雷鮑姆,寫書的時候已經是業界大牛了,他在大學為了教學作業系統,但苦於學生買不起太貴的Unix發行版,於是自己寫了一個相容Unix標準作業系統(主要是相容POSIX標準),叫Minix(名字上就很對仗,Universe - mini)。

Minix這個系統就是為了教學而生的,只要買了這本書,就免費郵寄一份Minix原始碼。Minix為了方便教學,保持程式碼的簡潔,塔雷鮑姆拒絕向裏面添加太多復雜的功能,。所以Minix雖然實作得優雅,但是社群的玩家要自己日常用,要魔改很多東西。

對了,Minix是微內核的。對,微內核的概念存在幾十年了,而不是2019年誕生的。

微內核的結構非常優雅,檔案系統,記憶體管理,硬體驅動都是以行程形式存在的,而不是內核程式碼,這意味著驅動掛了不會帶著內核一起掛。缺點就是系統呼叫開銷太大,以至於慢到無法接受。所以現在的桌面系統,沒有純微內核的。

對於教學系統來說,微內核不是問題,畢竟是教學,不是生產工具。

社群和Linus都很喜歡Minix,但是都不滿足於Minix作者因為教學目的而放棄相容性和可延伸性。於是Linus在自己執行Minix的PC開始了Linux的開發。Linux是單核心的。Linux本來不叫Linux,Linus是一個很內向的人,不好意思取這麽自戀的名字,但是合作者強烈建議用這個名字,所以就用了,x代表unix的聯系(都相容POSIX)。提一句,Unix不是為開源和免費而生的,而是為商業而生的,但是Unix的發展催生了最好的開源環境(比如GNU)。

註意,這幾年的社群,屬於『軍閥混戰』,大家都缺一款好用的免費作業系統,但並不只是Linus想到要解決這個問題,理查德斯斯托曼領導的GNU組織在90年代就一直醞釀一款免費的作業系統,因為他們的目的是與商業的Unix對抗,光有一個GCC編譯器還不夠,還需要有自己的作業系統。

社群裏各種技術人員也對GNU的作業系統非常期待,但是這玩意兒難產了。直到很久之後,Linux流行起來後,依然沒做出來。

最開始的Linux版本,只有幾千行程式碼,現在基礎紮實的CS本科生,花一段時間都可以看懂,甚至有些OS教材就是用Linux最初的版本來教學的,比如哈工大李誌軍的課程。

Linus從一開始就不斷在minix論壇上釋出自己的進展,搞得論壇上一堆人非常感興趣,於是許多人加入了開發,這時候Linus用信件接收每個人的程式碼,然後手動合並。沒過一段時間,minix論壇上就全是討論Linux的了,雖然塔雷鮑姆不是個小氣的人,但是這麽搞也讓塔雷鮑姆很不爽。

不久之後Linus和塔雷鮑姆之間爆發了一次沖突。塔雷鮑姆在論壇上寫了一篇文章,論證微內核與單核心的優缺點,其實主要是攻擊單核心,說單核心除了效能好點,全是缺點,說Linux過時了。Linus是脾氣暴躁的人,在技術問題上從不妥協。於是開始嘲諷minix。Linux的可移植性比minix更好,而且免費開源(minix需要買書後獲得)。

然後來來去去吵了很多次,具體可以看

只是他們兩個當時誰也沒想到,這次論壇上的口水戰會成為幾十年後人們依然提起的作業系統之爭。

Linus並不恨塔雷鮑姆,他說後來有一次去了塔雷鮑姆的演講,完了之後拿著那本書想要塔雷鮑姆的簽名,但是沒有等到人。

我想Linus多少還是尊敬他的,畢竟是自己學習作業系統的領路人。

在Linus和社群人員的努力下,透過擴充套件GCC支持Linux,Linux也相容了越來越多的平台。其他各類軟體移植到Linux也就變得容易了,尤其是在那個許多軟體以原始碼方式發行的時代,只要有對應平台的編譯器,編譯一次就算移植好了。

趕上PC發展的浪潮,但還不夠,畢竟蘋果微軟不是好對付的,商業作業系統的易用性依然很強。

但是Linux開始被各類企業青睞了,因為不是每個企業都有錢花高價買一套Unix來用,或者是更貴的軟體+硬體一體的大型電腦來用。Linux讓他們看到了省錢的希望。

GNU開始支持Linux,Linux成為了GNU的官方作業系統,所以現在叫GNU/Linux。可以說Linux和GCC幾乎是最偉大的兩個開源計畫。它們合起來就更強悍了。

GCC讓軟體方便移植,Linux軟體生態就好了,軟體生態好了使用者就多,使用者多了就讓硬體公司眼饞,各路硬體公司都為Linux開發驅動和各種擴充套件,以支持自家硬體,這樣使用者就更多。這個倍增效應是很強的。

Linus在計畫達到一定規模後就不再親自寫程式碼了,主要是合並程式碼,畢竟全球那麽多人送出程式碼,他一個人稽核合並就夠忙了,親自寫程式碼也沒時間。

直到有一天他覺得忙不過來了,稽核程式碼會遇到很多傻逼程式碼和開發者,於是他開發了現在最流行的版本控制工具,git,字面意思就是飯桶。

從整個發展歷程來看,Linux在幾個十字路口都做了非常精準的選擇。

從1991年0.0.1版到1994年1.0版,這期間Linux進行了極其快速的叠代,社群玩家在使用中給出了寶貴的意見,最好的測試就是讓使用者去測試,這保證所有的更新都是實際有效的。

要知道,Linus在1991年開始開發時,根本沒想過Linux有一天能改變世界,那個時候,他跟所有的社群玩家一樣,期待著GNU的系統,所以他在論壇上解釋,做Linux只是一個業余愛好,最多用來填補GNU系統出來之前的這段空白時間。

但GNU由於各種名譽加身,導致目標定得很高,於是計畫一直延期,同時市面上的系統也在發展,GNU又繼續調高目標,然後繼續延期,最後難產。

而Linus從一開始,就沒什麽心理壓力,每一點成果都在社群上公布,快速獲得反饋,然後及時調整。這種開發方式無意中就超越了GNU的閉門造車。

RedHat這種系統免費,服務收費的模式也取得了成功,這大大激勵了其他發行版開發商的信心。目前Linux的發行版,至少幾百個吧。

96年2.0版釋出,開始支持多核CPU,這個重要的更新,讓很多企業開始考慮Linux。

之後幾年Linux在伺服器的份額快速上升。

03年2.6版釋出,稍微了解過Linux的人都只要這意味著什麽。2.6版本跨越03年-11年,中間有許多小版本更新。2.6版意味著Linux第一次成為真正具有了高穩定性,高可用性,高可伸縮性的工業級別作業系統。

05年git誕生,Linus和核心團隊摸也索出一套穩定實用的合作開發方式。

之後就是遍地開花的發展歷程了。

不得不說,他對作業系統發展方向的把控是精準的。

總結一下,Linux的成功,以下幾個條件必不可少:

  1. Linus強大的開發能力
  2. Linus的計畫管理能力
  3. Linus對作業系統發展方向的把控
  4. 一個群雄割據,缺乏免費好用的作業系統的時代。
  5. 一個不僅群雄割據,缺乏免費好用的作業系統,而且程式語言,作業系統理論,編譯器技術發展到一定程度,個人PC持續發展的時代。
  6. GNU的系統沒做出來
  7. Minix死守著『教育』不放
  8. GNU的支持
  9. 全世界硬體廠商的支持
  10. 全世界軟體廠商的支持
  11. 全世界開源開發者的巨大貢獻

再總結一下,一個人的命運,當然要靠自我奮鬥,但也要考慮到歷史的行程。