2010年11月16日 星期二

Apache退出JCP 對Java和Android影響深遠

      Apache宣布退出JCP,不僅會影響到Android平台的發展,對Java語言本身也將深受其害。而事情的起因是Oracle不為Apache的Harmony提供兼容性測試。

      51CTO之前的報導《Oracle和JCP成員之間的Java戰爭一觸即發》的預言已經應驗。而在Android中起著重要作用的Java語言和Apache的Harmony項目正在為這場戰爭推波助瀾。近日,JCP 重要成員Apache 基金會宣布,如果Oracle 不給Harmony 提供兼容性測試,將退出JCP,並號召其它成員抵制Java 7 。所有這些事件不僅是對Google 的威脅和打擊,而且直接關係到Android 與Java 語言的前途。

      自由的語言,不自由的平台

      Java 號稱是跨平台的語言,簡單的說,它是在不同平台之間搭建一個相同的軟件運行環境。或說是 Java 虛擬機。虛擬機起到一個承上啟下的作用,開發者不用考慮平台,只要保證自己的程序能夠在虛擬機上運行,而實際的硬件操作由虛擬機聯繫操作系統完成。

      Java 原本屬於 Sun 公司。 Sun 一直是一個在商業和開源之間走著平衡的公司。雖然,Sun 開發了大部分的Java 平台代碼,但任何公司的平台,如果想要運行Java 程序,仍就必須購買Java 虛擬機的使用權,這涉及到安全和技術支持問題。從手機平台來說,諾基亞、RIM 等公司的手機平台都支持Java 程序,就是因為它購買了Java 虛擬機的使用權。

      Apache基金會的Harmony

      Apache 基金會的Harmony 計劃是試圖提供一個Java 的開源實現,就是說試圖使Java 平台脫離Sun 的控制,獲得充分的自由。這就是Harmony 計劃產生的原因,對此Sun 自然不會很高興,一是商業原因,二是可能產生的平台分裂。因此,Sun 雖然沒有起訴Apache 基金會,卻一直沒有給Harmony 提供兼容測試,同時Sun 在Java 平台的使用上有限制,因此Harmony 的代碼是不能使用到手機上的,當然Apache 也沒有這個計劃,所以事情就擱置了下來,直到Android 的出現。

      Android之道

      Android 的Dalvik 虛擬機運行的不是Java 程序,可以說Dalvik 完全可以運行其它語言開發的程序,但是Google 為了吸引Java 程序員,允許程序員使用Android 的SDK 將Java 代碼轉換成Dalvik 可以運行的代碼。它是如何實現的呢? Google 在開發Android 的時候,僱傭了Sun 的一些程序員,利用Harmony 中的開源Java 庫來實現Java 程序的轉換,避開了授權費用。這意味著開發者可以使用Java 語言為非Java 平台開發程序,Android 的火爆發展不能給Sun 帶來商業利益,而且可能造成平台分裂。

      Java 7的到來和Apache 的反抗

      自從Oracle 掌權Java 之後,JCP 便逐漸為Oracle 所拋棄,這意味著Oracle 要獨自控制Java 平台。做為JCP 一員的Apache 基金會已經無法影響Java 的方向,它的Java 開源實現Harmony 也被Oracle 拒之門外,因此,Apache 基金會的存在只是一個形式而已。

      Oracle 拒絕給Harmony 提供兼容測試,這意味著Harmony 與Java 平台的徹底分裂,隨著Java 7 的到來,這個問題將更加嚴重。這是否意味著Java 語言升級之後,Google 不得不重新編寫底層代碼已適應新的Java 語言,但是Google 這將是一項耗時費力的艱苦工作,而自己編寫的實現也許會再次遭到Oracle 的起訴,因為Oracle 已經推出自己的開發環境OpenJDK,獲得了IBM 和蘋果的支持。

      Apache 基金會目前已經正式聲明,號召其他成員抵制Java7,如果Oracle 不提供Harmony的兼容性測試,將退出JCP,這意味著JCP 內一個最大的開源勢力推出Java,下一步便是徹底的決裂,這對Google 會產生什麼影響,仍無法預料。

      法律和技術的雙重困境

      Android 已經成為Google 的收入生命線,Google 自然不會讓步,在最近的回擊中,Google 指出,即使存在侵權(或抄襲)的可能,也應該由第三方負責,因為Google 使用的是第三方的開源實現。法律問題先放在一邊,從技術上來說,Google 也面臨著困境,因為Android 的開發者使用的是Java 語言,如果失去官方提供的支持,將是一個嚴重的問題。

      Java陷阱

      開源領袖Ricard Stallman 早就指出Java 是“帶著鐐銬的自由”(Free but shackled),警告開發者謹防Java 陷阱。此後,Sun 開源了大部分的Java 實現代碼,因此Java 陷阱已經可以避免,但仍然要注意使用完全自由的平台,因為並非所有的平台都是自由的。

      如果Google 收購Sun,將Java 收歸己有,或者當初與Sun 達成協議,也許今天情形會不同。或著當初開發Android 的時候,Google 應該培育自己的Go 語言,而不是急於利用現有的Java 開發者隊伍。 Java 關於開放的說法只是一個假象,而如今Java 易手,一切都改變了。

      很難想像Google 會放棄Android 系統,問題是如何發展它。 Java 將逐步脫離開源社區,淪為Oracle 的生財之道,這是一個利益當頭、注重企業而不考慮個人開發者的公司,與Java 的糾纏不清只能帶來更多的麻煩。

      Android其實是在幫助Java

      現有的智能手機平台中,Java 已經不是開發者的首選,iOS,MeeGo 都有自己的開發環境,WebOS 不需要Java 實現,而RIM 也在逐漸拋棄Java,轉向Adobe AIR,這意味著Java 在手機市場的空間在逐步縮小。諷刺的是,現在Android 的飛速發展反而有利於Java 語言在手持領域的地位。如果Google 拋棄Java,是否Java 將只能在低端機之間苟延殘喘,逐漸消亡呢?相信隨著Web 開發技術的進步,HTML/CSS/Javascript這樣的網絡開發環境將成為網絡應用的首選,而底層應用開發將會是C/C++的天下。

      Oracle的作法也許只是加速Java 在手機領域的滅亡而已,當然是在它收完最後一筆保護費之後。

51cto.com  2010/11/16

沒有留言:

張貼留言