應賽迪網寫的專稿:
http://java.ccidnet.com/art/12013/20071228/1325101_1.html
Android動了Java的奶酪?
Android,號稱“史上首個全免費開放的手機平臺”。Google Android動了誰的奶酪?是Apple,還是微軟?互聯網時代奇跡般崛起的Google,已經成為微軟的心腹大患。然而不論Google OS的謠言傳得多么活靈活現,業界多么意淫Google直接挑戰微軟Windows操作系統,然而Google從來都是按兵不動。Google看得很清楚,桌面操作系統時代快要結束了,現在是掌上操作系統時代登場了,誰能夠先一步占領消費者的手掌,誰才是真正的贏家。這一次,Google終于亮劍了,亮出來的絕對是一把無堅不摧的利劍——Android。這回該輪到Sun頭痛了,原來Android動的就是Sun的奶酪。
一、 Android,Java平臺的盜版?
首先,Java編程語言與Java平臺是兩個完全不同的概念。前者泛指一系列編程的語法,而后者包括前者,同時又超出前者的范圍。就一般而言,Java平臺由三駕馬車組成:核心的Java APIs(包、框架及類庫)、Java字節碼(編譯且可執行的形式)以及Java虛擬機(JVM,執行字節碼的運行機制)。就Java語言而言,只不過是Java平臺中的一小部分,因為其它語言同樣可以實現Java語言的功能,例如Groovy、JRuby及JPython等等語言,這些語言同樣可以編寫出運行在JVM上執行的字節碼。
若某種平臺想實現Java平臺這樣的功能,那么,首先必須實現Java SE或Java ME(由于Java EE與Android的關系沒這么大,因此這里不討論)規范所規定的這三駕馬車。如果該平臺沒有依賴或實現這三駕馬車,則只能很遺憾的說,這只是Java平臺的盜版。
現在來看看Google的Android平臺。首先,我們必須清醒的承認,Android使用了Java編程語言,同時還使用了Java ME和Java SE的APIs,但是,Android的可執行形式與Java平臺的字節碼形式是兩碼事,同時,使用的虛擬機與Java平臺的JVM不一樣。因此,在Java ME或Java SE環境下生成的Java字節碼,在Android上不能成功執行也就是情理之中的事情了。
Google沒有使用標準的JME作為運行Java應用軟件的引擎,而是自己為Android開發了名為Dalvik的虛擬機。開發人員表示,從技術角度來看,使用Dalvik既有優勢,也有劣勢,但技術可能不是Google這么做的原因。這可能需要從Google的企業文化角度去考慮:自由、創新。當然,將Dalvik作為避免使用JME所帶來的與Sun之間的許可問題的一種方式也是Google考慮的因素之一。Google不要求手機廠商許可JME,而是開發了自己的虛擬機。Dalvik將Java字節碼轉換為了Dalvik字節碼。因此Google可以說Android不是一個Java平臺。
二、 兼不兼容無所謂?
Java的兼容性(Compatibility)是Java領域的一面旗幟。Sun就是靠它打下半壁江山,并與微軟平分天下。Java當初的豪言壯語,“Write once,run anywhere”令好幾代Java程序員熱血沸騰,但在J2ME平臺開發的應用,要想不改動代碼就run anywhere,難度是很大的。如果要把一個應用程序做到讓大多數的機型都適用,就要考慮到方方面面,其難度是相當大的。
但Sun Microsystems及JCP(Java標準制定組織,Java Community Process,簡稱JCP)非常努力地想實現這樣的口號,其中最重要的努力就是兼容性測試。于是,當軟件提供商(商業的或是開源的)實現了Java的標準,然后要做的就是交付軟件進行兼容性測試,這是軟件提供商獲得“Write once,run anywhere”金字招牌并大言不慚的宣稱自己的軟件具有兼容性的主要辦法。
這就是大名鼎鼎的TCK(技術兼容性工具包)誕生的背景。說白了,TCK實際上是一套及工具,檢測和文檔一體的工具包,通常用于檢測在一特定設備上Sun公司的KVM技術的兼容性,確保Sun公司對已確定的標準和規范的一致性。當初TCK可是JCP Java標準中強制的要求之一。
可以看出,TCK這東西并不簡單。Android,既沒有編譯成Java字節碼,又不能在JVM上運行,能通過TCK這玩意的測試嗎?能與Java ME或Java SE兼容嗎?
眾所周知,JCP負責處理和審批各種Java技術和技術規范,將新的Java特點系統化為應用程序編程接口(API),所以程序員可以有一個標準的方式調用新的技術,比如藍牙技術或三維圖形。但現有的Java的技術不能滿足Google公司認為對于Android平臺很重要的開放性要求。
但是不兼容又怎么了?這就是Google的氣魄。天下王道勝者定。
Google公布Android手機軟件平臺的開發工具包時,明確表示該工具包沒有遵守現有的Java標準制訂過程,而是采用了Google自己的方法。于是Sun哭喪著臉說:Google的Android項目會造成數種互不兼容的Java版本。而Sun負責軟件業務執行副總裁格林更是大言不慚的表示:“任何制造多種平臺的事情都不符合開發人員的最大利益”,就差沒撂出陳凱歌的名言:“人不能無恥到這種地步”。開發人員的反饋是:幫助我們解決這一問題。
Sun委瑣的想與Google合作,號稱是要確保開發人員無須面對一個分裂的環境,確保這些平臺和API的兼容,使應用軟件能夠被部署在盡可能多的平臺上。而Google卻是不怎么領情,不冷不熱的說,開放手機聯盟的成員將有助于使編程人員熟悉其Java變種。
三、 Android是在繼續Java ME未竟的事業?
在本文中,筆者并非是在揚Java而有意在貶Android,事實上Android是一顆手機操作系統領域的璀璨的明珠。只是Android像一個叛逆的令狐沖一樣,放著好好的Java ME和Java SE標準不遵守,而是要去自創一套乾坤大挪移。Android就是想挑戰Java的口號“Write once,run anywhere”。Android首次避開了Java的老路,闖出了一條嶄新的路子:可以按開發人員自己的意愿使用Java語言,而不需要老是被JCP所規定的那些框框架架所框死,這像極了Google的自由、創新的企業文化。這是否是意味著Android將會走得更遠呢?
如果Android按它目前所定的方針及策略能成功的話,那對Java平臺(包括Java SE)將真的是場八級地震。Android給出了一個很重要的信息:Java所定義標準的其實并不重要,“Write once,run anywhere”其實也不重要。而這兩點正好是Java平臺的立足之本,而如今Android要顛覆Java的這兩根筋,這不是要了Java的老命?
因此,如果只是站在Java的角度來看,Android無異于一個搗蛋的壞蛋,但站在Android的角度來看,Java其實也沒什么,該退的就退吧!
雖然Android沒有遵循Java ME和Java SE的標準,但是Android對Java領域甚至軟件行業的地震效果將是巨大的。Android將迫使Sun及JCP重新思考Java ME和Java SE標準,有可能催生一種新平臺,它比Java SE瘦一點,但比Java ME更加健全一點。那才是Android對Java領域所做出的最大貢獻,比起Android對Java的“傷害”要有意義得多。
萬事陰陽相扣,Android除了上面的好處外,當然會給JCP帶來難以治愈的傷害。因為Android的一塊基石就是構建不兼容實現是一種可行的業務模型,這就有可能引發多米諾骨牌推牌效應,因為榜樣的力量是無窮的,同樣,反而教材的力量也是無窮的,其實的供應商也采用Android這樣的策略,那JCP的標準夢想和兼容性口號將成為歷史。當然,這對于敵人的敵人是再好不過的消息了,那個作壁上觀的微軟,那時可能已經笑得快合不籠嘴了。因為,Java領域對抗微軟.NET平臺的殺傷性武器就是標準化過程(如JCP)及兼容性。如果失去了這兩座屏障,那Java只能來個諸葛亮揮淚斬馬謖或是早點自宮算了。
事實上,Android是在繼續Java ME未竟的事業。Java ME提供了統一的編程平臺,但是Java ME不能調用操作系統資源,也沒有提供諸多的應用工具,最終Java ME處在一個非常尷尬的位置上。而Android往下直達操作系統內核,往上直通現成的應用軟件,例如聯系人,日歷,地圖,瀏覽器,Android就是手機應用的未來。
四、 小結
Google對無線互聯網市場垂涎已久,這已經是盡人皆知的事情。在公眾場合,無論是Google全球CEO艾里克施密特博士,還是在中國媒體面前的李開復博士,都毫不掩飾Google對于無線互聯網市場的向往。Android的推出就像Google在無線互聯網市場亮出的一把利劍,已經是司馬昭之心,路人皆知。而面對老牌的Java ME或Java SE對手,Android顯得有一點嫩氣,但又充滿了霸氣,這一場沒有硝煙的手機操作系統開發平臺之戰,到底鹿死誰手,還需拭目以待。