Sun 公司的 Java 跟 Android 使用的 Java 庫有什麼關係?

全文重點羅列php

  • Java 是 Sun 公司開發的一門語言,同時 Java 也是一個開放平臺。
  • Sun 公司爲 JVM 發佈了 JVM 規範,任何公司均可以按照此規範開發 JVM 語言,如如今的 Kotlin、Scala 等。
  • JVM 語言必需要經過 JCP 組織(Java Community Process)對其擁有的 TCK(Technology Compatibility Kit)測試。
  • Harmony 是 Apache 2005 年開發的一個開源、免費的 Java 實現,只是沒有徹底經過 Sun 公司的 TCK 測試,按照 Apache 協議發佈。
  • Open JDK 是 Sun 公司在 2009 發佈的徹底自由,開放源碼的 Java平臺標準版(Java SE)免費開源實現,按照 GPL 協議發佈。
  • Android 一開始使用的 Java 實現是基於 Apache 協議發佈的 Harmony,後來因爲 Harmony 自己的限制以及 Oracle 公司的起訴,從 Android N 開始, Google 開始用 Open JDK來替換 Harmony。

如題,Sun 公司的 Java 跟 Android 使用的 Java 庫有什麼關係? 作 Android 開發很多時間了,可是相信有不少人有一樣的疑問,儘管這個疑問對作 Android 開發自己並無多大關係,但我總以爲這裏面必定有一些有意思的東西。html

最開始有這個疑問是源自 Oracle 與 Google 2011 年左右訴訟。當時 Oracle 狀告 Google 在未經受權就使用了 Java 的 API,那時對知識產權、開源協議等缺乏瞭解,只是以爲奇怪,Java 是一門開放的技術,任何公司均可以拿來使用,爲何到 Google 這裏怎麼就變卦了呢,接下來就記錄一下本身的研究筆記,以問答形式展開。java

Sun 公司與 Oracle 公司的關係

Sun Microsystems是IT及互聯網技術服務公司(已被Oracle(甲骨文)收購)Sun Microsystems 建立於1982年。主要產品是工做站服務器。1986年在美國成功上市。1992年 Sun 推出了市場上第一臺多處理器臺式機 SPARCstation 10 system,並於1993年進入財富500強。android

2009 年 Sun 公司被 Oracle 收購。程序員

什麼是 Java?wiki

Sun 公司的 詹姆斯·高斯林 等人在 1990 年年初開發了 Java 語言的雛形(好吧,那年我剛出生,沒想到本身跟 Java 同齡了),最初命名爲 Oak,主要適用於家用電器等小型系統的開發。後來隨着互聯網的快速發展,因而改造 Oak,在 1995 年 5 月以 Java 的名稱正式發佈,因此更多時候,你們都在講 Java 是 1995-96纔有的語言,也沒問題。服務器

Java 從最初設計就有一個很是優秀的思想,即跨平臺,它不受平臺限制,任何平臺均可以運行 Java 程序,好比咱們常見的 Windows、Linux 等等系統均可以運行,Java 的跨平臺具體是經過 JVM 作到的。模塊化

JVM 是什麼東西?

首先, Java 語言不論在任何平臺,想要運行,首先都須要先編譯爲字節碼,這裏的字節碼是平臺無關的,是徹底獨立的一個東西,不受平臺特性限制。而最終在電腦上運行時,爲了在各個平臺上能夠執行字節碼,Sun 公司在開發 Java 的過程當中同時也開發了虛擬機這個東西,它專門用來執行字節碼,它負責把字節碼轉換爲機器能夠認識的機器碼而後運行。測試

於此同時,Sun 不只僅是爲各個平臺開發了虛擬機。做爲程序員,咱們大都有這樣的經驗,當咱們要爲多個平臺開發一個做用一致的東西時,爲了後續更好的擴展維護,咱們確定會想先定義一個接口規範出來,這樣全部平臺的實現都經過這個規範去控制約束,後續的升級維護就會變得更簡單。開放源代碼

做爲開發 Java 的老一輩們固然也知道這個道理,因此他們也作了一樣的事,Sun 定義了 Java 虛擬機的規範,這樣至關於發佈了 Java 規範,即你只要按照這個規範,就能夠開發本身的 JVM 語言了,前提是你的語言編譯出的字節碼要符合 JVM 規範,不然虛擬機就無法執行。如今這樣的語言已經有很多了,好比咱們知道的 Kotlin,Groovy、Scala等。設計

JVM 語言是否是隻要符合規範便可?

原則上任何團體或者公司均可以開發 JVM 語言,由於這個規範是公開的,可是這裏要知道的是,當你按照規範開發了語言,首先要作的一件事即是要經過 Sun 的 TCK (Technology Compatibility Kit)測試。這個也很好理解,這是官方的測試,經過這個測試才能成爲官方承認的 JVM 語言。具體 TCK 的詳細介紹可查看Wiki。

Sun 公司如何經過 Java 賺錢

Sun經過銷售Java Enterprise System等 專用產品的許可證從Java中得到收入

Apache 開發的 Harmony 是一個什麼項目

該項目是 Apache 開發的一個開源的,免費的 Java 實現,不過 2011 年時已經被 Apache 關閉了該項目。Harmony 項目實現了 J2SE 5.0的 99%完整性和 Java SE 6的 97%。

Harmony 的目標:

  • 一個兼容的、獨立的Java SE 5 JDK的實現,並根據 Apache License v2 發佈。
  • 一個由社區開發的模塊化的運行時(包括Java虛擬機類庫)體系結構。

Harmony 與 TCK 的紛爭

若是須要成爲一個帶有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 Harmony - 維基百科,自由的百科全書

GPL 協議與 Apache 的區別

下面是常見開源協議之間的關係區別

能夠看到

  • 用 GPL 協議發佈的項目,當別人修改代碼後必須採用相同的協議而且也要開源。
  • Apache 協議則特別自由,當你修改該協議下發布的項目後,能夠選擇閉源,只須要在每個文件頭都加上版權說明。

Harmony 與 Android 的關係

從上面的開源協議對比能夠看出,Apache 協議是一個特別自由的協議,而 Android 一開始正是由於 Harmony 項目採用了 Apache 協議,因此才更有動力使用 Harmony 做爲本身的 Java 類庫。

因此 Android 中的 Java 實現並非官方的實現,而是 Harmony 對 Java 的實現。因爲 Harmony 並無經過 TCK 認證,這也就爲往後 Oracle 起訴谷歌侵權埋下了伏筆。

到後來 Android 鑑於此,從 Android 7.0 開始,用 Sun 的 OpenJDK 替換了 Harmony。

Open JDK 是什麼

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版本。

Apache Harmony 與 Open JDK、原生 Java 以及 Android 之間的區別對比。

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

由圖可看到

  • Java 與 Android 有不一樣的運行時,可是 Open JDK 跟 Harmony 都有相同的運行時,這就保證了這二者編寫出的 Java 代碼均能正常跑在 Java 平臺上。
  • 而 Android 有本身的運行時。
  • 你們都定義了本身的 VM,Android 定義的最完全。
  • Java 的 VM 基於堆棧結構,而 Android 的 VM 基於寄存器結構,後者效率更高,更適合移動端。

總結

一開始只是想了解 Harmony ,可是真的展開了,其實有不少東西須要去了解,包括語言自己、語言特性、開源協議,項目歷史,一些關鍵事件等等。而花時間瞭解後,卻發現不知道的東西更多了,疑問也更多了,好比 Android 具體選用 Harmony 是如何思考的,Harmony 與 Open JDK 的實現過程當中有什麼異同等等,也是無奈,這裏只能把本身看到的想到的記錄下來。

不管如何,去了解一些東西背後的東西或者宏觀背景,能給本身更多的視角去看待眼前的東西,也會讓本身變得更理性,同時觸類旁通,任何事情都應該如此。

原文地址: Sun 公司的 Java 跟 Android 使用的 Java 庫有什麼關係? | 咕咚

參考連接

相關文章
相關標籤/搜索