OpenJDK与JDK的区别剖析
一、以下是具体剖析:
使用过LINUX的人都应当晓得,在大多数LINUX发行版本里,外置或则通过软件源安装JDK的话,都是安装的OpenJDK,这么究竟哪些是OpenJDK,它与SunJDK有哪些关系和区别呢?
历史上的缘由是,OpenJDK是JDK的开放原始码版本,以GPL合同的方式放出。在JDK7的时侯,OpenJDK已然成为JDK7的主干开发,SunJDK7是在OpenJDK7的基础上发布的,其大部份原始码都相同,只有少部份原始码被替换掉。使用JRL(JavaResearchLicense,Java研究授权合同)发布。
至于OpenJDK6则更是有其复杂的一面linux命令行,首先是OpenJDK6是JDK7的一个分支,而且尽量除去JavaSE7的新特点,使其尽量的符合Java6的标准。
关于JDK和OpenJDK的区别,可以归纳为以下几点:
授权合同的不同:
OpenJDK采用GPLV2合同放出,而JDK则采用JRL放出。二者合同似乎都是开放源代码的,并且在使用上的不同在于GPLV2准许在商业上使用,而JRL只容许个人研究使用。
OpenJDK不包含Deployment(布署)功能:
布署的功能包括:BrowserPlugin、JavaWebStart、以及Java控制面板,这种功能在OpenJDK中是找不到的。
OpenJDK源代码不完整:
这个很容易想到,在采用GPL合同的OpenJDK中,SunJDK的一部份源代码由于产权的问题未能开放OpenJDK使用,其中最主要的部分就是JMX中的可选器件SNMP部分的代码。因而这种不能开放的源代码将它作成plugin,以供OpenJDK编译时使用,你也可以选择不要使用plugin。而Icedtea则为那些不完整的部份开发了相同功能的源代码(OpenJDK6),使得OpenJDK愈发完整。
部份源代码用开源代码替换:
因为产权的问题,好多产权不是SUN的源代码被替换成一些功能相同的开源代码,例如说字体栅格化引擎,使用FreeType取代。
OpenJDK只包含最精简的JDK:
OpenJDK不包含其他的软件包,例如RhinoJavaDBJAXP……,而且可以分离的软件包也都是尽量的分离查看linux安装jdk版本,而且这大多数都是自由软件,你可以自己下载加入。
不能使用Java商标:
这个很容易理解,在安装OpenJDK的机器上,输入“java-version”显示的是OpenJDK,而且假如是使用Icedtea补丁的OpenJDK,显示的是java。(未验证)
其实,在Java体系中,还是有好多不自由的成份,源代码的开发不够彻底,希望Oracle才能让JCP更自由开放一些北京linux培训,这也是所有Java社区所希望的。
以下内容引用知乎的内容
对里面的回答进行补充:
SunJDK能用于商业用途的license是SCSL(SunCommunitySourceLicense)。JRL(JavaResearchLicense)是2004年开始用的,伴随SunJDK6发布而开始使用,远比JDK7早。
从代码完整性来说:
SunJDK>SCSL>JRL>OpenJDK
SunJDK有少量代码是完全不开发的,尽管在SCSL版里也没有。但这些代码十分特别少。
SCSL代码比JRL多一些closed目录里的内容。
JRL比OpenJDK多一些受license影响而未能以GPLv2开放的内容。
但从OracleJDK7/OpenJDK7开始,闭源和开源版的实质差别实在是十分特别小。与其说OpenJDK7是“不完整的JDK”,还不如说OracleJDK7在OpenJDK7的基础上带了一些value-add,其中好多还没啥用(比如browserplugin)。
二、个人剖析理解:
JDK有两种别称,初期称作SunJDK查看linux安装jdk版本,如今是OracleJDK,虽然都是同一个东西。但这些说法也不一定确切,由于OpenJDK也称作OracleOpenJDK。
但是最简单直白的理解,也属于个人理解:OpenJDK是JDK的开源代码,也不算全是,由于在JDK部份,有一些是Oracle未开放源代码的,还有就是有一些的历史缘由。