最近不單只是看android開發(fā)與測試相關(guān)知識,也在了解這之外相關(guān)的信息.畢竟,自己的眼界不能太狹窄.今天我在逛一個android論壇上時候看到一個很老的帖子,轉(zhuǎn)了個關(guān)于android被從linux分支樹上移除的新聞.
以為是假新聞來著,后面上網(wǎng)找了找,還真是搜索出一堆結(jié)果,發(fā)現(xiàn)有些比較大的IT網(wǎng)站上也有.看樣子是假不了了.
原文上說是linux內(nèi)核開發(fā)者Greg Kroah-Hartman認(rèn)為android"no one seemed to be working on it"
想著android系統(tǒng)實際上使用了linux內(nèi)核,而linux講究的是開源,android雖然開源,確實商用的.中間可能有沖突的地方.難道是其中某些沖突引起了這樣的結(jié)果?
最后在維基百科上android詞條(http://zh.wikipedia.org/wiki/Android)頁面的結(jié)尾部分找到了這么一段:
"
Android是執(zhí)行于Linux
kernel之上,但并不是GNU/Linux。因為在一般GNU/Linux里支持的功能,Android大都沒有支持,包括Cairo、X11、
Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再
以opencore取代FFmpeg等等。Android為了達(dá)到商業(yè)應(yīng)用,必須移除被GNU
GPL授權(quán)證所約束的部份,例如Android將驅(qū)動程序移到userspace,使得Linux driver與Linux
kernel徹底分開。bionic/libc/kernel/ 并非標(biāo)準(zhǔn)的kernel header files。Android的kernel
header是利用工具由Linux kernel header所產(chǎn)生的,這樣做是為了保留常數(shù)、資料結(jié)構(gòu)與宏。
"
可見,從最直觀上來看,android將linux內(nèi)核拿過來之后去掉了不少功能,然后通過一些手段繞開了GPL授權(quán).它的linux內(nèi)核已經(jīng)和GNU
Linux相差的太大了.然而,更具體的情況是什么樣的呢?即android被移出linux分支樹的更具體的說明.
終于找到了,摘抄在后面(摘自:http://www.ej38.com/showinfo/linux-199996.html)
-----------------------------------------------------------------------------------------------------------------------------------------------------
Greg Kroah-Hartman寫了一篇詳細(xì)的文章,解釋這個決定。下面就來看看,他是怎么說的,以及Android到底是一個什么樣的系統(tǒng)。
在這之前,你最好知道Greg
Kroah-Hartman是誰。他是目前LinuxKernel的核心開發(fā)人員,負(fù)責(zé)stable軟件包的發(fā)布。就是說,每一個新版本的
LinuxKernel,都是經(jīng)過他的手流出來的。此外,他還負(fù)責(zé)硬件驅(qū)動的部署。而他的手機(jī)就是HTCG1,每天都在使用。所以,他是絕對有資格談?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 hadbeen having for
many years: a free version of Java and a unifiedapplication layer that
programmers can write to that will work on allphone platforms that
integrate it.
它解決了長期令手機(jī)制造商頭痛不已的問題:業(yè)界缺乏一個開源的Java虛擬機(jī),以及統(tǒng)一的應(yīng)用程序接口。現(xiàn)在,程序員只要寫一次程序,就能在各種手機(jī)硬件平臺之上使用。”
這段話解釋了,為什么Android的應(yīng)用程序,都必須用Java語言開發(fā)。因為不這樣做的話,沒法讓程序做到硬件無關(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
下運作,那么就必須要有驅(qū)動程序。如果驅(qū)動程序的程序代碼公開,等于硬件規(guī)格也公開的差不多了。許多廠商不愿意這么做,所以就提供編好的驅(qū)動程序,但不提
供原始碼。Android
的重點就是商業(yè)應(yīng)用,Google采用了一些手法來繞過這問題。他們把驅(qū)動程序移到"userspace",也就是說,把驅(qū)動程序變成在 Linux
kernel 上頭跑,而不是一起跑的東西,這樣就可以避過GPL。然后,在kernel 這邊開個小門,讓本來不能直接控制到硬件的
"userspace" 程序也可以碰得到,這樣只要把"開個小門"的程序代碼公布就行啦。”看明白了嗎?
這段話的意思是說,Google玩了一個花招,在kernel和應(yīng)用程序之間,自己做了一個中間層,這樣就既不違反GPL許可,又能不讓外界看到廠商的硬件驅(qū)動和應(yīng)用程序的源碼。
里面的關(guān)鍵在于,Kernel和Android的許可證不一樣,前者是GPL許可證,后者是Apache
SoftwareLicense(簡稱ASL)許可證。GPL許可證規(guī)定,對源碼的任何修改都必須開源,所以Android開源了,因為它修改了
Kernel。而ASL許可證規(guī)定,可以隨意使用源碼,不必開源,所以建筑在Android之上的硬件驅(qū)動和應(yīng)用程序,都可以保持封閉。為了得到更多廠商
的支持,Google有意選擇了這樣做,并且特意修改Kernel,使得原本應(yīng)該包括在kernel中的某些功能,都被轉(zhuǎn)移到了userspace之中,
因此得以避開開源。
這樣做或許有利于推廣Android,吸引廠商和軟件開發(fā)商的加入,但是Google也放棄了構(gòu)建一個真正開源的手機(jī)系統(tǒng)的機(jī)會,從而也就不能獲得由全世
界程序員提供智慧、分享代碼、推動創(chuàng)新的好處。關(guān)于許可證問題的深入討論,請閱讀Ryan Paul的文章《Why Google chose the
Apache Software License over GPLv2 for Android》。
Google的這種做法,直接后果就是給Linux Kernel帶來了麻煩。Greg Kroah-Hartman清楚地說出了自己的不滿。
“...any
drivers written for Android hardware platforms, can not getmerged into
the main kernel tree because they have dependencies on codethat only
lives in Google's kernel tree, causing it to fail to build inthe
kernel.orgtree.所有為Android寫的硬件驅(qū)動,都不能合并入kernel。因為它們只在Google的代碼里有效,在kernel里
根本沒法用。
Because of this, Google has now prevented a large
chunk of hardwaredrivers and platform code from ever getting merged into
the main kerneltree. Effectively creating a kernel branch that a number
of differentvendors are now relying
on.由于這個原因,Google也從不把大量的硬件驅(qū)動程序和平臺源碼向kernel提交。實際上,它創(chuàng)造出了一個kernel的分支,大量的開發(fā)者都
依賴那個分支。”
這就是Android干的事情:它修改了Kernel,但是又不提供修改的細(xì)節(jié),自己搞了一個封閉的系統(tǒng)。說得難聽一點,它利用了開源社區(qū),要求開源社區(qū)為它做貢獻(xiàn),卻又不愿提供回報。
所以,Linux Kernel就把Android踢出去了,真是再正常不過了。
人們有權(quán)利質(zhì)疑,Android這樣的哲學(xué)是否正確?是否符合Google“不作惡”的口號?如果Android繼續(xù)這樣封閉下去,那么開源社區(qū)為什么要
為它免費制作軟件呢?因為我又不是在為開源社區(qū)服務(wù),而是在為Google服務(wù)。既然這樣的話,那還不如去支持iPhone呢,至少能在軟件商店里多賣一
點錢,而且喬布斯看上去也更酷一點。slashdot上有很多關(guān)于此事的討論。有人指出:“Google自己的網(wǎng)站,與微軟的網(wǎng)站一樣封閉。它開源出來的
東西,都是根據(jù)GPL許可證不得不開源的。”
好吧,姑且不談Google本身,因為它至少不要求外界提供支持。但是Android不一樣,你不能假裝成開源系統(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 fixtheir
codebase to get it merged upstream to stop the huge blockage thatthey
have now caused in a large number of embedded Linux hardwarecompanies.
我確實希望Google做出改變,把它的代碼合并進(jìn)我們的代碼,彌補(bǔ)已經(jīng)出現(xiàn)的代碼分裂。
I've privately
offered in the past to help this work get done, andam doing again here
publicly. But I need the help of the Googledevelopers to make it happen,
without them, nothing can change.
我私底下已經(jīng)說過,我愿意幫助完成這項工作,在這里我再次公開這樣說。但是如果沒有Google程序員的加入,什么也不會發(fā)生。”