Linux 3.0:內(nèi)核開發(fā)的模式與現(xiàn)狀
原創(chuàng)【51CTO獨(dú)家特稿】2011年7月22日,Linus親自發(fā)布了Linux Kernel 3.0版本。雖然從內(nèi)核的更新內(nèi)容上跟普通的2.6.40沒什么兩樣,不過版本號(hào)的修改,無疑在Linux內(nèi)核20周年之際,被賦予了特殊的意義。
20年走來,Linux內(nèi)核早已不是一開始Linus單打獨(dú)斗開發(fā)的模式。各個(gè)Linux相關(guān)企業(yè)的開發(fā)者和很多單獨(dú)的、因?yàn)閻酆枚鴧⑴c的開發(fā)者都被有序的組織在一起。
下面,我們將以Linux Kernel 3.0為例,介紹一下現(xiàn)在的Linux內(nèi)核是如何開發(fā)的。
主干負(fù)責(zé)人:Linus Torvalds
當(dāng)下,Linux內(nèi)核版本眾多,每個(gè)主版本都有一個(gè)專人負(fù)責(zé)維護(hù),叫做Maintainer。比如Kernel 2.6.32的負(fù)責(zé)人是Greg Kroah-Hartman(目前在Novell任職),Kernel 2.6.35的負(fù)責(zé)人是Andi Kleen(曾在Novell任職,目前在Intel開源技術(shù)中心)。而按照慣例,每一個(gè)***的主分支,都是由Linus本人進(jìn)行維護(hù)和發(fā)布。Linux 3.0也不例外。
Maintainer的主要工作是將其他開發(fā)者提供的代碼和補(bǔ)丁集成到一起,并在發(fā)布前測(cè)試修改各種bug。
其他分支負(fù)責(zé)人
其實(shí)Linux內(nèi)核的開發(fā)模式就是一個(gè)樹狀模式,使用過Git的開發(fā)者們應(yīng)該會(huì)比較了解。一般來說,開發(fā)者們?nèi)绻獙?duì)Linux內(nèi)核做一些修改,那么他首先會(huì)在Git上將Linus的主干代碼復(fù)制一份,形成自己的分支。在Git系統(tǒng)上,每個(gè)開發(fā)者在建立的分支上進(jìn)行的每一個(gè)變更都有一個(gè)單獨(dú)的ID,當(dāng)開發(fā)者認(rèn)為自己進(jìn)行的變更沒有問題的時(shí)候,可以申請(qǐng)讓主要分支的負(fù)責(zé)人將自己的變更“拉”入其負(fù)責(zé)的分支當(dāng)中。
說到這里就要說一下Linux內(nèi)核目前的幾個(gè)分支。***的分支mainline里面包含***的特性,但是由于缺乏測(cè)試,并不建議在生產(chǎn)環(huán)境中使用;標(biāo)注stable的分支則是每一個(gè)之前發(fā)布的版本都有,進(jìn)入stable之后的版本只會(huì)進(jìn)行安全補(bǔ)丁和bug更新,不會(huì)再添加任何新特性。另外還有snapshot、linux-next等分支,里面包含了很多比較新的變更。大部分Linux發(fā)行版包含的內(nèi)核都是來自stable分支,而有些發(fā)行版則會(huì)在這些分支上進(jìn)行一些定制(比如紅帽和Debian),當(dāng)然也會(huì)有自己的負(fù)責(zé)人。
可以說,Linux內(nèi)核開發(fā)的分工模式就像一棵樹一樣,每一個(gè)開發(fā)者都有一條自己的分支,而且每一條分支都和主干有直接的聯(lián)系。
所以,Linux內(nèi)核的開發(fā)者社區(qū)其實(shí)是一個(gè)扁平的結(jié)構(gòu),除了幾條主干的負(fù)責(zé)人之外,其他上千開發(fā)者并沒有什么明確的分工,大家主要以“為Linux內(nèi)核貢獻(xiàn)了多少代碼”作為貢獻(xiàn)多少的判定——也就是說,你有多少代碼被接受并入了mainline或stable分支當(dāng)中,你就是更加重量級(jí)的開發(fā)者。無論你的代碼是關(guān)于CPU、顯卡、網(wǎng)卡、虛擬化還是別的什么,全部一視同仁(當(dāng)然,在主干維護(hù)者那里會(huì)有自己的優(yōu)先級(jí))。
就Linux 3.0而言,在負(fù)責(zé)人Linus之下,開發(fā)者們以代碼貢獻(xiàn)情況的排名列表是:
左側(cè)列表以提交變更的個(gè)數(shù)排名,右側(cè)列表以提交變更的代碼行數(shù)排名。簡單的介紹一下名單里部分開發(fā)者的背景:
K.Y.Srinivasan
目前就職微軟,貢獻(xiàn)的變更主要針對(duì)Hyper-V虛擬驅(qū)動(dòng)。雖然總共提交的變更數(shù)高居榜首(343個(gè)),但更改的代碼數(shù)量只有11564行,因此在右側(cè)列表當(dāng)中排名靠后。
David Miller
目前就職紅帽,貢獻(xiàn)的變更主要針對(duì)網(wǎng)絡(luò)子系統(tǒng)。
Dan Williams
目前就職于紅帽,貢獻(xiàn)的變更主要針對(duì)英特爾isci存儲(chǔ)驅(qū)動(dòng),總共82466行代碼。
Jonathan Cameron
目前在英國劍橋大學(xué)從事研究,貢獻(xiàn)的變更主要針對(duì)工業(yè)化I/O(iio)子系統(tǒng)。
Takashi Iwai
目前就職于Novell SUSE部門,貢獻(xiàn)的變更主要針對(duì)ALSA聲卡驅(qū)動(dòng)子系統(tǒng)。
Larry Finger
目前就職于Web托管網(wǎng)站Lwfinger.net,貢獻(xiàn)的變更主要在于精簡了rt2860sta和rt2870sta驅(qū)動(dòng)的大量代碼。
Dmitry Kravkov
目前就職于Broadcom,貢獻(xiàn)的變更主要在于bnx2x驅(qū)動(dòng)固件的更新。
Vasanthakumar Thiagarajan
目前就職于Atheros,貢獻(xiàn)的變更主要在于精簡了Atheros無線驅(qū)動(dòng)的大量代碼。
Mauro Carvalho Chehab
目前就職于紅帽,貢獻(xiàn)的變更主要在于移除了古老的Micronas drx397xD驅(qū)動(dòng)的代碼。
這樣一看,好像主要參與的開發(fā)者都來自Linux相關(guān)的公司;事實(shí)上也的確如此。在參與Linux 3.0開發(fā)的184名開發(fā)者當(dāng)中,大多數(shù)來自下面列表中的幾家公司:
(圖片來源)
相比之前版本的開發(fā)者參與情況,微軟貢獻(xiàn)代碼數(shù)量攀升令很多人感到驚奇,不過考慮到Hyper-V應(yīng)該沒有那么多的變更需求,這種情況可能以后不會(huì)多見;來自非企業(yè)的開發(fā)者比重則在繼續(xù)減少。
好事還是壞事?
站在商業(yè)化社會(huì)的角度看來,更多的企業(yè)雇員因?yàn)楣ぷ飨嚓P(guān)的原因參與Linux內(nèi)核開發(fā)并非是一件壞事,這表示Linux內(nèi)核作為商品的價(jià)值和可持續(xù)性。
然而這樣的后果就是,主分支對(duì)于變更的傾向性會(huì)越來越嚴(yán)重。這一點(diǎn)可以從最近退出Linux內(nèi)核開發(fā)的愛好者Con Kolivas的專訪內(nèi)容看出來。
Con Kolivas是一個(gè)典型的Linux愛好者,其本職工作在醫(yī)院,和Linux開發(fā)沒有任何關(guān)系。根據(jù)Con Kolivas的描述,他因?yàn)橐婚_始使用Linux桌面遇到很大的性能問題而參與到社區(qū)當(dāng)中,并開始自己學(xué)習(xí)內(nèi)核開發(fā);他編寫的很多補(bǔ)?。?biāo)注為ck的patch)都是針對(duì)Linux桌面性能優(yōu)化的,而且在Linux桌面用戶當(dāng)中有很多受眾;但是,這些補(bǔ)丁很少被并入到主分支當(dāng)中去,因?yàn)榉种ЬS護(hù)者總是說有其他更加緊急重要的補(bǔ)丁需要拉入。Con Kolivas感覺終端用戶在Linux內(nèi)核開發(fā)的社區(qū)里面根本不受到重視,最終由于這份失落感而決定退出。
從宏觀的角度來看,Linux的主要應(yīng)用領(lǐng)域在服務(wù)器,因此分支維護(hù)者將網(wǎng)絡(luò)、存儲(chǔ)、虛擬化驅(qū)動(dòng)等補(bǔ)丁排在較高的優(yōu)先級(jí)自然是無可厚非。不過從Linux桌面的角度來看,這樣的發(fā)展方向無疑是很不利的,而發(fā)行版的開發(fā)者不得不自己想辦法解決終端用戶在桌面系統(tǒng)上的一些底層問題。
這就引申到了另一個(gè)方向:在Linux桌面領(lǐng)域,我們需要一個(gè)與Linux內(nèi)核領(lǐng)域不一樣的貢獻(xiàn)體系。在這條路上,已經(jīng)有先行者進(jìn)行了嘗試,具體情況請(qǐng)看下文分解——《跳出Linux內(nèi)核的圈子:看Ubuntu的另類之路》。
【編輯推薦】