(聲明 :以下文字均來自《Java jdk8 學(xué)習(xí)筆記》 這本書)
在過去,Sun JDK 實現(xiàn)榛搔,也就是被 Oracle 收購之后的 Oracle JDK 實現(xiàn)桅咆,就是 JDK 的參考實現(xiàn)膝舅,有興趣的廠商或組織也可以根據(jù) JSR 自行實現(xiàn)產(chǎn)品,例如 IBM 就是根據(jù) JSR 實現(xiàn)了自家的 IBM JDK 惩琉。只有通過 TCK 兼容性測試的實現(xiàn),才可以使用 Java 這個商標(biāo)授滓。
2006 年的 JavaOne 大會上琳水,Sun 宣告對 Java 開放源代碼肆糕,從 JDK7 b10 開始有了 OpenJDK,并于 2009 年 4 月 15 日正式發(fā)布 OpenJDK在孝。Oracle 時代發(fā)布的 JDK7 正式版本诚啃,指定了 OpenJDK7 為官方參考實現(xiàn)。
1. Oracle JDK7 與 OpenJDK7
與同為開放源代碼的 Sun JDK 不同的是私沮,Sun JDK 采用 JRL始赎,而 OpenJDK7 采用 GPL (帶有 GPL linking exception 的修正版本)
- JRL : 源代碼可用于個人研究使用,但禁止任何商業(yè)用途
- GPL :允許商業(yè)上的使用
因此仔燕,OpenJDK7 必須刪掉許多在兩個授權(quán)間有沖突的程序代碼造垛,也不包括一些部署 ( Deployment ) 工具 (例如 Java Web Start 等) 以及軟件套件 (例如 Java DB) 等;現(xiàn)在你在 Java Platform晰搀,Standard Edition 7 Reference Implementations (或Java Platform五辽,Standard Edition 8 Reference Implementations)下載 RI 時,也會看到有基于 GNU General Public License version 2 與 Oracle Binary Code License 兩個授權(quán)的版本外恕。
Java Platform, Standard Edition 7 Reference Implementations:
https://jdk7.java.net/java-se-7-ri/
Java Platform, Standard Edition 8 Reference Implementations:
https://jdk8.java.net/java-se-8-ri/
由于 OpenJDK7 中有許多程序代碼因授權(quán)沖突而必須刪掉杆逗,因此原始的 OpenJDK7 是不完整的,因此無法通過 TCK 兼容測試鳞疲,如果執(zhí)行 java -version罪郊,原始的 OpenJDK7 顯示的會是 openjdk version 字樣,而不是 java version 字樣尚洽。
為了解決授權(quán)問題悔橄,以便在 Fedora 或 Linux 分支中能自由發(fā)布 OpenJDK7,Red Hat 于 2007 年發(fā)起了 IcedTea 計劃腺毫,而由于原始的 OpenJDK7 是不完整的癣疟,后來 IcedTea 致力于修補 OpenJDK7 使之完備,并通過了 TCK 兼容測試潮酒,如果使用 IcedTea 修補過后的 OpenJDK7争舞,執(zhí)行 java -version,就會顯示 java version 字樣澈灼。
2. Open JDK7 與 OpenJDK6
在 OpenJDK 官方網(wǎng)站竞川,也可以看到 OpenJDK6 的版本,OpenJDK6 并不是 Sun JDK6 的分支叁熔,而是將 OpenJDK7 中 JDK7 的特性刪掉委乌,使之符合 JDK6 的規(guī)范,因而 OpenJDK6 實際上是 OpenJDK7 的分支荣回,OpenJDK6 可以通過 TCK 兼容測試遭贸。
Oracle 從 2012 年 7 月以來,就打算結(jié)束對 JDK6 的支持心软,在 2013 年 2 月時宣布 JDK6 Update 43 時壕吹,宣布這是最后一個免費更新版本(實際上后來還有 Update 45 )著蛙,希望大家趕快升級至 JDK7。
由于 JDK6 在企業(yè)間仍廣泛應(yīng)用耳贬,Red Hat 于 2013 年 3 月時宣布持有 OpenJDK6 領(lǐng)導(dǎo)權(quán)踏堡,以能持續(xù)對 OpenJDK6 發(fā)現(xiàn)的漏洞與安全問題進行修補。