OpenJDK 和 JDK 的区别详解

原创
2021/04/23 23:23
阅读数 1.4K

OpenJDK 是 JDK 的开放原始码版本,以 GPL 协议的形式放出。在 JDK7 的时候,OpenJDK 已经成为 JDK7 的主干开发,SUN JDK7 是在 OpenJDK 的基础上发布的,其大部分原始码都相同,只有少部分原始码被替换掉。使用 JRL(JavaResearch License,Java 研究授权协议)发布。

                                          

至于 OpenJDK6 则更是有其复杂的一面,首先是 OpenJDK6 是 JDK7 的一个分支,并且尽量去除 Java SE7 的新特性,使其尽量的符合 Java6 的标准。

在大多数Linux发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK。这样我们在安装SunJDK之前,需要先卸载Linux系统内置的OpenJDK。

 

关于 JDK 和 OpenJDK 的区别

1、授权协议的不同

OpenJDK 采用 GPL V2 协议放出,而 JDK 则采用 JRL 放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于 GPL V2 允许在商业上使用,而 JRL 只允许个人研究使用。

 

2、OpenJDK 不包含 Deployment(部署)功能

部署的功能包括:Browser Plugin、Java Web Start、以及 Java 控制面板,这些功能在 OpenJDK 中是找不到的。

 

3、OpenJDK 源代码不完整

由于 SUN JDK 的一部分源代码因为产权的问题无法开放 OpenJDK 使用,其中最主要的部份就是 JMX 中的可选元件 SNMP 部份的代码。因此这些不能开放的源代码将它作成 plug,以供 OpenJDK 编译时使用,你也可以选择不要使用 plug。而 Icedtea 则为这些不完整的部分开发了相同功能的源代码(OpenJDK6),促使 OpenJDK 更加完整。

 

4、部分源代码用开源代码替换

由于产权的问题,很多产权不是 SUN 的源代码被替换成一些功能相同的开源代码,比如说字体栅格化引擎,使用 Free Type 代替。

 

5、OpenJDK 只包含最精简的 JDK

OpenJDK 不包含其他的软件包,比如 Rhino Java DB JAXP……,并且可以分离的软件包也都是尽量的分离,但是这大多数都是自由软件,你可以自己下载加入。

 

6、不能使用 Java 商标

这个很容易理解,在安装 OpenJDK 的机器上,输入“java -version”显示的是 OpenJDK,但是如果是使用 Icedtea 补丁的 OpenJDK,显示的是 java。

TM:trademark 商标

显示 OpenJDK 而非使用 Java 商标

 

补充说明:Icedtea 补丁

IcedTea 项目最初是由于 OpenJDK 不完整(因产权而造成的障碍)而创立的,社区需要一个完整的开源工具链及代码库。

IcedTea 长期以来一直是 OpenJDK 的一套补丁,它有一个 基于 “./configure” 的不同的构建系统。

在 OpenJDK 中,我们已经替换了产权代码(encumbered code),因此不再有障碍了。正因为我们的努力,IcedTea 项目已经减少了使用补丁的数量。IcedTea 中看上去不错的一点是,它的 configure 脚本使得在多种不同的模式下构建 OpenJDK 变得很容易,比如使用 Zero Assembler Port 在非 x86/sparc 芯片上来支持编译等等。 IcedTea 提供的一大块内容是 plugin/java-web-start 基础架构。

SunJDK 中包含有部分第三方代码,这部分代码并没有开放,Sun 只是以二进制插件的形式对开发者提供,因此 OpenJDK 还有一部分代码是闭源的,这些代码以二进制插件的形式存在。这样,在 OpenJDK 的基础上,逐渐成立了另外一个项目—— IcedTea,IcedTea 项目开放了全部的二进制插件,是全部开源的Java 虚拟机版本。

在生产环境中是可以使用OpenJDK,OpenJDK允许在商业上使用,当前一些知名互联网公司使用的就是OpenJDK,如阿里巴巴、推特、谷歌、亚马逊等

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部