全文重點羅列php
如題,Sun 公司的 Java 跟 Android 使用的 Java 庫有什麼關係? 作 Android 開發很多時間了,可是相信有不少人有一樣的疑問,儘管這個疑問對作 Android 開發自己並無多大關係,但我總以爲這裏面必定有一些有意思的東西。html
最開始有這個疑問是源自 Oracle 與 Google 2011 年左右訴訟。當時 Oracle 狀告 Google 在未經受權就使用了 Java 的 API,那時對知識產權、開源協議等缺乏瞭解,只是以爲奇怪,Java 是一門開放的技術,任何公司均可以拿來使用,爲何到 Google 這裏怎麼就變卦了呢,接下來就記錄一下本身的研究筆記,以問答形式展開。java
Sun Microsystems是IT及互聯網技術服務公司(已被Oracle(甲骨文)收購)Sun Microsystems 建立於1982年。主要產品是工做站及服務器。1986年在美國成功上市。1992年 Sun 推出了市場上第一臺多處理器臺式機 SPARCstation 10 system,並於1993年進入財富500強。android
2009 年 Sun 公司被 Oracle 收購。程序員
Sun 公司的 詹姆斯·高斯林 等人在 1990 年年初開發了 Java 語言的雛形(好吧,那年我剛出生,沒想到本身跟 Java 同齡了),最初命名爲 Oak,主要適用於家用電器等小型系統的開發。後來隨着互聯網的快速發展,因而改造 Oak,在 1995 年 5 月以 Java 的名稱正式發佈,因此更多時候,你們都在講 Java 是 1995-96纔有的語言,也沒問題。服務器
Java 從最初設計就有一個很是優秀的思想,即跨平臺,它不受平臺限制,任何平臺均可以運行 Java 程序,好比咱們常見的 Windows、Linux 等等系統均可以運行,Java 的跨平臺具體是經過 JVM 作到的。模塊化
首先, Java 語言不論在任何平臺,想要運行,首先都須要先編譯爲字節碼,這裏的字節碼是平臺無關的,是徹底獨立的一個東西,不受平臺特性限制。而最終在電腦上運行時,爲了在各個平臺上能夠執行字節碼,Sun 公司在開發 Java 的過程當中同時也開發了虛擬機這個東西,它專門用來執行字節碼,它負責把字節碼轉換爲機器能夠認識的機器碼而後運行。測試
於此同時,Sun 不只僅是爲各個平臺開發了虛擬機。做爲程序員,咱們大都有這樣的經驗,當咱們要爲多個平臺開發一個做用一致的東西時,爲了後續更好的擴展維護,咱們確定會想先定義一個接口規範出來,這樣全部平臺的實現都經過這個規範去控制約束,後續的升級維護就會變得更簡單。開放源代碼
做爲開發 Java 的老一輩們固然也知道這個道理,因此他們也作了一樣的事,Sun 定義了 Java 虛擬機的規範,這樣至關於發佈了 Java 規範,即你只要按照這個規範,就能夠開發本身的 JVM 語言了,前提是你的語言編譯出的字節碼要符合 JVM 規範,不然虛擬機就無法執行。如今這樣的語言已經有很多了,好比咱們知道的 Kotlin,Groovy、Scala等。設計
原則上任何團體或者公司均可以開發 JVM 語言,由於這個規範是公開的,可是這裏要知道的是,當你按照規範開發了語言,首先要作的一件事即是要經過 Sun 的 TCK (Technology Compatibility Kit)測試。這個也很好理解,這是官方的測試,經過這個測試才能成爲官方承認的 JVM 語言。具體 TCK 的詳細介紹可查看Wiki。
Sun經過銷售Java Enterprise System等 專用產品的許可證從Java中得到收入。
該項目是 Apache 開發的一個開源的,免費的 Java 實現,不過 2011 年時已經被 Apache 關閉了該項目。Harmony 項目實現了 J2SE 5.0的 99%完整性和 Java SE 6的 97%。
Harmony 的目標:
若是須要成爲一個帶有Java logo標誌的,能夠聲稱本身兼容Sun公司實現的JDK,須要經過JCP(Java Community Process)對其擁有的TCK(Technology Compatibility Kit)的測試。Apache Harmony項目一直在努力爭取得到JCP的受權。
可是,因爲Sun公司的態度,JCP並無給Harmony授予TCK許可,並且 SUN 發佈 OpenJDK 以後,還規定只有衍生自 OpenJDK 的採用GPL協議的開源實現才能運行OpenJDK的TCK[2],
但 Apache 的 Harmony 是 Apache 協議的,與 OpenJDK 的 GPLv2 協議不兼容,Apache 董事會和Harmony項目工做人員堅定反對這種帶有條件的受權,認爲這種是在開源社區裏不可接受的。所以,二者談判破裂。直到如今,Harmony一直沒有得到TCK的受權。有批評稱,Sun無視它簽署的JCP法律協定,這摧毀了所有的信任。
下面是常見開源協議之間的關係區別
能夠看到
從上面的開源協議對比能夠看出,Apache 協議是一個特別自由的協議,而 Android 一開始正是由於 Harmony 項目採用了 Apache 協議,因此才更有動力使用 Harmony 做爲本身的 Java 類庫。
因此 Android 中的 Java 實現並非官方的實現,而是 Harmony 對 Java 的實現。因爲 Harmony 並無經過 TCK 認證,這也就爲往後 Oracle 起訴谷歌侵權埋下了伏筆。
到後來 Android 鑑於此,從 Android 7.0 開始,用 Sun 的 OpenJDK 替換了 Harmony。
OpenJDK(Open Java Development Kit)原是 Sun 公司爲 Java 平臺構建的 Java 開發環境(JDK)的開源版本,徹底自由,開放源碼。 Sun公司在 2006 年的 JavaOne 大會上稱將對 Java 開放源代碼,於2009年4月15日正式發佈OpenJDK。甲骨文在 2010 年收購 Sun以後接管了這個專案。
OpenJDK 是 Java平臺標準版(Java SE)的免費開源實現,該實現是根據 GNU通用公共許可證(GNU GPL)發佈。OpenJDK 最初只基於 Java 平臺的 JDK 7版本。
Android | Java | Apache Harmony | OpenJDK |
---|---|---|---|
Android Runtime | Java Runtime Environment (JRE) | 同左 | 同左 |
Core Libraries | Java Core Libraries | Harmony Core Libraries | OpenJDK Core Libraries |
Dalvik VM | Java VM | DRLVM | HotSpot VM |
由圖可看到
一開始只是想了解 Harmony ,可是真的展開了,其實有不少東西須要去了解,包括語言自己、語言特性、開源協議,項目歷史,一些關鍵事件等等。而花時間瞭解後,卻發現不知道的東西更多了,疑問也更多了,好比 Android 具體選用 Harmony 是如何思考的,Harmony 與 Open JDK 的實現過程當中有什麼異同等等,也是無奈,這裏只能把本身看到的想到的記錄下來。
不管如何,去了解一些東西背後的東西或者宏觀背景,能給本身更多的視角去看待眼前的東西,也會讓本身變得更理性,同時觸類旁通,任何事情都應該如此。
原文地址: Sun 公司的 Java 跟 Android 使用的 Java 庫有什麼關係? | 咕咚