Android:最成功的Linux發(fā)行版正面臨兩敗俱傷的結(jié)果
關(guān)于Android項(xiàng)目和內(nèi)核主分支開(kāi)發(fā)社區(qū)的關(guān)系,已經(jīng)談?wù)摰脡蚨嗔?。在LinuxCon大會(huì)日本站,詹姆斯·博頓利(譯者注:James Bottomley,Linux SCSI子系統(tǒng)的維護(hù)者)又深入探討了這個(gè)問(wèn)題。他說(shuō),從Android和內(nèi)核主分支分道揚(yáng)鑣這件事上,我們可以吸取一些有趣的教訓(xùn)。如果內(nèi)核開(kāi)發(fā)社區(qū)能關(guān)注到Android在干什么,那么我們以后處理這些問(wèn)題可能會(huì)更得心應(yīng)手。
詹姆斯首先給Android下了個(gè)定義,很簡(jiǎn)單,它是有史以來(lái)最成功的Linux發(fā)行版。它的市場(chǎng)占有率是其他桌面和服務(wù)器發(fā)行版所望塵莫及的。Android的成功很驚人,但總結(jié)起來(lái)歸結(jié)于:
- 自立門(mén)戶,和官方內(nèi)核走不同的路
- 重寫(xiě)了工具鏈和C庫(kù)
- 開(kāi)發(fā)了一套自己的Java應(yīng)用框架,并且
- 極度不喜歡GPL
詹姆斯說(shuō),換句話說(shuō),Android為“如何跟開(kāi)源社區(qū)對(duì)著干”樹(shù)立了榜樣 。我們讓他們別做的事情,他們都做了,并且做得很好。我們一直想讓Android開(kāi)發(fā)人員回到正道上來(lái)時(shí),但他們的成功似乎證明了,需要改變的,不只是他們。也許內(nèi)核開(kāi)發(fā)社區(qū)也應(yīng)該重新評(píng)估,我們?cè)诖a質(zhì)量和市場(chǎng)成功兩者之間到底如何權(quán)衡取舍。他問(wèn)道,我們是否需要一套更面向商業(yè)的制度?
這場(chǎng)討論的一個(gè)重大假設(shè)是,自立門(mén)戶是一件壞事。Android一開(kāi)始就自己?jiǎn)胃懔艘惶變?nèi)核,然后另起爐灶開(kāi)發(fā)了自己的用戶空間代碼。內(nèi)核社區(qū)適時(shí)地譴責(zé)了這種做法。但我們還是有必要去理解當(dāng)時(shí)Android開(kāi)發(fā)人員想干什么。他們一開(kāi)始先要找到想采用Android的人,然后才會(huì)真正動(dòng)手去實(shí)現(xiàn)這個(gè)系統(tǒng)。這個(gè)時(shí)候,時(shí)間壓力就會(huì)很大。他們需要盡快搞定。對(duì)于內(nèi)核社區(qū)走查和接受補(bǔ)丁代碼的流程,有很多話可以說(shuō),但這個(gè)流程確實(shí)還有可以改進(jìn)的地方。谷歌顯然等不到他們的補(bǔ)丁被接受,因他們要發(fā)布Android,所以除了單干以外別無(wú)選擇。
自立門(mén)戶有錯(cuò)嗎?詹姆斯說(shuō),從某種意義上來(lái)說(shuō),沒(méi)錯(cuò):畢竟GPL保障了這種權(quán)利。因?yàn)樽约焊阕约旱?,有時(shí)候還是有必要的,所以這種權(quán)利必須被保證。沒(méi)有實(shí)踐機(jī)會(huì)的權(quán)利是毫無(wú)意義的。在這個(gè)事情上,如果Android跟著官方內(nèi)核走,那他們很難在短時(shí)間內(nèi)達(dá)到商用目標(biāo)(指的是電源管理和其他一些東西)。如果那樣,結(jié)果將會(huì)是Android延遲發(fā)布,它獲得市場(chǎng)成功的可能性就小了,甚至完全錯(cuò)過(guò)市場(chǎng)的檔期,成為一個(gè)失敗的產(chǎn)品。所以,自立門(mén)戶有時(shí)候是好事,能使開(kāi)發(fā)團(tuán)隊(duì)更快地做出產(chǎn)品,而你要走內(nèi)核社區(qū)的審核流程,就慢了。
自立門(mén)戶就意味著分裂嗎?他問(wèn)道。這是一個(gè)很重要的問(wèn)題。分裂扼殺了90年代的UNIX市場(chǎng)。詹姆斯聲稱(chēng),如果自立門(mén)戶失敗了,它就消亡了,不會(huì)導(dǎo)致分裂。自立門(mén)戶后,又把開(kāi)發(fā)出來(lái)的代碼合并回原來(lái)的項(xiàng)目,那也不會(huì)產(chǎn)生分裂,他們會(huì)帶著他們的代碼和開(kāi)發(fā)人員回歸到最初的項(xiàng)目中。只有這樣的自立門(mén)戶是有害的:他們?nèi)〉昧艘恍┏晒Γ糠值纳鐓^(qū)力量轉(zhuǎn)而成為他們的擁躉,這些人再也不會(huì)回到原來(lái)的項(xiàng)目中。此時(shí),開(kāi)發(fā)社區(qū)要幫助這些自立門(mén)戶的人把他們的代碼合并回原來(lái)的項(xiàng)目,這顯得非常重要。
Android開(kāi)發(fā)人員,不止是自立門(mén)戶,而且抱這樣一種態(tài)度:GPL對(duì)商用是有害無(wú)益的。Android起初的計(jì)劃是完全不使用GPL授權(quán)的代碼,他們準(zhǔn)備寫(xiě)一個(gè)新的內(nèi)核。但后來(lái)很多原因迫使他們采用了Linux內(nèi)核,還有其他一些GPL授權(quán)的組件。詹姆斯說(shuō),所以我們應(yīng)該感謝安迪·魯賓(譯者注:Android之父)——對(duì)GPL的憎恨就來(lái)自他——他向世人展示了采用GPL授權(quán)代碼的手機(jī)也能獲得市場(chǎng)的成功??雌饋?lái)下游廠商根本不關(guān)心他們?cè)O(shè)備里面運(yùn)行的代碼的授權(quán)許可證是什么,只要這個(gè)許可證清晰并能遵守就行了。
Anroid特殊的應(yīng)用框架如何?詹姆斯說(shuō),基于Java的應(yīng)用框架是Android最創(chuàng)新的部分之一。它抽象了平臺(tái)的細(xì)節(jié),使應(yīng)用層盡量遠(yuǎn)離內(nèi)核。這個(gè)框架限制了應(yīng)用程序能使用的API,對(duì)應(yīng)用進(jìn)行了更多的控制。鑒于這個(gè)系統(tǒng)的結(jié)構(gòu),重寫(xiě)C庫(kù)似乎是完全沒(méi)必要的??蚣軐又系膽?yīng)用不可能直接使用它。
所以,Android不是什么都錯(cuò),但確實(shí)有一些錯(cuò)誤。從詹姆斯的觀點(diǎn)來(lái)看,最大的錯(cuò)誤就是它的日歷程序不支持SyncML(譯者注:一種平臺(tái)無(wú)關(guān)的信息同步標(biāo)準(zhǔn)協(xié)議集,可以在不同手機(jī)間同步數(shù)據(jù))。這使得Android手機(jī)對(duì)于商務(wù)用戶來(lái)說(shuō)沒(méi)什么用。黑莓(Blackberry)成功的關(guān)鍵之一就是它的日歷做得非常好。摩托羅拉(Motorola)就意識(shí)到了這個(gè)問(wèn)題,并且為他們的Droid手機(jī)自主開(kāi)發(fā)了支持SyncML的應(yīng)用。但這使事情變得更糟,因?yàn)檫@會(huì)使用戶誤以為Android手機(jī)都支持SyncML。當(dāng)他們拿到一臺(tái)非Droid的手機(jī)時(shí),他們會(huì)很失望,并且最終去買(mǎi)一部iPhone。Android直到2.1才支持SyncML,是完全從頭去實(shí)現(xiàn)的。這個(gè)錯(cuò)誤的代價(jià)就是一年內(nèi)沒(méi)什么公司愿意用Android。
當(dāng)然,Android的另一個(gè)問(wèn)題是開(kāi)發(fā)門(mén)檻。Android看起來(lái)是個(gè)開(kāi)源項(xiàng)目,但是谷歌完全掌握著基線版本的控制權(quán)。沒(méi)人能看到代碼,直到谷歌把代碼放出來(lái)為止。沒(méi)有任何合作伙伴貢獻(xiàn)的修改,所以根本沒(méi)什么開(kāi)發(fā)社區(qū),沒(méi)什么共享制度可言。舉個(gè)例子,如果Android愿意接受外部幫助的話,它原本可以更快地解決它的日歷問(wèn)題。谷歌對(duì)Android的完全控制是為了更好地專(zhuān)注于市場(chǎng)。如果想統(tǒng)治市場(chǎng),這是必要的先決條件,但對(duì)于內(nèi)核開(kāi)發(fā)社區(qū)來(lái)說(shuō),這不是好事,這也使谷歌被迫去做“重復(fù)發(fā)明輪子”的事情。
還有一個(gè)錯(cuò)誤,正在被甲骨文(Oracle)起訴。這個(gè)案子的起因是Android重寫(xiě)了Java,并且接下來(lái)和GPL唱反調(diào)。如果Android是建立在甲骨文的GPL授權(quán)的Java之上的話,就不會(huì)有這樁訴訟了,而谷歌也會(huì)受到GPL的默示專(zhuān)利許可(implied patent license)的保護(hù)。如果甲骨文贏了,那么為繞開(kāi)許可證而重寫(xiě)Java將是一次非常昂貴的嘗試。更可悲的是,許可證其實(shí)是無(wú)關(guān)緊要的,因?yàn)镴ava運(yùn)行環(huán)境把上層應(yīng)用隔開(kāi)了,上層應(yīng)用無(wú)需遵守GPL。
教訓(xùn)
從中我們可以學(xué)到什么教訓(xùn)?詹姆斯重申了自立門(mén)戶可以變成一件好事,只要開(kāi)發(fā)成果能夠回歸。盡管做了很多努力,Android內(nèi)核的開(kāi)發(fā)成果沒(méi)有回歸到官方內(nèi)核。而且我們也不清楚內(nèi)核社區(qū)提出的方案時(shí),Android開(kāi)發(fā)人員有沒(méi)有參與其中。他說(shuō),也許我們應(yīng)該使合并代碼變得更簡(jiǎn)單。內(nèi)核社區(qū)應(yīng)該找到更好的辦法來(lái)處理這個(gè)流程。目前的流程很容易卡在代碼走查這個(gè)環(huán)節(jié),尤其是當(dāng)代碼量很大的時(shí)候。
自立門(mén)戶的項(xiàng)目也需要思考他們的流程。自立門(mén)戶容易產(chǎn)生“非我發(fā)明”的心態(tài)(譯者注:not-invented-here,指拒絕使用非自己創(chuàng)造的技術(shù)),導(dǎo)致他們不愿意公示自己的開(kāi)發(fā)成果。因?yàn)榘l(fā)布代碼去找罵,誰(shuí)也不愿意。自立門(mén)戶時(shí)間越長(zhǎng),情況就越糟,因?yàn)楦恼镜脑O(shè)計(jì)錯(cuò)誤(內(nèi)核社區(qū)的觀點(diǎn):wakelocks機(jī)制就是一個(gè)錯(cuò)誤)會(huì)更難。為防止這種錯(cuò)誤發(fā)生,需要這些項(xiàng)目變得更包容,經(jīng)常發(fā)布他們的代碼,并向內(nèi)核社區(qū)咨詢意見(jiàn)——即使他們不打算采納。打破壁壘,使思想能夠相互交流,這很重要。
詹姆斯又談了一點(diǎn)關(guān)于“許可證恐懼”,他指出GPL就是我們的懼、惑、疑(譯者注:即FUD,F(xiàn)ear,Uncertainty,Doubt,這是一個(gè)專(zhuān)用名詞,指向客戶灌輸其他競(jìng)爭(zhēng)公司產(chǎn)品的負(fù)面觀念)。內(nèi)核社區(qū)對(duì)許可證的討論,看起來(lái)很?chē)樔?。他們?duì)這個(gè)問(wèn)題也需要降降溫。對(duì)GPL的恐懼往往是受外部利益驅(qū)使,但我們也在盡可能使他們能受益。內(nèi)核社區(qū)應(yīng)該主動(dòng)出擊,幫助大家消除這種恐懼。比如,可以幫助Android看看能不能換用GPL授權(quán)的代碼。Linux基金會(huì)曾經(jīng)做過(guò)一些工作,但詹姆斯認(rèn)為內(nèi)核社區(qū)應(yīng)該提供幫助。他說(shuō),其實(shí)相較于大多數(shù)商業(yè)許可證協(xié)議,遵守GPL更容易。這一點(diǎn)我們必須要澄清。
在遵守GPL的問(wèn)題上,我們必須澄清一些界線。比如,用戶空間的代碼,不算是起源于內(nèi)核(譯者注:這樣就不需要遵守GPL)。明白了這些界線,可以幫助大家消除對(duì)GPL的恐懼。
內(nèi)核社區(qū)應(yīng)該更好地培養(yǎng)和擁抱多樣化,鼓勵(lì)別人單干(這可能帶來(lái)重大的進(jìn)步)并幫助他們回歸。詹姆斯說(shuō),在這個(gè)問(wèn)題上,內(nèi)核社區(qū)只能說(shuō)是勉強(qiáng)及格,還有很大改進(jìn)空間。我們接受的代碼,只來(lái)自于和我們有一樣價(jià)值觀的人。這造成的結(jié)果就是,把Android內(nèi)核合并回來(lái)的難度越來(lái)越大。
公司如果想掌握項(xiàng)目的控制權(quán),應(yīng)該以贊成或反對(duì)的方式,而不是獨(dú)自占有項(xiàng)目的所有權(quán)。李納斯·托瓦茲(譯者注:Linus Torvalds,Linux創(chuàng)始人)是一個(gè)很好的例子,他有很大的控制權(quán),但這只是因?yàn)閮?nèi)核社區(qū)相信他能做出正確的判斷。也就是說(shuō),社區(qū)如果信任你,那么他們很高興交出大量控制權(quán)。這就是為什么“善良的獨(dú)裁者”模式能大行其道。另一方面,如果公司通過(guò)拒人門(mén)外的手段來(lái)昭示它的控制權(quán),或者逼貢獻(xiàn)代碼者交出版權(quán),這必然會(huì)與開(kāi)源社區(qū)交惡。
詹姆斯說(shuō),總之,對(duì)于所有牽涉其中的人來(lái)說(shuō),Android是一個(gè)兩敗俱傷的結(jié)果。我們所有人都必須好好想想,如何才能做得更好。我們需要找到更好的辦法來(lái)鼓勵(lì)和管理自立門(mén)戶的項(xiàng)目,并消除對(duì)許可證的恐懼。自立門(mén)戶的項(xiàng)目也應(yīng)該想著要合并回去。這樣,項(xiàng)目(比如Android)既能取得商業(yè)成功,也能在社區(qū)中取得成功。
原文地址:http://select.yeeyan.org/view/234039/204194
【編輯推薦】