開(kāi)源社區(qū)正以極快的速度向Linux內(nèi)核中添加新功能,同時(shí)又在努力讓修補(bǔ)bug的步伐跟上去。放慢開(kāi)發(fā)速度看上去是不太可能的……
Linux內(nèi)核的最新版本已于本月發(fā)布,它展現(xiàn)了一系列令人眼花繚亂的變化。2.6.23版內(nèi)核的發(fā)布距離上一次內(nèi)核更新只有三個(gè)月,它添加了適合商用的新功能,包括對(duì)虛擬化技術(shù)更好的支持、對(duì)極其重要的調(diào)度器(scheduler)的更新以及新的設(shè)備驅(qū)動(dòng)程序和bug補(bǔ)丁。
每隔兩三個(gè)月就能從Linux Torvalds負(fù)責(zé)維護(hù)的“代碼樹(shù)”上看到大量的變化,這顯示出Linux內(nèi)核的開(kāi)發(fā)速度在不斷加快。到目前為止,這個(gè)開(kāi)發(fā)過(guò)程產(chǎn)生了不可否認(rèn)的高質(zhì)量可靠代碼。
但你也許沒(méi)想到,Torvalds正在把開(kāi)源開(kāi)發(fā)的速度推向新的極限。隨著Linux內(nèi)核的規(guī)模和復(fù)雜度不斷增大,這種快速迭代的更新對(duì)負(fù)責(zé)測(cè)試和修改bug的志愿者社區(qū)帶來(lái)了極大壓力。
Torvalds無(wú)法放慢速度,原因有兩個(gè)。首先,Linux不能在技術(shù)上落后,否則就會(huì)失去要求越來(lái)越苛刻的商業(yè)用戶。因此新內(nèi)核中增加了鉤子(hook),可以利用Intel和AMD處理器內(nèi)嵌的最新虛擬化功能。其次是因?yàn)長(zhǎng)inux需要推動(dòng)開(kāi)發(fā)者社區(qū)的發(fā)展。不斷增加新功能可以使開(kāi)發(fā)者不感到厭倦,否則他們就可能轉(zhuǎn)移到其它項(xiàng)目,另外也能在現(xiàn)有開(kāi)發(fā)者年老或退出的時(shí)候吸引新人才。
Linux非正式而又難以預(yù)測(cè)的新功能路線圖就源自于上述壓力,這也是Linux在添加新功能的同時(shí)保證系統(tǒng)質(zhì)量和穩(wěn)定性的持續(xù)驅(qū)動(dòng)力。這個(gè)已有16年歷史的開(kāi)源項(xiàng)目還能在下一個(gè)16年中繼續(xù)這樣的發(fā)展嗎?“沒(méi)有任何其它開(kāi)源項(xiàng)目能像Linux這樣規(guī)模龐大和發(fā)展迅速,”IBM公司一直關(guān)注 Linux內(nèi)核開(kāi)發(fā)進(jìn)展的副總裁Dan Frye說(shuō),“這是一個(gè)敢為天下先的開(kāi)發(fā)者社區(qū)。”
商業(yè)用戶正是依賴于這種匆忙的開(kāi)發(fā)過(guò)程去改善Linux的許多方面,不僅包括虛擬化技術(shù),還包括電源管理和安全等諸多方面。內(nèi)核的這些快速變化要想體現(xiàn)在紅帽和Novell推出的Linux商業(yè)發(fā)行版中,可能需要長(zhǎng)達(dá)兩年的時(shí)間。大多數(shù)用戶都使用這些公司推出的Linux系統(tǒng),因此獲得了一個(gè)相對(duì)于Linux內(nèi)核瘋狂發(fā)展的緩沖區(qū)。盡管如此,內(nèi)核的發(fā)展仍將決定Linux的未來(lái)。
Linux平均每天增加2000行代碼,盡管Trovalds的目標(biāo)是限制加入內(nèi)核的代碼數(shù)量,以便讓它盡可能高效。Linux的模塊化內(nèi)核是這個(gè)操作系統(tǒng)的核心,負(fù)責(zé)處理所有的通用任務(wù),例如內(nèi)存管理、CPU調(diào)度請(qǐng)求和輸入輸出。它的周圍是數(shù)百個(gè)附加軟件包,用來(lái)完成更具體的任務(wù),例如在 Linux和Windows系統(tǒng)之間傳輸文件,或是對(duì)文件進(jìn)行配置以便通過(guò)Apache Web服務(wù)器顯示出來(lái)。但是內(nèi)核必須不斷發(fā)展,以便處理更多的功能和硬件,滿足更多用戶的需求。Linux在1991年剛誕生時(shí)只是操作系統(tǒng)愛(ài)好者寫出的 10250行代碼,目前的代碼則超過(guò)了八百萬(wàn)行。
有人認(rèn)為,Linux內(nèi)核平均每小時(shí)增加86行代碼的速度正在超越軟件開(kāi)發(fā)的極限。Linux的一位關(guān)鍵維護(hù)者Alan Cox已經(jīng)警告說(shuō),一些設(shè)備驅(qū)動(dòng)程序的修改在加入內(nèi)核之前應(yīng)該經(jīng)過(guò)更多的測(cè)試。Andrew Morton是一位杰出的Linux開(kāi)發(fā)人員,在被Torvalds任命為L(zhǎng)inux內(nèi)核的負(fù)責(zé)人之后有了“內(nèi)核上校”的綽號(hào)。他對(duì)Linux未經(jīng)修改的 bug問(wèn)題也發(fā)表了坦率的看法。“我希望開(kāi)發(fā)者能用更多的時(shí)間去修補(bǔ)bug,而用更少的時(shí)間去添加新功能,”Morton說(shuō),“這是我的個(gè)人意見(jiàn)”。
然而在最近于英國(guó)劍橋舉辦的Linux內(nèi)核峰會(huì)上,Torvalds說(shuō)自己在過(guò)去犯了過(guò)于謹(jǐn)慎的錯(cuò)誤。他認(rèn)為緩慢的內(nèi)核發(fā)布將導(dǎo)致Linux的發(fā)展受阻,因?yàn)楦鞣N新功能都等著被添加到內(nèi)核中。如果沒(méi)有及時(shí)獲得內(nèi)核維護(hù)者和受信任的開(kāi)發(fā)高手的反饋,社區(qū)的貢獻(xiàn)者們就會(huì)失去繼續(xù)提交代碼的興趣。 (Torvalds沒(méi)有對(duì)我們的采訪要求做出回應(yīng)。)
在加快Linux內(nèi)核的開(kāi)發(fā)速度上,Torvalds有些做過(guò)了頭。他依賴于一個(gè)基本的開(kāi)源思想:相對(duì)于更有組織的軟件測(cè)試,大量用戶對(duì)頻繁發(fā)布的代碼進(jìn)行測(cè)試更有可能發(fā)現(xiàn)軟件的缺陷。添加到內(nèi)核中的新代碼一旦在某些硬件上無(wú)法運(yùn)行,或跟其它程序——不論是內(nèi)核中的還是內(nèi)核外的——發(fā)生沖突,就會(huì)導(dǎo)致Linux出錯(cuò)。當(dāng)新代碼出現(xiàn)bug的時(shí)候,人們都指望當(dāng)初提交這些代碼的開(kāi)發(fā)者去解決bug,但他們通常沒(méi)去解決。
內(nèi)核開(kāi)發(fā)人員Jonathan Corbet在Linux基金會(huì)發(fā)布的一份資料上透露,在劍橋的這次峰會(huì)上,Morton說(shuō)自己真想任命一個(gè)“惹人煩的家伙”擔(dān)任Linux內(nèi)核的bug 管理員,他希望這個(gè)人能夠找到bug的來(lái)源,然后“把那些不愿修改bug的開(kāi)發(fā)者痛扁一頓”。Natalie Protasevich是目前被任命的bug管理員。在Morton看來(lái),Protasevich給Linux內(nèi)核的bug清理工作帶來(lái)了更多的紀(jì)律,盡管她缺乏自己更喜歡的那種強(qiáng)硬風(fēng)格。Linux內(nèi)核的Bugzilla數(shù)據(jù)庫(kù)一度記錄了超過(guò)1500個(gè)bug,目前已經(jīng)減少到1400個(gè)。
“在快速的開(kāi)發(fā)過(guò)程與完備的代碼審閱之間,正在形成一種極其微妙的平衡,”Intel公司負(fù)責(zé)Linux和開(kāi)源技術(shù)的主管Dirk Hohndel說(shuō)。即使在目前這種飛快的開(kāi)發(fā)進(jìn)度中,開(kāi)發(fā)者想添加或用戶有需求的功能也不是樣樣都能加進(jìn)內(nèi)核。
Linux的商業(yè)用戶對(duì)這個(gè)過(guò)程可能感到沮喪。對(duì)于歐洲的旅行服務(wù)商Amadeus公司來(lái)說(shuō),Linux是其減少IT基礎(chǔ)設(shè)施成本的戰(zhàn)略關(guān)鍵。該公司負(fù)責(zé)技術(shù)和戰(zhàn)略規(guī)劃的副總裁Fred Bessis說(shuō),通過(guò)淘汰大型機(jī)系統(tǒng),然后在“廉價(jià)的硬件”上運(yùn)行Linux,該公司減少了大約10%的設(shè)備開(kāi)支。該公司采用Linux已有超過(guò)十年的經(jīng)驗(yàn),它了解Linux目前的狀況,也目睹了潛在有用的新功能通往Linux商業(yè)版本的漫長(zhǎng)過(guò)程。
Amadeus公司的高級(jí)系統(tǒng)程序員Holger Weisbrodt說(shuō),新的硬件和驅(qū)動(dòng)很快就能在內(nèi)核中使用,但新的bug診斷和調(diào)試工具“需要很長(zhǎng)時(shí)間才能被加進(jìn)內(nèi)核”。他希望Linux內(nèi)核開(kāi)發(fā)者能對(duì)常用的bug調(diào)試工具更加關(guān)注。
Linux新版內(nèi)核的開(kāi)發(fā)過(guò)程就展示了這種不可預(yù)測(cè)性,具體表現(xiàn)在它所包含的兩個(gè)新功能上:新的調(diào)度器和改善了的虛擬化支持。這兩個(gè)功能與內(nèi)核完全沿著不同的開(kāi)發(fā)路線,分別都有自己的風(fēng)險(xiǎn)和復(fù)雜性。
要能忍受批評(píng)
一個(gè)新功能要想被采用,可能會(huì)經(jīng)歷漫長(zhǎng)而充滿挫折的過(guò)程,Linux內(nèi)核近期最重要的收獲——新的調(diào)度器——就是其中一個(gè)例子。這個(gè)內(nèi)核調(diào)度器想把Unix系統(tǒng)的公平和分時(shí)特性與實(shí)時(shí)操作系統(tǒng)的搶占和快速中斷特性結(jié)合在一起,前者能處理更多的任務(wù)和用戶,而后者能快速響應(yīng)突發(fā)的事件。在商業(yè)化的操作系統(tǒng)中,這兩個(gè)特性往往被作為不同的功能來(lái)實(shí)現(xiàn),而Linux試圖把它們同時(shí)實(shí)現(xiàn)。
內(nèi)核代碼的貢獻(xiàn)者們已經(jīng)花費(fèi)了許多年進(jìn)行調(diào)度器的開(kāi)發(fā),但其中一名開(kāi)發(fā)者——澳大利亞的醫(yī)生Con Kolivas今年夏天在整個(gè)開(kāi)源社區(qū)掀起了一陣波瀾,因?yàn)樗凇栋拇罄麃唫€(gè)人電腦》雜志上發(fā)表了一篇引起熱烈討論的文章,講述了自己為什么沮喪地退出了 Linux開(kāi)發(fā)。
他此前為2.6.23版內(nèi)核編寫了稱為“-ck patchset”的代碼,由Ingo Molnar負(fù)責(zé)審閱。Molnar是紅帽公司的一名開(kāi)發(fā)人員,此前對(duì)多個(gè)調(diào)度器的開(kāi)發(fā)做出了貢獻(xiàn),因此成為調(diào)度器領(lǐng)域受信任的專家之一。他發(fā)現(xiàn) Koliva提交的代碼在調(diào)度的實(shí)時(shí)性方面存在缺陷,于是基于這段代碼編寫了他自己的多用途調(diào)度器版本。這種對(duì)別人的代碼修改后再發(fā)布的做法是通用公共協(xié)議(GPL)所倡導(dǎo)的,內(nèi)核的維護(hù)者會(huì)盡力向代碼的最初貢獻(xiàn)者表示敬意。但Kolivas此前已經(jīng)得知自己的代碼沒(méi)被接受,因此對(duì)這件事感到有些惱怒。
Kolivas遇到了對(duì)每個(gè)開(kāi)發(fā)者都會(huì)造成障礙的一種問(wèn)題。他的設(shè)計(jì)思路是根據(jù)任務(wù)的不同類別去使用不同的調(diào)度器。Torvalds及其伙伴則信奉通過(guò)基本功能把事情一次做好,反對(duì)采用多種替代方式去做同樣的事。他們認(rèn)為這樣能讓軟件的維護(hù)更簡(jiǎn)單,并讓內(nèi)核不同子系統(tǒng)之間的交互更容易預(yù)測(cè)。 Tornalds運(yùn)用自己的影響力推廣了這種架構(gòu)原則,而在討論新代碼的郵件列表上,參與者也大多信奉這一原則。正是在這個(gè)列表進(jìn)行的討論中, Kolivas所寫的代碼經(jīng)歷了并不少見(jiàn)的慘敗。“在Linux內(nèi)核的郵件列表上,討論者對(duì)其他開(kāi)發(fā)者所寫代碼發(fā)表的言論可能比較刺耳,如果有人在一個(gè)商業(yè)公司里說(shuō)同樣的話,他很可能被解雇,”一直訂閱該郵件列表的紅帽公司產(chǎn)品管理負(fù)責(zé)人Joel Berman說(shuō)。
包含在2.6.23版內(nèi)核的調(diào)度器叫做“完全公平調(diào)度器”(Completely Fair Scheduler),如果考慮到調(diào)度器開(kāi)發(fā)過(guò)程中發(fā)生的各種妥協(xié),這個(gè)名字實(shí)在有點(diǎn)兒諷刺。不僅是Kolivas感到生氣,還有其他人想讓調(diào)度器獲得更好的實(shí)時(shí)性能,他們希望在明年能把這方面的改進(jìn)添加到內(nèi)核中。
快速發(fā)展的虛擬化技術(shù)
與圍繞調(diào)度器所發(fā)生的長(zhǎng)期爭(zhēng)論相比,Avi Kivity的經(jīng)歷就簡(jiǎn)單多了。這位來(lái)自以色列的開(kāi)發(fā)者提交了一個(gè)稱作KVM的虛擬化引擎,其中包含了12000行的龐大代碼包。代碼貢獻(xiàn)者在提交一個(gè)補(bǔ)丁的時(shí)候,如果能讓內(nèi)核開(kāi)發(fā)人員和維護(hù)者知道自己的名字,會(huì)對(duì)自己更有利。但是“KVM的到來(lái)非常突然,”Morton說(shuō),“此前我從來(lái)沒(méi)有聽(tīng)說(shuō)過(guò) Kivity本人或他的Qumranet公司”。
Kivity把自己描述為內(nèi)核郵件列表上的“長(zhǎng)期潛水員”,非常喜歡讀上面的內(nèi)容,也熟悉高手之間的攻擊和爭(zhēng)論,但自己并沒(méi)有提交過(guò)太多代碼。他按照自己領(lǐng)會(huì)到的Linux內(nèi)核標(biāo)準(zhǔn)去設(shè)計(jì)KVM,讓熟悉內(nèi)核文件系統(tǒng)的Linux高手們及時(shí)了解代碼的最新進(jìn)展,并及時(shí)答復(fù)內(nèi)核維護(hù)者提出的問(wèn)題和評(píng)論。KVM滿足了Linux的一個(gè)重要需求,因?yàn)殡S著虛擬化技術(shù)受到越來(lái)越多的關(guān)注,Linux內(nèi)核終于具有了相應(yīng)的功能,可以利用Intel和AMD公司的芯片提供的虛擬化接口。KVM還巧妙地利用了內(nèi)核調(diào)度器和內(nèi)存管理器,對(duì)操作系統(tǒng)中的其它模塊幾乎沒(méi)有影響。結(jié)果在去年秋天,KVM提交不到三個(gè)月就被加進(jìn)了Linux內(nèi)核。
Morton說(shuō),添加的代碼如果來(lái)自一位不知名的開(kāi)發(fā)者和一個(gè)剛創(chuàng)立的公司,就會(huì)帶來(lái)一定的風(fēng)險(xiǎn),因?yàn)閮烧叨伎赡芟ВM(jìn)而導(dǎo)致沒(méi)人對(duì)這些代碼非常熟悉。但考慮到這些代碼的獨(dú)立性,即使它們的開(kāi)發(fā)被終止,其它開(kāi)發(fā)者也能很方便地把它們從內(nèi)核中移除。
即使像KVM這樣的代碼被放進(jìn)了內(nèi)核,它們要想被添加到紅帽企業(yè)級(jí)Linux和SUSE企業(yè)服務(wù)器這兩個(gè)最主要的企業(yè)版Linux,也要延后一兩年時(shí)間。(像紅帽的Fedora和Novell的OpenSUSE這類“社區(qū)發(fā)行版”,其內(nèi)核就更新得比較快。)這主要是為了進(jìn)行廣泛的測(cè)試和為技術(shù)支持做準(zhǔn)備。許多企業(yè)級(jí)用戶都對(duì)企業(yè)版Linux的穩(wěn)定性感到滿意,而不愿意使用功能最多的最新內(nèi)核。
不論如何,Linux在各種操作系統(tǒng)的競(jìng)爭(zhēng)中跑在了前列,因?yàn)橛幸淮笈_(kāi)發(fā)者正把各種新功能加進(jìn)內(nèi)核。這些代碼貢獻(xiàn)者可能是為了獲取名聲或滿足好奇,有時(shí)則是為了得到薪水。在最近的28個(gè)月里,共有11個(gè)新內(nèi)核被發(fā)布,其中可以識(shí)別的個(gè)人貢獻(xiàn)者從479人增加到了838人。按照一般估計(jì),每個(gè)在代碼中留名的開(kāi)發(fā)者平均獲得了大約三到四個(gè)人的幫助。這意味著大約有三千人參與了Linux內(nèi)核的每一次迭代更新。
Linux的發(fā)展就是依賴于這個(gè)志愿者社區(qū),盡管內(nèi)核的維護(hù)者、也就是領(lǐng)導(dǎo)Linux各個(gè)子系統(tǒng)開(kāi)發(fā)的高手們是由一些公司支付薪水,比如 Google、惠普、IBM、Novell和紅帽。正是因?yàn)榇嬖谶@個(gè)社區(qū),Morton才會(huì)說(shuō)在開(kāi)發(fā)速度和可靠性之間沒(méi)有一種“絕對(duì)的折衷”,因?yàn)橹挥凶屝鹿δ鼙M快加入內(nèi)核,才能在添加到商業(yè)發(fā)行版之前得到更好的測(cè)試。
然而與來(lái)自商業(yè)公司的代碼相比,這樣的開(kāi)發(fā)還是存在缺陷。“我不想把這種情況叫做‘不可預(yù)測(cè)’,但它確實(shí)無(wú)法保證一個(gè)交付日期,”Intel公司的Hohndel說(shuō),“因?yàn)長(zhǎng)inux的代碼一旦編寫好就會(huì)被提交。”
在接下來(lái)的兩到三個(gè)月內(nèi),Torvalds將發(fā)布2.6.24版內(nèi)核。這個(gè)版本包含的許多新功能是由數(shù)百名全新面孔的人員開(kāi)發(fā)和測(cè)試的,他們沒(méi)有參與過(guò)這個(gè)月發(fā)布的2.6.23版內(nèi)核的開(kāi)發(fā)。無(wú)法預(yù)知在新版本內(nèi)核的諸多功能中,最后有多少會(huì)加入經(jīng)過(guò)商業(yè)測(cè)試的Linux發(fā)行版。這實(shí)在不能算作人們通常所指的產(chǎn)品“路線圖”。但起碼到目前,這種開(kāi)發(fā)方式還沒(méi)有駛向錯(cuò)誤的方向。
|
新聞熱點(diǎn)
疑難解答
圖片精選