原文:9 lessons from 25 years of Linux kernel development
作者:Greg Kroah-Hartman
譯:雁驚寒
Linux核心社群在2016年慶祝了成立二十五週年紀念,許多人來問我們這個計畫經久不衰和成功的秘訣。我通常會先笑笑,然後開玩笑地說,我真的不知道已經經歷了25年。這個計畫一直都面臨著分歧和挑戰。但是,嚴肅地說,我們能夠做到這一點與社區在反思和改變上的能力有著很大的關係。
大約16年前,大多數核心開發人員彼此之間從來沒有見過面,我們只是透過電子郵件進行聯繫,所以Ted T’so提出了核心高峰會的想法。現在,核心開發人員每年都會聚在一起解決技術問題,更重要的是,回顧一下在過去的一年裡我們做了哪些對的事情,又犯了哪些錯誤。開發人員可以開誠佈公地討論彼此之間如何進行交流以及開發流程如何運作。然後,我們會改進流程,我們會開發像Git這樣的新的工具,不斷地改變我們的合作方式。
雖然我們現在尚未完全認識清楚Linux核心成功的所有關鍵原因,但目前還是有一些經驗值得拿出來分享的。
1. 更短的發布週期很重要
在Linux專案的早期階段,核心的每個主版本需要好幾年發布一次,這意味著用戶需要等待很長時間才能享受到新功能,這對於用戶和經銷商來說是相當令人沮喪的。而且,更重要的是,這麼長的周期意味著需要一下子整合大量的程式碼。把這麼多程式碼合入一個版本裡,壓力也是很大的。
更短的周期可以解決所有這些問題。新程式碼能夠在更短時間內合入到穩定版中。將新程式碼整合到幾乎穩定不變的基線版本上,使得能夠在對系統產生極小影響的情況下引入根本性的變化。開發人員知道,如果他們錯過了這個發布週期,兩個月內還會有另外一個,所以他們很少會過早地合入程式碼。
2. 流程的擴充需要一個分散式的分層開發模型
很久以前,所有的變更需求都會直接轉到Linus Torvalds手中,但這很快就被證明是不合適的,因為沒有哪個人可以全面掌握像作業系統核心這麼複雜的專案。很早的時候,核心不同領域的維護者就提出了一個想法,就是把核心的其中一部分分配給熟悉該領域的人。例如,網路、無線、像PCI或USB這樣的驅動程式子系統、或像ext2或vfat這樣的檔案系統。然後再擴展到由數百名維護人員負責程式碼審查和整合,從而使得能夠在不犧牲產品品質的情況下,在每個發布的版本中都包含成千上萬的變更。
3. 工具的重要性
核心開發一直在試圖擴大開發人員的範圍,直到BitKeeper這款原始碼管理系統出現,幾乎在一夜之間社群的做法發生了改變,而Git的出現帶來了又一次的飛躍。如果沒有合適的工具,像核心這樣的項目將無法正常運轉,從而被自身的重量壓垮。
4. 強大的輿論導向模式很重要
#一般來說,如果一個開發大咖拒絕了某個提交上來的變更,那麼這個變更將不會被合併進去。如果開發人員發現自己在幾個月前提交的程式碼在郵件清單中被拒絕了,那是非常令人沮喪的。但這也保證了核心開發可以適應大量的用戶和問題。沒有哪個使用者社群能夠以犧牲其他群組為代價而進行變更。我們有一個可以支援從微型系統到超級電腦的程式碼庫,它可以應用在許多場景上。
5. 強大的「無回歸」規則也很重要
#大約在十多年前,核心開發社群承諾,如果給定的核心在特定的環境中能正常運行,那麼所有後續的核心版本也能在這個環境中正常運作。如果社區發現某個變更導致了其他問題的出現,他們會很快地解決這個問題。這個規則承諾用戶:系統升級不會破壞他們原來的系統。因而,維護者很願意在開發新功能的時候延續這個核心。
6. 公司參與到開發流程中來是至關重要的,但沒有一家公司能夠主導核心開發
自2014年12月版本號為3.18的核心發布以來,有將近500家公司的大約5062名個人開發者為Linux核心做出了貢獻。大多數開發人員因為他們的工作而得到了報酬,而他們所做的變更是為他們所在的公司服務的。但是,儘管任何一家公司都可以根據具體需求改進內核,但是沒有哪家公司可以主導開發去做傷害別人或限制內核功能的事情。
7. 專案中不應有內部界限
核心開發人員必須專注於核心的特定部分,但只要修改是合理的,那麼任何開發人員都可以對核心的任何部分進行修改。從而,問題在產生的時候就會解決掉,而不是規避掉。開發人員對整個核心有許多各種各樣的看法,即使是最頑固的維護者也不能無限期地擱置任何指定子系統中所必需的改進。
8. 重要的功能是從一點一滴開始的
#原來的0.01版核心只有10000行程式碼; 而現在每兩天增加10000多行。開發人員現在添加的一些基本的、微小的功能未來可能會發展成為重要的子系統。
9. 綜上所述,25年的核心發展歷史表明,持續地合作可以帶來共同的資源,這不是單單某個小組能夠開發出來的
自2005年以來,來自1300多家公司的約14,000名個人開發人員對核心做出了貢獻。因此,Linux內核在許多互相之間有激烈競爭關係的公司的努力下,發展成為一個規模龐大的公共資源。
以上是淺談25年Linux核心開發經驗總結出來的九則經驗的詳細內容。更多資訊請關注PHP中文網其他相關文章!