Linux內(nèi)核25年開(kāi)發(fā)中的9個(gè)經(jīng)驗(yàn)

Linux內(nèi)核25年開(kāi)發(fā)中的9個(gè)經(jīng)驗(yàn)

Greg Kroah-Hartman

image
image

2016年Linux社區(qū)慶祝內(nèi)核研發(fā)經(jīng)歷了1/4個(gè)世紀(jì),由此有人問(wèn)我們是什么秘訣使這個(gè)項(xiàng)目如此長(zhǎng)久并如此成功。一般我就笑笑打趣說(shuō)我也不知道怎么就走到這一步了,但在項(xiàng)目發(fā)展中確實(shí)有過(guò)很多爭(zhēng)論和挑戰(zhàn)。認(rèn)真講,我們能走這么遠(yuǎn)主要是歸功于社區(qū)的自我反思和應(yīng)對(duì)變化的能力上。

16年前絕大部分的內(nèi)核開(kāi)發(fā)者彼此從未見(jiàn)過(guò)面,僅僅通過(guò)電子郵件互相聯(lián)系。后來(lái)Ted T'so提議舉辦個(gè)內(nèi)核峰會(huì),從那之后到現(xiàn)在每年開(kāi)發(fā)者都會(huì)聚在一起討論技術(shù)難題,回顧過(guò)去一年里我們做對(duì)和做錯(cuò)了的事情。每個(gè)人都可以開(kāi)誠(chéng)布公的談合作經(jīng)驗(yàn)和開(kāi)發(fā)過(guò)程,然后我們會(huì)改進(jìn)流程。我們也提供新的工具如Git并不斷改進(jìn)協(xié)作模式。

久而久之這樣的演進(jìn)就具有一種彈性:既允許項(xiàng)目從一個(gè)強(qiáng)勢(shì)領(lǐng)域進(jìn)入下一個(gè),又避免了分裂成眾多相互競(jìng)爭(zhēng)的項(xiàng)目。也許要多年之后我們才能充分認(rèn)識(shí)到讓Linux內(nèi)核開(kāi)發(fā)如此成功的關(guān)鍵之處,但下面列出了一些當(dāng)前我們認(rèn)為重要的經(jīng)驗(yàn)。

1. 短期發(fā)布很重要

Linux項(xiàng)目早期每個(gè)主版本要隔幾年才發(fā)布。這對(duì)用戶和志愿者來(lái)說(shuō)很不方便,因?yàn)橐玫叫绿匦孕枰群芫?。更重要的是,這么長(zhǎng)的周期意味著會(huì)有大量的代碼集成在里面,每次發(fā)布都會(huì)有很大壓力,有些并不完善的代碼不得不隨之發(fā)布。

短期發(fā)布解決了上面這些問(wèn)題,新的代碼可以很快就在穩(wěn)定的發(fā)布版中取得,集成的新代碼甚至可以以很小的代價(jià)來(lái)做一些基礎(chǔ)性的改動(dòng)。開(kāi)發(fā)者們?nèi)绻e(cuò)過(guò)了一個(gè)發(fā)布周期,那么可以等兩個(gè)月后的下一個(gè)發(fā)布,這樣就不會(huì)迫使他們急于合并不完善的代碼。

2. 彈性流程需要一個(gè)分布的層級(jí)式開(kāi)發(fā)模型

很長(zhǎng)時(shí)間以前,所有改動(dòng)都直接提交給Torvalds,但很快發(fā)現(xiàn)一個(gè)人處理象操作系統(tǒng)內(nèi)核這樣分散的項(xiàng)目太困難。社區(qū)很早就有了由熟悉某方面的志愿者負(fù)責(zé)維護(hù)內(nèi)核不同部分的想法,譬如網(wǎng)絡(luò)、無(wú)線、或是PCI或USB等不同的驅(qū)動(dòng)子系統(tǒng)乃至各種文件系統(tǒng)如ext2, vfat等。把代碼審查和集成這些事項(xiàng)鋪給眾多志愿者使得內(nèi)核項(xiàng)目能在每個(gè)版本上萬(wàn)的改動(dòng)中兼顧代碼審查和質(zhì)量。

3. 工具的重要性

內(nèi)核開(kāi)發(fā)的規(guī)模起初擴(kuò)展很難,直到BitKeeper的出現(xiàn)幾乎一夜之間改變了社區(qū);切換到Git帶來(lái)了另一次飛躍。沒(méi)有合適的工具,象內(nèi)核開(kāi)發(fā)這樣的項(xiàng)目很快就會(huì)被自己的規(guī)模壓垮。

4. 共識(shí)模式

一般性的原則,如果有重要的開(kāi)發(fā)人員反對(duì)某個(gè)變更,它就不會(huì)被合并入代碼庫(kù)。當(dāng)提交者發(fā)現(xiàn)幾個(gè)月前提交的代碼仍然掛在郵件列表上的時(shí)候可能會(huì)有沉重一擊的感覺(jué)。但這種方式保證了內(nèi)核廣泛的適用性。社區(qū)不會(huì)為了特殊的用戶而做出影響其它團(tuán)隊(duì)的變更。這樣我們才能夠用單一的代碼庫(kù)涵蓋從袖珍計(jì)算機(jī)到超級(jí)計(jì)算機(jī)的具有廣泛適用性的代碼。

5. 內(nèi)核的向后兼容性

二十年前內(nèi)核開(kāi)發(fā)者社區(qū)保證如果某個(gè)版本內(nèi)核在某個(gè)特定設(shè)置下可以運(yùn)行,其后所有版本內(nèi)核都將能在此設(shè)置下運(yùn)行。社區(qū)會(huì)很快解決某個(gè)變更導(dǎo)致的回歸問(wèn)題。這條規(guī)則向用戶保證升級(jí)不會(huì)影響他們當(dāng)前系統(tǒng),而用戶也會(huì)愿意嘗試新內(nèi)核所帶來(lái)的新的能力。

6. 公司的參與很關(guān)鍵,但不能讓公司主導(dǎo)內(nèi)核開(kāi)發(fā)

截止到2014年12月3.18版本,共計(jì)有5062個(gè)開(kāi)發(fā)者代表近500家公司給Linux內(nèi)核做過(guò)貢獻(xiàn)。這些開(kāi)發(fā)者是有工資的,他們提交的變更也是為其所在的公司服務(wù)。雖然任何公司都可以因其需要而改進(jìn)內(nèi)核,但沒(méi)有公司能夠引導(dǎo)內(nèi)核的開(kāi)發(fā)方向或限制內(nèi)核的功能。

7. 項(xiàng)目沒(méi)有內(nèi)部隔離

內(nèi)核開(kāi)發(fā)者需要專注在內(nèi)核的某個(gè)部分上,但任何開(kāi)發(fā)者可以就內(nèi)核的任一部分做恰當(dāng)?shù)母膭?dòng)。這樣內(nèi)核的問(wèn)題會(huì)在正確的地方被修正而不是頭疼醫(yī)頭腳疼醫(yī)腳。開(kāi)發(fā)者能夠?qū)?nèi)核視為一個(gè)整體,所以即使最頑固的維護(hù)者也不能在某個(gè)子系統(tǒng)內(nèi)無(wú)限的拖延開(kāi)發(fā)進(jìn)程。

8. 聚沙成塔

原始的0.01版內(nèi)核只有一萬(wàn)行代碼。現(xiàn)在每?jī)商焖湍茉鲩L(zhǎng)這么多代碼。一些極其細(xì)微的特性有可能將來(lái)會(huì)成為很重要的子系統(tǒng)

9. 以上,25年的內(nèi)核歷史表明可持續(xù)、合作性的努力可以帶來(lái)個(gè)別組織所無(wú)法完成的公共性資源

從2005年到現(xiàn)在,來(lái)自1300家公司的14000多個(gè)開(kāi)發(fā)者對(duì)內(nèi)核做出過(guò)貢獻(xiàn)。Linux內(nèi)核因此成為在其它領(lǐng)域有競(jìng)爭(zhēng)關(guān)系的公司間的廣義上的公共資源。

關(guān)于內(nèi)核開(kāi)發(fā)更詳細(xì)的信息,可以查看2016年Linux內(nèi)核開(kāi)發(fā)報(bào)告。


PS:

Linux內(nèi)核開(kāi)發(fā)者峰會(huì)照的全家福

2016峰會(huì)全家福

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容