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

Python實戰社羣

Java實戰社羣

長按識別下方二維碼,按需求添加

掃碼關注添加客服

進Python社羣▲

掃碼關注添加客服

進Java社羣


轉自:默然 + Coldwings(知乎)鏈接:www.zhihu.com/question/63187737

他是誰,Linus!

林納斯・託瓦茲(Linus Torvalds, 1969 年~),著名程序員,Linux 內核的發明人及該計劃的合作者。

託瓦茲利用個人時間及器材創造出了這套當今全球最流行的操作系統內核之一。

現受聘於開放源代碼開發實驗室(OSDL:Open Source Development Labs, Inc),全力開發 Linux 內核。

Linus 研究生時期開始寫操作系統(大約是 91 年),那時候個人電腦(PC)雖然興起一些年了,但是還只是小部分程序員和狂熱愛好者的玩具。硬件基本上都靠自己攢,軟件也是用開源系統各種魔改。

所以普通人根本沒有折騰 PC 的動力和理由。

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

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

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 需要買書後獲得)。

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

https://www.oreilly.com/openbook/opensources/book/appa.html

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

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 的成功,以下幾個條件必不可少:

  • Linus 強大的開發能力;

  • Linus 的項目管理能;

  • Linus 對操作系統發展方向的把控;

  • 一個羣雄割據,缺乏免費好用的操作系統的時代;

  • 一個不僅羣雄割據,缺乏免費好用的操作系統,而且程序語言,操作系統理論,編譯器技術發展到一定程度,個人 PC 持續發展的時代;

  • GNU 的系統沒做出來;

  • Minix 死守着『教育』不放;

  • GNU 的支持;

  • 全世界硬件廠商的支持;

  • 全世界軟件廠商的支持;

  • 全世界開源開發者的巨大貢獻;

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


另外一個網友 Coldwings 的觀點

說實話,是你想多了……

Linus確實在Linux的內核開發上做了很多工作,諸如項目發起,最初版內核的設計等等,但是你如今拿到手的任何一個Linux發行版中,包含了至少上百個GNU項目,無數的其它開源項目,以及數十萬人貢獻的代碼。這裏所言道的Linux,是指Linux這個內核,而內核這玩意不包括任何應用層,甚至那個黑框框命令行都並不是Linux的一部分。內核暴露的是硬件到軟件的抽象、任務和資源調度,給出的是調用系統的編程接口,僅此而已。

Linus所做的1991年的第一版內核有些什麼功能呢?簡單的說,是這樣的:

一個有着硬件平臺限制,能夠運行起來的,與當時便不是特別熱門的叫做Minix的操作系統內核大部分功能兼容的內核。

要說能力,那是非常強的,因爲二十多年後的今天的大學生們即使上了操作系統課程做大作業要寫個OS內核,通常也不會做得多全面,更不提完全兼容某標準(當然更可能是因爲沒有做那麼精細的需求)。但若只是如此,Linux也就止步於「優秀的大學生課程作業」水平了。

真正有意義的是他把Linux扔網上與社區協作開發(後來加上了GPL協議),而後在2年之內有超過百人折騰這個內核。而在當時的商用環境普遍使用Unix而主要發行版的Unix都貴破天際的情況下,在4年後終於有人覺得這個開源內核加上GNU工具能夠起到替代部分Unix節省成本,才真正意義上火起來的。而彼時已經有上千人參與內核的開發,其中甚至有大批RH等公司的專職僱員。

沒錯,就這麼個內核,沒有任何人機交互,僅僅提供軟件運行環境的玩意,儘管最初雛形是Linus的作品,四年後已經是數千名對操作系統有研究的程序員共同開發的產物了。而這只是一個現有的Linux發行版中佔比重很小的一部分(儘管很重要),可以交互的命令行環境bash來自於GNU,圖形界面Gnome來自於GNU,聲音服務來自於GNU,顯示服務來自於GNU(近來的發行版中也有其它開源實現)……連編譯器都來自於GNU,而這些東西,Linus幾乎都沒有參與。

他是大神,是Linux之父,但是說Linux,尤其是現在廣泛使用的功能完整的Linux是他一個人開發的這種事情,是不存在的。

程序員專欄 掃碼關注填加客服 長按識別下方二維碼進羣

近期精彩內容推薦:  

 肝了一晚上搞出來一個微信訂閱號鑑黃機器人

 不允許程序員透露薪資!!!憑啥?

 程序員帶娃有多“恐怖” ?!

 有個大神級女朋友是什麼體驗


在看點這裏好文分享給更多人↓↓

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章