而日前,有一位名為“阮一峰”的網(wǎng)友就根據(jù)國外的一些業(yè)內(nèi)狀況對Android的發(fā)展提出了自己的看法,Android真的像Linux那樣開源,而Google也真有那么偉大嗎?此文非常值得大家一讀:
我也曾經(jīng)對Android充滿了期待,但是后來的事態(tài)發(fā)展,令我改變了看法。前幾天,我就在網(wǎng)志上寫了自己的擔(dān)憂:“首先,Android應(yīng)用程序只能用java語言開發(fā)。其次,Google對Android采用了一種全面霸權(quán)式的管理,完全不是其他開源軟件的開發(fā)方式,一切都由Google說了算,很多地方是黑箱,外界不得而知。”
沒有想到,僅僅過了兩天,擔(dān)憂就變成了現(xiàn)實(shí)。Linux Kernel的維護(hù)者Greg Kroah-Hartman宣布,將Android 代碼從 Linux kernel 代碼庫中刪除。這意味著,Linux Kernel的開發(fā)小組不認(rèn)可Android的貢獻(xiàn),兩者產(chǎn)生了沖突。
消息公布以后,外界普遍覺得驚訝和可惜。好不容易,才有了一個這么受歡迎的開源手機(jī)系統(tǒng),應(yīng)該齊心協(xié)力、共同開發(fā)才對,為什么要“窩里斗”呢?到底是什么矛盾,使得Linux Kernel小組剔除Android代碼呢?
Greg Kroah-Hartman寫了一篇詳細(xì)的文章,解釋這個決定。下面就來看看,他是怎么說的,以及Android到底是一個什么樣的系統(tǒng)。
在這之前,你最好知道Greg Kroah-Hartman是誰。他是目前Linux Kernel的核心開發(fā)人員,負(fù)責(zé)stable軟件包的發(fā)布。就是說,每一個新版本的Linux Kernel,都是經(jīng)過他的手流出來的。此外,他還負(fù)責(zé)硬件驅(qū)動的部署。而他的手機(jī)就是HTC G1,每天都在使用。所以,他是絕對有資格談?wù)撨@個問題的,他的看法代表了Linux社區(qū)對Android的看法。
首先,他指出Android和其他的Linux發(fā)行版不一樣:
“Google has taken the Linux kernel, and nothing else from a “traditional” Linux system. Google只用了kernel,別的東西都沒用。”
這就是說,與Ubuntu、Debian、Redhat這樣的傳統(tǒng)Linux發(fā)行版相比,只有系統(tǒng)的底層結(jié)構(gòu)是一樣的,其他東西在Android里都不一樣,尤其是程序員的編程接口是完全不同的。因此,Android應(yīng)用程序都必須重新寫過,現(xiàn)存的Linux程序無法移植上去。所以,從嚴(yán)格意義上說,Android是一種全新的系統(tǒng),它與Linux的距離,比Mac OS與Linux的距離還要遠(yuǎn)。
然后,Greg Kroah-Hartman肯定了Android這樣做的積極意義: “Android also solves the problem that the phone manufacturers had been having for many years: a free version of Java and a unified application layer that programmers can write to that will work on all phone platforms that integrate it. 它解決了長期令手機(jī)制造商頭痛不已的問題:業(yè)界缺乏一個開源的Java虛擬機(jī),以及統(tǒng)一的應(yīng)用程序接口。現(xiàn)在,程序員只要寫一次程序,就能在各種手機(jī)硬件平臺之上使用。”
這段話解釋了,為什么Android的應(yīng)用程序,都必須用Java語言開發(fā)。因?yàn)椴贿@樣做的話,沒法讓程序做到硬件無關(guān)。
且慢,這真的是理由嗎?傳統(tǒng)的Linux系統(tǒng),也并不依賴特定的硬件啊!只要把源代碼根據(jù)不同的平臺,分別編譯一下,同一個程序不也照樣可以在不同的硬件架構(gòu)、不同的Linux發(fā)行版中使用嗎?
那么,Android只采用kernel、只允許用java編程的真正原因,到底是什么?
臺灣的科技網(wǎng)志MMDays一語道破真相:
“Linux kernel的版權(quán)是GPL。 這下問題來了:如果你是硬件廠商,希望你的硬件能在 Linux kernel 下運(yùn)作,那么就必須要有驅(qū)動程序。如果驅(qū)動程序的程序代碼公開,等于硬件規(guī)格也公開的差不多了。許多廠商不愿意這么做,所以就提供編好的驅(qū)動程序,但不提供原始碼。
Android 的重點(diǎn)就是商業(yè)應(yīng)用,Google采用了一些手法來繞過這問題。他們把驅(qū)動程序移到 “userspace”,也就是說,把驅(qū)動程序變成在 Linux kernel 上頭跑,而不是一起跑的東西,這樣就可以避過GPL。然后,在 kernel 這邊開個小門,讓本來不能直接控制到硬件的 “userspace” 程序也可以碰得到,這樣只要把”開個小門”的程序代碼公布就行啦。”
看明白了嗎?
這段話的意思是說,Google玩了一個花招,在kernel和應(yīng)用程序之間,自己做了一個中間層,這樣就既不違反GPL許可,又能不讓外界看到廠商的硬件驅(qū)動和應(yīng)用程序的源碼。
這樣做或許有利于推廣Android,吸引廠商和軟件開發(fā)商的加入,但是也給Linux Kernel帶來了麻煩。Greg Kroah-Hartman直截了當(dāng)說出了自己的不滿。
“…any drivers written for Android hardware platforms, can not get merged into the main kernel tree because they have dependencies on code that only lives in Google’s kernel tree, causing it to fail to build in the kernel.org tree. 所有為Android寫的硬件驅(qū)動,都不能合并入kernel。因?yàn)樗鼈冎辉贕oogle的代碼里有效,在kernel里根本沒法用。 Because of this, Google has now prevented a large chunk of hardware drivers and platform code from ever getting merged into the main kernel tree. Effectively creating a kernel branch that a number of different vendors are now relying on. 由于這個原因,Google也從不把大量的硬件驅(qū)動程序和平臺源碼向kernel提交。實(shí)際上,它創(chuàng)造出了一個kernel的分支,大量的開發(fā)者都依賴那個分支。”
這就是Android干的事情:它修改了Kernel,但是又不提供修改的細(xì)節(jié),自己搞了一個封閉的系統(tǒng)。說得難聽一點(diǎn),它利用了開源社區(qū),要求開源社區(qū)為它做貢獻(xiàn),卻又不愿提供回報(bào)。
所以,Linux Kernel就把Android踢出去了,真是再正常不過了。
人們有權(quán)利質(zhì)疑,Android這樣的哲學(xué)是否正確?是否符合Google“不作惡”的口號?如果Android繼續(xù)這樣封閉下去,那么開源社區(qū)為什么要為它免費(fèi)制作軟件呢?因?yàn)槲矣植皇窃跒殚_源社區(qū)服務(wù),而是在為Google服務(wù)。既然這樣的話,那還不如去支持iPhone呢,至少能在軟件商店里多賣一點(diǎn)錢,而且喬布斯看上去也更酷一點(diǎn)。
slashdot上有很多關(guān)于此事的討論。有人指出:“Google自己的網(wǎng)站,與微軟的網(wǎng)站一樣封閉。它開源出來的東西,都是根據(jù)GPL許可證不得不開源的。”
好吧,姑且不談Google本身,因?yàn)樗辽俨灰笸饨缣峁┲С帧5茿ndroid不一樣,你不能假裝成開源系統(tǒng),騙取社區(qū)的支持,然后又干著封閉系統(tǒng)的勾當(dāng)。
Google必須做出選擇。正如Greg Kroah-Hartman最后的呼吁:
“I really don’t know. Google shows no sign of working to get their code upstream anymore. 我真的不知道未來。Google看上去沒有任何改變代碼的跡象。 I do hold out hope that Google does come around and works to fix their codebase to get it merged upstream to stop the huge blockage that they have now caused in a large number of embedded Linux hardware companies. 我確實(shí)希望Google做出改變,把它的代碼合并進(jìn)我們的代碼,彌補(bǔ)已經(jīng)出現(xiàn)的代碼分裂。
I’ve privately offered in the past to help this work get done, and am doing again here publicly. But I need the help of the Google developers to make it happen, without them, nothing can change. 我私底下已經(jīng)說過,我愿意幫助完成這項(xiàng)工作,在這里我再次公開這樣說。但是如果沒有Google程序員的加入,什么也不會發(fā)生。”
Android必須變成一個真正的開源系統(tǒng)。如果像現(xiàn)在這樣封閉下去,就會被開源社區(qū)拋棄,就一定不會成功,即使有Google的支持。
|