開發者必知:谷歌做了一個艱難的決定
谷歌做了一個艱難的決定:棄用Java APIs.
所謂人紅是非多,所以Android的崛起,必定伴隨著戰爭。其中***代表性的,最有爭議的莫過于甲骨文和Google的官司了。
事件回顧:
自2010年起,兩家公司關于Android系統的一部分是否侵犯了甲骨文的版權和專利,一起爭論不休,因為系統中使用了甲骨文擁有的Java。整個官司既持久,又充滿戲劇性。從2010年8月算起,已經有5年多了。到了今年6月份,甲骨文在這起訴訟中贏得了重大法律勝利:美國***法院拒絕就此案受理谷歌的上訴。這也就意味著駁回了Google的上訴,維持了原判:判定 API 受版權保護,Google侵權。在美國***法院做出不受理谷歌上訴的裁定后,這起訴訟將返回到舊金山聯邦法院,由該院就谷歌另外提出的“合理使用”的辯護觀點舉行更多庭審。
這起訴訟的焦點在于,用于連接不同軟件的應用程序接口 (API)是否也受版權法的保護。官司起因就是:甲骨文掃描了1500萬行Android源代碼,發現了9行代碼是拷貝自Java。
這***爭議,最神奇的九行代碼如下:
- private static void rangeCheck(int arrayLen, int fromIndex, int toIndex) {
- if (fromIndex > toIndex)
- throw new IllegalArgumentException("fromIndex(" + fromIndex +
- ") > toIndex(" + toIndex+")");
- if (fromIndex < 0)
- throw new ArrayIndexOutOfBoundsException(fromIndex);
- if (toIndex > arrayLen)
- throw new ArrayIndexOutOfBoundsException(toIndex);
- }

其實這九行代碼都是出自同一個人:Joshua Bloch,是一位Java大牛。他的經歷如下:
早在1996年,適逢 Java 剛剛嶄露頭角。先是1月份發布JDK1.0,然后是5月底在舊金山召開首屆JavaOne大會,年末又是JDK1.1緊跟其后。正是在Java技術如火如荼、大展拳腳的背景之下,JoshuaBloch來到了Sun。2004 年7月初,就在J2SE5.0發布在即,Jusha Bloch剛剛榮獲Sun“杰出工程師(Distinguished Engineer)”的稱號之時,他突然離開Sun而去了正值發展態勢迅猛的Google,成為了Google的Java***架構師。在離開Google之前他一直是Dart平臺和Dart語言核心庫的主要架構師,2012年8月23號Joshua Bloch離開了Google,對于Dart應該不至于是個毀滅性地打擊,但肯定是一個巨大的損失。
事件回顧完畢,回到今天的事情上來,據悉:谷歌將在下一代Android系統Android N中用甲骨文(Oracle)公司的開源代碼OpenJDK來替代后者的Java APIs,此事***在上個月由Hacker News貼出的一段神秘安卓代碼庫露出,目前VentureBeat已得到谷歌的正式確認。
官方回應如下:
作為一個開源平臺,Android建立在合作共生的開源社區之上。在下一版的Android系統之中,我們計劃將Java語言庫替換為以OpenJDK為基礎創造出來的通用代碼庫,便于讓開發者開發app和服務。谷歌常年為OpenJDK做貢獻,未來還將繼續下去。
其實在公理上谷歌是理虧的,此舉想必也是迫于壓力與常年消耗戰帶來的疲憊。雖然OpenJDK是Java SE的中的代碼,同樣隸屬于甲骨文,但它是開源的,且Java SE在2007年誕生之時甲骨文還沒有收購Sun Microsystems、擁有Java。Android提供一些Java API代碼庫來支持開發者用Java編程語言開發應用,主要分為兩部分:代碼庫的APIs,以及谷歌為了讓代碼庫工作而開發的執行代碼。甲骨文擁有Java,并有兩個這種代碼庫:專有JDK和開源OpenJDK。谷歌使用的是后者,并已在某些領域有了應用,意味著其將分享這些執行代碼。
安卓代碼庫中出現了神秘的代碼提交,修改了 8902 個文件,從這段代碼庫的改動可以看出OpenJDK代碼已經被加進Android:
Initial import of OpenJdk files.
Create new libcore/ojluni directory with src/main/java and src/main/native subdirectiories.
Build ojluni into core-oj jar.
Use openjdk classes from java.awt.font package.
Copy all files from jdk/src/share/classes and jdk/src/solaris/classes directories in openjdk into libcore/ojluni/src/main/java.
Copy following native files from openjdk to libcore/ojluni/src/main/native: [long list of files]
雖然官司尚未結束,但是審判結果將會在科技界產生重大影響,如果甲骨文勝訴,科技巨頭們將不再能隨意使用存在版權的API包了,谷歌若是敗了,將損失數十億美元。