注意到这个问题, 是在 CentOS7 上安装 JDK 的时候, 查找相关的资料, 发现安装 JDK 之前都需要检查或卸载系统上原生的 Open JDK, 这才引起了注意.
到了这里, 引用查到的一篇说明.
历史上的原因是, openjdk 是 jdk 的开放原始码版本, 以 GPL 协议的形式放出. 在 JDK7 的时候, openjdk 已经成为 jdk7 的主干开 发, sun jdk7 是在 openjdk7 的基础上发布的, 其大部分原始码都相同, 只有少部分原始码被替换掉. 使用 JRL(JavaResearch License,Java 研究授权协议) 发布.
至于 openjdk6 则更是有其复杂的一面, 首先是 openjdk6 是 jdk7 的一个分支, 并且尽量去除 Java SE7 的新特性, 使其尽量的符合 Java6 的标准.
关于 JDK 和 OpenJDK 的区别, 可以归纳为以下几点:
一. 授权协议的不同:
openjdk 采用 GPL V2 协议放出, 而 JDK 则采用 JRL 放出. 两者协议虽然都是开放源代码的, 但是在使用上的不同在于 GPL V2 允许在商业上使用, 而 JRL 只允许个人研究使用.
二. OpenJDK 不包含 Deployment(部署) 功能:
部署的功能包括: Browser Plugin,Java web Start, 以及 Java 控制面板, 这些功能在 Openjdk 中是找不到的.
三. OpenJDK 源代码不完整:
这个很容易想到, 在采用 GPL 协议的 Openjdk 中, sun jdk 的一部分源代码因为产权的问题无法开放 openjdk 使用, 其中最主要的部份就是 JMX 中的可选元件 SNMP 部份的代码. 因此这些不能开放的源代码 将它作成 plug, 以供 OpenJDK 编译时使用, 你也可以选择不要使用 plug. 而 Icedtea 则为这些不完整的部分开发了相同功能的源代码 (OpenJDK6), 促使 OpenJDK 更加完整.
四. 部分源代码用开源代码替换:
由于产权的问题, 很多产权不是 SUN 的源代码被替换成一些功能相同的开源代码, 比如说字体栅格化引擎, 使用 Free Type 代替.
五. openjdk 只包含最精简的 JDK:
OpenJDK 不包含其他的软件包, 比如 Rhino Java DB JAXP......, 并且可以分离的软件包也都是尽量的分离, 但是这大多数都是自由软件, 你可以自己下载加入.
六. 不能使用 Java 商标:
这个很容易理解, 在安装 openjdk 的机器上, 输入 "java -version" 显示的是 openjdk, 但是如果是使用 Icedtea 补丁的 openjdk, 显示的是 java.(未验证)
总之, 在 Java 体系中, 还是有很多不自由的成分, 源代码的开发不够彻底, 希望 Oracle 能够让 JCP 更自由开放一些, 这也是所有 Java 社区所希望的.
来源: http://www.bubuko.com/infodetail-3133819.html