Linux 核心的故事

徐九發表於2020-10-28

Linux 核心的故事

經過 29 年的努力,Linux 核心前不久接受了它的第一百萬次提交。有史以來最偉大的開源專案已經從它的“愛好”開始走了很長的路。

作者:Steven J. Vaughan-Nichols
編譯:徐九 丨釋出自:思否編輯部
原文標題:《Commit 1 million:The history of the Linux kernel》


1991 年 8 月 25 日,芬蘭研究生 Linus Torvalds 告訴 Minix 新聞組,他正在開發他的新的免費作業系統,這將“只是一個愛好。”但在 29 年後,Linux 幾乎統治了計算機世界。

在 2020 年的 Linux 核心歷史報告中,Linux 基金會講述了從 Linux 核心釋出的第一天到 2020 年 8 月 Linux 核心 5.8 釋出的故事。

雖然基金會以前釋出過幾份 Linux 核心歷史報告,但這份報告是獨一無二的。這是因為,多虧了 Daniel German 博士和他的 cregit 工具,現在可以跟蹤所有三個核心的不同開發階段: 前版本控制,1991 年 9 月到 2002 年 2 月 4 日; BitKeeper,2002 年 2 月 4 日到2005年4月15日; git,2005年4月16日到今天。

Git 與 BitKeeper

如果您是 Linux 的新玩家,您可能不知道版本控制在 2000 年代是一個熱點問題。十多年來,Linux 完全沒有版本控制系統(VCS)。你可以把你的補丁釋出到郵件列表上,如果 Torvalds 接受了,他會把它應用到他自己的原始碼樹上,然後再發布整個原始碼樹的新版本。

當時有 VCSs 可用,比如 CVS 和 Subversion,但是 Torvalds 不喜歡其中任何一個協作版本系統。然而,由於社群的壓力,Torvalds 最終選擇了 BitKeeper。

委婉地說,這不是一個受歡迎的選擇。BitKeeper 是一個封閉原始碼的商業系統。Torvalds 認為自由軟體非常好,但他需要的是儘可能好的 VCS 和 BitKeeper。

多年來,關於這件事情一直在進行著激烈的討論。最終,Samba 開發負責人 Andrew Tridgell 逆向工程 BitKeeper 網路協議,建立了一個相容 BitKeeper 的開源 VCS。BitKeeper 的建立者 Larry McVoy 曾經說過,如果有人這樣做了,他不會讓 Linux 開發者使用他的程式,他也真的這樣做了。

這使得 Linux 沒有 VCS。作為回應,Torvalds 自己做了一個: Git。但他後來說他其實並不想這麼做,“我真的從來都不想做原始碼控制管理,我覺得這是計算機世界裡最沒意思的事情。”

無論無聊與否,十天的工作之後,Torvalds 終於完成了他的工作。如今,git 很容易成為開源領域最受歡迎的 VCS,以及 GitHub 和 GitLab 等程式設計站點的基礎。


說回程式碼,最開始的 linux-0.01.tar。作業系統 z kernel,後來被稱為 Linux,只有 88 個檔案和 10,239 行程式碼,執行在一個單一的硬體架構 i386 上。

之後情況逐漸發生了一些變化。現在的 v5.8 核心中包含 69,325 個檔案和 28,442,673 行程式碼,它執行在超過 30 個主要的硬體架構上。Torvalds 自己說: “5.8 看起來是我們有史以來最大的發行量之一。”

但從第一天開始的一些程式碼仍然存在於今天的 Linux 中。將輸出寫入 stdout 的 vsprintf 例程仍然在程式碼中。Torvalds 說,這部分“是和 Lars Wirzenius 合寫的。”這也讓 Torvalds 在大學時的朋友 Wirzenius,成為了第一個與 Linux 合作的開發者。

從 1996年1月的 v1.3.68 版本開始,維護者的檔案中會列出主要開發和維護核心的開發者。第一版的文件中只有三個維護人員: Alan Cox、 Jon Naylor 和 Linus Torvalds。到了 2020 年的 5.8 版本,已經有了 1501 個維護人員。

當然,要真正深入瞭解 Linux 核心的歷史,您需要檢視早期的 Linux 開發郵件列表。Linux 總是在郵件列表上討論和設計的。“不幸的是,”報告指出,“在 1997 年之前,只有部分討論記錄是公開的,因為 Linux 開發跨越了多個郵件列表和 USENET 組。”

在 Linux 核心的歷史中有一件事是很清楚的: 變化來得越來越快。從 2005 年到 2008 年,平均每小時有 2 次提交;到 2019 年,每小時則有了 9.4 次提交。最新的 v5.8 核心,平均每小時提交 10.7 次。

儘管步伐如此之快,Linux 的釋出週期已經變得相當可預測。每個釋出週期開始於一個兩週的“合併視窗”這就是為下一個版本的 git 倉庫新增新功能的時候。一旦這個版本被標記為 rc1,整合測試、除錯和穩定週期就開始了。多個 rc 候選者被標記,直到 Linus 和他的主要維護人員認為它足夠好,足夠穩定就可以釋出了。之後,迴圈再次開始與下一個合併視窗。

有個傳言一直持續到今天,說 Linux 和其他開源軟體是業餘愛好者在他們媽媽的地下室裡寫的。雖然這對於少數程式設計師來說可能是真的,但是大部分的 Linux 核心開發人員都是在 IT 公司工作。至少從 2008 年開始就是這樣了。在那一年,74.2% 的 Linux 核心是由領薪水的程式設計師編寫的。

的確,也存在相當數量的志願 Linux 開發者。在過去的 12 年裡,74.2% 領薪水的程式設計師當中的 11.95% 開發者都是在“為愛發電”,剩下的 52% 開發者則是由公司和顧問牽頭來編寫的。

參與人員的比例,從上到下前十名分別是: 英特爾,紅帽,IBM,SUSE,Linaro,谷歌,三星,AMD,Renesas,德州儀器和甲骨文。

在某種程度上,由於公司,尤其是 Linux 發行商,如 Canonical,Red Hat,和 SUSE,對 Linux 的健康發展至關重要。

這些核心最初都是穩定的核心,開發人員承諾會長期維護它們。然後,當在穩定的核心中發現 bug 時,它們會被上游修復並回移植到長期釋出的核心中。目前,這些是長期核心版本:

Linux 核心的故事

一些 Linux 使用者希望看到更長的支援視窗。土木基礎設施平臺(CIP)正在支援 4.4 和 4.19 版本,作為超長期穩定(SLTS)核心釋出。CIP 工作於基礎設施的開放原始碼,如發電和運輸、石油和天然氣分配、水和廢水管理。這些專案將得到 10 年或更長時間的支援。

在過去的幾年中,核心開發人員在自動除錯工具上也付出了更多的努力。零日自動測試機器人和華為的 hulk 機器人每天都在 Linux 核心樹上執行諸如 spares,smatch 和 coccicheck 之類的靜態分析工具。模糊測試器(例如 Trinity 和 syzkaller)也變得越來越流行。最終結果將是 Linux 的程式碼比以往更乾淨。

Linux基金會指出,“核心社群的重點是保持一個共同的目標,即擁有一個沒有退化的高質量作業系統,願意根據需要建立新的流程和工具來幫助他們提高效率。”在當今最大的科技公司的支援下,Torvalds 及其成千上萬的同事已經成功實現了這一目標。

對於“只是一個愛好的作業系統”來說還不錯。

segmentfault 思否

相關文章