Linux 3.0:內核開發的模式與現狀
原創【51CTO獨家特稿】2011年7月22日,Linus親自發布了Linux Kernel 3.0版本。雖然從內核的更新內容上跟普通的2.6.40沒什么兩樣,不過版本號的修改,無疑在Linux內核20周年之際,被賦予了特殊的意義。
20年走來,Linux內核早已不是一開始Linus單打獨斗開發的模式。各個Linux相關企業的開發者和很多單獨的、因為愛好而參與的開發者都被有序的組織在一起。
下面,我們將以Linux Kernel 3.0為例,介紹一下現在的Linux內核是如何開發的。
主干負責人:Linus Torvalds
當下,Linux內核版本眾多,每個主版本都有一個專人負責維護,叫做Maintainer。比如Kernel 2.6.32的負責人是Greg Kroah-Hartman(目前在Novell任職),Kernel 2.6.35的負責人是Andi Kleen(曾在Novell任職,目前在Intel開源技術中心)。而按照慣例,每一個***的主分支,都是由Linus本人進行維護和發布。Linux 3.0也不例外。
Maintainer的主要工作是將其他開發者提供的代碼和補丁集成到一起,并在發布前測試修改各種bug。
其他分支負責人
其實Linux內核的開發模式就是一個樹狀模式,使用過Git的開發者們應該會比較了解。一般來說,開發者們如果要對Linux內核做一些修改,那么他首先會在Git上將Linus的主干代碼復制一份,形成自己的分支。在Git系統上,每個開發者在建立的分支上進行的每一個變更都有一個單獨的ID,當開發者認為自己進行的變更沒有問題的時候,可以申請讓主要分支的負責人將自己的變更“拉”入其負責的分支當中。
說到這里就要說一下Linux內核目前的幾個分支。***的分支mainline里面包含***的特性,但是由于缺乏測試,并不建議在生產環境中使用;標注stable的分支則是每一個之前發布的版本都有,進入stable之后的版本只會進行安全補丁和bug更新,不會再添加任何新特性。另外還有snapshot、linux-next等分支,里面包含了很多比較新的變更。大部分Linux發行版包含的內核都是來自stable分支,而有些發行版則會在這些分支上進行一些定制(比如紅帽和Debian),當然也會有自己的負責人。
可以說,Linux內核開發的分工模式就像一棵樹一樣,每一個開發者都有一條自己的分支,而且每一條分支都和主干有直接的聯系。
所以,Linux內核的開發者社區其實是一個扁平的結構,除了幾條主干的負責人之外,其他上千開發者并沒有什么明確的分工,大家主要以“為Linux內核貢獻了多少代碼”作為貢獻多少的判定——也就是說,你有多少代碼被接受并入了mainline或stable分支當中,你就是更加重量級的開發者。無論你的代碼是關于CPU、顯卡、網卡、虛擬化還是別的什么,全部一視同仁(當然,在主干維護者那里會有自己的優先級)。
就Linux 3.0而言,在負責人Linus之下,開發者們以代碼貢獻情況的排名列表是:
左側列表以提交變更的個數排名,右側列表以提交變更的代碼行數排名。簡單的介紹一下名單里部分開發者的背景:
K.Y.Srinivasan
目前就職微軟,貢獻的變更主要針對Hyper-V虛擬驅動。雖然總共提交的變更數高居榜首(343個),但更改的代碼數量只有11564行,因此在右側列表當中排名靠后。
David Miller
目前就職紅帽,貢獻的變更主要針對網絡子系統。
Dan Williams
目前就職于紅帽,貢獻的變更主要針對英特爾isci存儲驅動,總共82466行代碼。
Jonathan Cameron
目前在英國劍橋大學從事研究,貢獻的變更主要針對工業化I/O(iio)子系統。
Takashi Iwai
目前就職于Novell SUSE部門,貢獻的變更主要針對ALSA聲卡驅動子系統。
Larry Finger
目前就職于Web托管網站Lwfinger.net,貢獻的變更主要在于精簡了rt2860sta和rt2870sta驅動的大量代碼。
Dmitry Kravkov
目前就職于Broadcom,貢獻的變更主要在于bnx2x驅動固件的更新。
Vasanthakumar Thiagarajan
目前就職于Atheros,貢獻的變更主要在于精簡了Atheros無線驅動的大量代碼。
Mauro Carvalho Chehab
目前就職于紅帽,貢獻的變更主要在于移除了古老的Micronas drx397xD驅動的代碼。
這樣一看,好像主要參與的開發者都來自Linux相關的公司;事實上也的確如此。在參與Linux 3.0開發的184名開發者當中,大多數來自下面列表中的幾家公司:

(圖片來源)
相比之前版本的開發者參與情況,微軟貢獻代碼數量攀升令很多人感到驚奇,不過考慮到Hyper-V應該沒有那么多的變更需求,這種情況可能以后不會多見;來自非企業的開發者比重則在繼續減少。
好事還是壞事?
站在商業化社會的角度看來,更多的企業雇員因為工作相關的原因參與Linux內核開發并非是一件壞事,這表示Linux內核作為商品的價值和可持續性。
然而這樣的后果就是,主分支對于變更的傾向性會越來越嚴重。這一點可以從最近退出Linux內核開發的愛好者Con Kolivas的專訪內容看出來。
Con Kolivas是一個典型的Linux愛好者,其本職工作在醫院,和Linux開發沒有任何關系。根據Con Kolivas的描述,他因為一開始使用Linux桌面遇到很大的性能問題而參與到社區當中,并開始自己學習內核開發;他編寫的很多補丁(標注為ck的patch)都是針對Linux桌面性能優化的,而且在Linux桌面用戶當中有很多受眾;但是,這些補丁很少被并入到主分支當中去,因為分支維護者總是說有其他更加緊急重要的補丁需要拉入。Con Kolivas感覺終端用戶在Linux內核開發的社區里面根本不受到重視,最終由于這份失落感而決定退出。
從宏觀的角度來看,Linux的主要應用領域在服務器,因此分支維護者將網絡、存儲、虛擬化驅動等補丁排在較高的優先級自然是無可厚非。不過從Linux桌面的角度來看,這樣的發展方向無疑是很不利的,而發行版的開發者不得不自己想辦法解決終端用戶在桌面系統上的一些底層問題。
這就引申到了另一個方向:在Linux桌面領域,我們需要一個與Linux內核領域不一樣的貢獻體系。在這條路上,已經有先行者進行了嘗試,具體情況請看下文分解——《跳出Linux內核的圈子:看Ubuntu的另類之路》。
【編輯推薦】





















