Oracle JDK与OpenJDK

1.1.4 Oracle JDK与OpenJDK

1.1.4 Oracle JDK与OpenJDK

在过去,Sun JDK实现,也就是被Oracle收购之后的Oracle JDK 实现,就是JDK的参考实现,有兴趣的厂商或组织也可以根据JSR自行实现产品,例如IBM就是根据JSR实现了自家的IBM JDK。只有通过TCK 兼容性测试的实现,才可以使用Java这个商标。

IBM JDK:http://www.ibm.com/developerworks/java/jdk/

2006年的JavaOne大会上,Sun宣告对Java开放源代码,从JDK7 b10 开始有了OpenJDK,并于2009年4月15日正式发布OpenJDK。Oracle时代发布的JDK7正式版本,指定了OpenJDK7为官方参考实现。

1. Oracle JDK7与OpenJDK7

与同为开放源代码的Sun JDK不同的是,Sun JDK采用JRL?,而OpenJDK7采用GPL(带有GPL linking exception的修正版本),前者源代码可用于个人研究使用,但禁止任何商业用途,后者则允许商业上的使用,因此,OpenJDK7必须删掉许多在两个授权间有冲突的程序代码,也不包括一些部署(Deployment)工具(例如Java Web Start等)以及软件套件(例如Java DB)等;现在你在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 两个授权的版本。

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中有许多程序代码因授权冲突而必须删掉,因此原始的OpenJDK7是不完整的,因此无法通过TCK兼容测试,如果执行java -version,原始的OpenJDK7显示的会是openjdk version字样,而不是java version字样。

为了解决授权问题,以便在Fedora或Linux分支中能自由发布OpenJDK7,Red Hat于2007年发起了 IcedTea 计划,而由于原始的OpenJDK7是不完整的,后来IcedTea致力于修补OpenJDK7使之完备,并通过了TCK兼容测试,如果使用IcedTea修补过后的OpenJDK7,执行java -version,就会显示java version字样。

2. Open JDK7与OpenJDK6

在OpenJDK官方网站,也可以看到OpenJDK6的版本,OpenJDK6并不是Sun JDK6的分支,而是将OpenJDK7中JDK7的特性删掉,使之符合JDK6的规范,因而OpenJDK6实际上是OpenJDK7的分支,OpenJDK6可以通过TCK兼容测试。

Oracle从2012年7月以来,就打算结束对JDK6的支持,在2013年2月时宣布JDK6 Update 43时,宣布这是最后一个免费更新版本(实际上后来还有Update 45),希望大家赶快升级至JDK7。

由于JDK6在企业间仍广泛应用,Red Hat于 2013年3月时宣布持有 OpenJDK6 领导权,以能持续对OpenJDK6发现的漏洞与安全问题进行修补。

(文/林信良)

摘自《Java学习笔记(第8版) 清华大学出版社》


如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。