Linux 內(nèi)核的故事

經(jīng)過(guò) 29 年的努力,Linux 內(nèi)核前不久接受了它的第一百萬(wàn)次提交。有史以來(lái)最偉大的開源項(xiàng)目已經(jīng)從它的“愛(ài)好”開始走了很長(zhǎng)的路。
作者:Steven J. Vaughan-Nichols
編譯:徐九 丨發(fā)布自:思否編輯部
原文標(biāo)題:《Commit 1 million:The history of the Linux kernel》
1991 年 8 月 25 日,芬蘭研究生 Linus Torvalds 告訴 Minix 新聞組,他正在開發(fā)他的新的免費(fèi)操作系統(tǒng),這將“只是一個(gè)愛(ài)好。”但在 29 年后,Linux 幾乎統(tǒng)治了計(jì)算機(jī)世界。
在 2020 年的 Linux 內(nèi)核歷史報(bào)告中,Linux 基金會(huì)講述了從 Linux 內(nèi)核發(fā)布的第一天到 2020 年 8 月 Linux 內(nèi)核 5.8 發(fā)布的故事。
雖然基金會(huì)以前發(fā)布過(guò)幾份 Linux 內(nèi)核歷史報(bào)告,但這份報(bào)告是獨(dú)一無(wú)二的。這是因?yàn)椋嗵澚?Daniel German 博士和他的 cregit 工具,現(xiàn)在可以跟蹤所有三個(gè)內(nèi)核的不同開發(fā)階段: 前版本控制,1991 年 9 月到 2002 年 2 月 4 日; BitKeeper,2002 年 2 月 4 日到2005年4月15日; git,2005年4月16日到今天。
Git 與 BitKeeper
如果您是 Linux 的新玩家,您可能不知道版本控制在 2000 年代是一個(gè)熱點(diǎn)問(wèn)題。十多年來(lái),Linux 完全沒(méi)有版本控制系統(tǒng)(VCS)。你可以把你的補(bǔ)丁發(fā)布到郵件列表上,如果 Torvalds 接受了,他會(huì)把它應(yīng)用到他自己的源代碼樹上,然后再發(fā)布整個(gè)源代碼樹的新版本。
當(dāng)時(shí)有 VCSs 可用,比如 CVS 和 Subversion,但是 Torvalds 不喜歡其中任何一個(gè)協(xié)作版本系統(tǒng)。然而,由于社區(qū)的壓力,Torvalds 最終選擇了 BitKeeper。
委婉地說(shuō),這不是一個(gè)受歡迎的選擇。BitKeeper 是一個(gè)封閉源代碼的商業(yè)系統(tǒng)。Torvalds 認(rèn)為自由軟件非常好,但他需要的是盡可能好的 VCS 和 BitKeeper。
多年來(lái),關(guān)于這件事情一直在進(jìn)行著激烈的討論。最終,Samba 開發(fā)負(fù)責(zé)人 Andrew Tridgell 逆向工程 BitKeeper 網(wǎng)絡(luò)協(xié)議,創(chuàng)建了一個(gè)兼容 BitKeeper 的開源 VCS。BitKeeper 的創(chuàng)建者 Larry McVoy 曾經(jīng)說(shuō)過(guò),如果有人這樣做了,他不會(huì)讓 Linux 開發(fā)者使用他的程序,他也真的這樣做了。
這使得 Linux 沒(méi)有 VCS。作為回應(yīng),Torvalds 自己做了一個(gè): Git。但他后來(lái)說(shuō)他其實(shí)并不想這么做,“我真的從來(lái)都不想做源代碼控制管理,我覺(jué)得這是計(jì)算機(jī)世界里最沒(méi)意思的事情。”
無(wú)論無(wú)聊與否,十天的工作之后,Torvalds 終于完成了他的工作。如今,git 很容易成為開源領(lǐng)域最受歡迎的 VCS,以及 GitHub 和 GitLab 等編程站點(diǎn)的基礎(chǔ)。
說(shuō)回代碼,最開始的 linux-0.01.tar。操作系統(tǒng) z kernel,后來(lái)被稱為 Linux,只有 88 個(gè)文件和 10,239 行代碼,運(yùn)行在一個(gè)單一的硬件架構(gòu) i386 上。
之后情況逐漸發(fā)生了一些變化。現(xiàn)在的 v5.8 內(nèi)核中包含 69,325 個(gè)文件和 28,442,673 行代碼,它運(yùn)行在超過(guò) 30 個(gè)主要的硬件架構(gòu)上。Torvalds 自己說(shuō): “5.8 看起來(lái)是我們有史以來(lái)最大的發(fā)行量之一。”
但從第一天開始的一些代碼仍然存在于今天的 Linux 中。將輸出寫入 stdout 的 vsprintf 例程仍然在代碼中。Torvalds 說(shuō),這部分“是和 Lars Wirzenius 合寫的。”這也讓 Torvalds 在大學(xué)時(shí)的朋友 Wirzenius,成為了第一個(gè)與 Linux 合作的開發(fā)者。
從 1996年1月的 v1.3.68 版本開始,維護(hù)者的文件中會(huì)列出主要開發(fā)和維護(hù)內(nèi)核的開發(fā)者。第一版的文檔中只有三個(gè)維護(hù)人員: Alan Cox、 Jon Naylor 和 Linus Torvalds。到了 2020 年的 5.8 版本,已經(jīng)有了 1501 個(gè)維護(hù)人員。
當(dāng)然,要真正深入了解 Linux 內(nèi)核的歷史,您需要查看早期的 Linux 開發(fā)郵件列表。Linux 總是在郵件列表上討論和設(shè)計(jì)的。“不幸的是,”報(bào)告指出,“在 1997 年之前,只有部分討論記錄是公開的,因?yàn)?Linux 開發(fā)跨越了多個(gè)郵件列表和 USENET 組。”
在 Linux 內(nèi)核的歷史中有一件事是很清楚的: 變化來(lái)得越來(lái)越快。從 2005 年到 2008 年,平均每小時(shí)有 2 次提交;到 2019 年,每小時(shí)則有了 9.4 次提交。最新的 v5.8 內(nèi)核,平均每小時(shí)提交 10.7 次。
盡管步伐如此之快,Linux 的發(fā)布周期已經(jīng)變得相當(dāng)可預(yù)測(cè)。每個(gè)發(fā)布周期開始于一個(gè)兩周的“合并窗口”這就是為下一個(gè)版本的 git 倉(cāng)庫(kù)添加新功能的時(shí)候。一旦這個(gè)版本被標(biāo)記為 rc1,集成測(cè)試、調(diào)試和穩(wěn)定周期就開始了。多個(gè) rc 候選者被標(biāo)記,直到 Linus 和他的主要維護(hù)人員認(rèn)為它足夠好,足夠穩(wěn)定就可以發(fā)布了。之后,循環(huán)再次開始與下一個(gè)合并窗口。
有個(gè)傳言一直持續(xù)到今天,說(shuō) Linux 和其他開源軟件是業(yè)余愛(ài)好者在他們媽媽的地下室里寫的。雖然這對(duì)于少數(shù)程序員來(lái)說(shuō)可能是真的,但是大部分的 Linux 內(nèi)核開發(fā)人員都是在 IT 公司工作。至少?gòu)?2008 年開始就是這樣了。在那一年,74.2% 的 Linux 內(nèi)核是由領(lǐng)薪水的程序員編寫的。
的確,也存在相當(dāng)數(shù)量的志愿 Linux 開發(fā)者。在過(guò)去的 12 年里,74.2% 領(lǐng)薪水的程序員當(dāng)中的 11.95% 開發(fā)者都是在“為愛(ài)發(fā)電”,剩下的 52% 開發(fā)者則是由公司和顧問(wèn)牽頭來(lái)編寫的。
參與人員的比例,從上到下前十名分別是: 英特爾,紅帽,IBM,SUSE,Linaro,谷歌,三星,AMD,Renesas,德州儀器和甲骨文。
在某種程度上,由于公司,尤其是 Linux 發(fā)行商,如 Canonical,Red Hat,和 SUSE,對(duì) Linux 的健康發(fā)展至關(guān)重要。
這些內(nèi)核最初都是穩(wěn)定的內(nèi)核,開發(fā)人員承諾會(huì)長(zhǎng)期維護(hù)它們。然后,當(dāng)在穩(wěn)定的內(nèi)核中發(fā)現(xiàn) bug 時(shí),它們會(huì)被上游修復(fù)并回移植到長(zhǎng)期發(fā)布的內(nèi)核中。目前,這些是長(zhǎng)期內(nèi)核版本:

一些 Linux 用戶希望看到更長(zhǎng)的支持窗口。土木基礎(chǔ)設(shè)施平臺(tái)(CIP)正在支持 4.4 和 4.19 版本,作為超長(zhǎng)期穩(wěn)定(SLTS)內(nèi)核發(fā)布。CIP 工作于基礎(chǔ)設(shè)施的開放源代碼,如發(fā)電和運(yùn)輸、石油和天然氣分配、水和廢水管理。這些項(xiàng)目將得到 10 年或更長(zhǎng)時(shí)間的支持。
在過(guò)去的幾年中,內(nèi)核開發(fā)人員在自動(dòng)調(diào)試工具上也付出了更多的努力。零日自動(dòng)測(cè)試機(jī)器人和華為的 hulk 機(jī)器人每天都在 Linux 內(nèi)核樹上運(yùn)行諸如 spares,smatch 和 coccicheck 之類的靜態(tài)分析工具。模糊測(cè)試器(例如 Trinity 和 syzkaller)也變得越來(lái)越流行。最終結(jié)果將是 Linux 的代碼比以往更干凈。
Linux基金會(huì)指出,“內(nèi)核社區(qū)的重點(diǎn)是保持一個(gè)共同的目標(biāo),即擁有一個(gè)沒(méi)有退化的高質(zhì)量操作系統(tǒng),愿意根據(jù)需要?jiǎng)?chuàng)建新的流程和工具來(lái)幫助他們提高效率。”在當(dāng)今最大的科技公司的支持下,Torvalds 及其成千上萬(wàn)的同事已經(jīng)成功實(shí)現(xiàn)了這一目標(biāo)。
對(duì)于“只是一個(gè)愛(ài)好的操作系統(tǒng)”來(lái)說(shuō)還不錯(cuò)。

