Google已決定将從下一版本的Android開始采用OpenJDK,本文将部分摘錄網際網路上對于這一決定的反響。
\\
在去年年底,我們曾提到Google已經決定在Android中使用OpenJDK,以取代基于Harmony實作的Java庫(詳情請見此處)。盡管這條消息在宣布時恰逢聖誕期間,但Google的這一決定還是在網際網路上引起了很大的反響,我們将在本文中對于這些觀點進行一次總結。
\\
從這個Git工單可以看出,早在2015年二月,Google就已經在代碼中露出了切換至OpenJDK的計劃。在去年十二月,這次代碼送出中所包含的一個重要的授權資訊的變化被媒體曝光了。Android N中所使用的新Java庫将不再基于Apache License 2.0(APL)授權協定,而是基于GNU GPL 2協定,并且在版權資訊中包含了以下聲明:“Oracle及其附屬機構版權所有,1997,2011”。
\\
Mozilla的前任CTO Andreas Gal為此專門寫了一篇标題有些駭人的部落格“Oracle将它的魔爪伸向了Android”。他表示,Google長期以來一直堅持使用Harmony的Java庫及Apache授權,其原因在于:
\\
\
使用者能夠任意使用及修改APL代碼,而無需釋出這些改動。換句話說,你能夠進行具有專利權的改動與改進。而這一點對于基于LGPL授權協定的GNU libc來說是不可能的。我可以确信地說,我知道為什麼Google認為這一點很重要,因為在釋出Firefox OS的過程中,我曾經和許多與Google有合作關系的晶片供應商以及OEM廠家進行過交流。晶片與OEM廠商都希望在軟體層面上表現出他們的優勢,嘗試對Android的代碼進行全方位的改進。尤其是晶片廠商經常會改動類庫中代碼,以充分利用自家的專利晶片,而且他們不願意公開分享這些改動。通過這種方式能夠展現出他們的競争優勢,即在專利上的優勢。
\
\\
Bob Ross回複了Gal的文章,他自稱是某家OEM廠商的員工,對于APL與GPL的争論提出了一些見解:
\\
\
我們确實會對libcore進行一些改動,在這種場合,主要問題是進行開源會帶來很大的工作量,倒不是說要保護這些代碼。至少從我曾經參與過的改動來看,情況就是如此。
\
\\
Bradley M. Kuhn目前擔任自由軟體管理機構(Software Freedom Conservancy)的主席,同時也是自由軟體基金會(Free Software Foundation)的董事會成員。他對于GPL可能對Andoid開發所造成的影響有着不同的見解。在最近的一篇部落格文章“Sun、Oracle、Android、Google以及JDK複制權(copyleft)的質疑”中,Kuhn注意到OpenJDK授權其實屬于一個“非常寬松”的協定,即包含Classpath例外的GNU協定。Kuhn曾經參與了Classpath例外協定的設計與命名,這一協定旨在避免通過複制權保護的方式“感染”整個Java生态系統,否則所有的Java程式都将被迫選擇可以免費使用及重新分發的方式。如此一來,從授權協定的角度來看,選擇使用OpenJDK與使用Harmony也沒有多大的差別了。按照Kuhn的說法:
\\
\
那麼,采用了Oracle的GPL及Classpath例外協定的JDK與具備Apache授權的Java userspace又有多大的差别呢?它們的差别其實并不大!Android的重新分發者已經在kernel space方面承擔了很大的複制權責任,并且請你記住,Webkit是基于LGPL授權協定的,是以說圍繞着Android已經存在着一些比較寬松的複制權遵循責任了。如此一來,如果說某個重新分發者已經滿足了以上協定,那麼要遵循那些新加入JDK代碼中的需求也不是什麼麻煩事,因為這些需求隻有更為寬松。
\
\\
但在Gal看來,Oracle對于Android的未來發展将産生重大的影響,這不僅僅是因為授權的原因,同時也受到Java的發展路線、商标、條約與專利的影響:
\\
\
除了源代碼之外,Oracle還有别的方法可以控制Java的發展,是以OpenJDK所謂的自由性就好像一所監獄。你可以投票決定外牆有多高,甚至可以去參與砌牆工作,但一旦你進入這裡,就隻有Oracle能夠決定你何時才能出去。Oracle對于OpenJDK的路線圖有很大的決定權,通過對于相容性需求、商标、現有協定以及API版權控訴(Oracle與Google之間的控訴)的掌握,Oracle幾乎全盤控制了OpenJDK的發展方向。
\
\\
部分讀者在Gal的部落格中留言表示,如果Oracle不能勝任OpenJDK的發展,那麼Google完全可以建立一個分支,并自行決定它的發展方向。
\\
Gal同時預測,對于Android來說,接下來的一年注定是艱難的一年:
\\
\
由于代碼與技術的混雜,這将在戰術層面上牽連Android的開發。不誇張的說,所改動的代碼将達到幾百萬行,并且從實作方面來看,新的OpenJDK與Google原本采用的Harmony代碼在正确性或性能表現上有許多微妙的差别。如你所見,Google在日期資料的處理上更正了一個針對特定邊界條件的測試用例。這是由于Harmony與Oracle的OpenJDK的表現有所差别,是以必須對測試進行更正。
\\
而Android應用的整個生态系統就建立在這些正面臨着變化基礎上。Android的應用商店中有幾百萬個應用都依賴于Java的标準類,正如上文所述,不僅必須對測試進行更正,并且由于OpenJDK的轉換所産生的微妙差别,這些應用都有可能随機地發生錯誤……
\\
由于這次的巨變,我感覺Android N已經很難按期釋出了。Google的做法無異于在飛行途中更換引擎,此時優先級最高的任務是保證不會墜機,至于是否能夠按時抵達目的地,Google已經沒時間去擔心這個了。
\
\\
Brendan Eich在一條推文中表示支援Gal的意見:“雖然我們的所知有限,但我同意@andreasgal的看法,代碼的改動将帶來成本與風險的上升。”
\\
Codename One的聯合創始人之一的Shai Almog也同意Google和Android的開發者将不得不面對一些額外的工作,但并沒有Gal與Eich所認為的那麼嚴重,并且使用OpenJDK還能夠多多少少讓他們受益。
\\
\
雖然有些改動能夠讓使用者直接受益,但對于大多數軟體開發過程來說,改動無法帶來直接的受益。并且也不是所有開發者都能夠完全利用每一個語言與API的特性。
\\
由于基礎代碼庫得到了統一,使用者将從中受益,并且安全稽核流程也可以專注于這個具有更高統一性的基礎代碼庫了。其結果是許多标準Java工具在Android上或許能夠表現得更出色……
\\
沒錯,Google需要付出一定精力以完成這一過程,也确實會有一些應用可能會受到影響。但我敢說,這次改動比起Marshmallow(即Android 6.0)的改動所帶來的影響會小的多,并且Google本身有一些工具能夠讓許多問題得以緩解(例如SDK版本提示)。
\
\\
有些人懷疑Google決定采用OpenJDK是否和他們與Oracle之間的控訴糾紛有關。而Kuhn則相信Google這次決定的背後是出于技術方面的原因:
\\
\
一位Java業界分析師(他在這一行已經有十年以上的經驗了)告訴我,他相信這一決定的主要動力是技術方面的原因。在Android平台上開發userspace應用的作者們都在尋找新的Java語言實作,考慮到市面上已經存在了這個合理的、具有授權的免費軟體,是以Google就有理由選擇在技術上轉換至這個更有優勢的代碼庫,畢竟它為API的使用者在技術層面上提供了他們想要的東西,同時也降低了維護的難度。這樣看來,這個決定是非常合理的。這種說法或許沒有權威人士的觀點那樣令人震撼,但技術方面的原因的确很可能是這個決定的主要推動力。
\
\\
Android從新版本作業系統開始将采用OpenJDK,這一舉措會帶來怎樣的影響,目前來說還難以進行全面的透徹分析,這很大程度上取決于Oracle與Google之間争論不休的版權控訴将走向何方。目前為止,還沒有人能夠清楚地說明一個API接口是否能夠擁有版權資訊,法律與法院必須明确地解答這一點。自從上一個現有版本的庫開始,Android中的部分代碼,包括Java與C在内就開始了重新建構工作,某些無用的代碼被删除,但依然保留了接口或頭檔案。那麼是不是說Android從此就可以擺脫那些麻煩了呢?這還有待時間觀察。不過采用OpenJDK之後應該能夠起到一些緩解作用,因為Google如今已經滿足了Java授權和專利許可,Oracle也不能再對Android說三道四了。
\\
檢視英文原文:What Impact Will OpenJDK Have on Android Development?