Oracle JDK 与 Open JDK


(声明 :以下文字均来自《Java jdk8 学习笔记》 这本书)


在过去,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 的修正版本)

  • JRL : 源代码可用于个人研究使用,但禁止任何商业用途
  • GPL :允许商业上的使用

因此,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 发现的漏洞与安全问题进行修补。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容