openjdk与Oraclejdk的区别
在2006年11月13日的JavaOne大会上,Sun公司(当时还没被收购)宣布计划要把Java开源,在随后的一年多时间内,它陆续地将JDK的各个部分在GPLv2(GNUGeneralPublicLicensev2)协议下公开了源码,并建立了OpenJDK组织对这些源码进行独立管理。除了极少量的产权代码(EncumberedCode,这部分代码所有权不属于Sun公司,Sun本身也无权进行开源处理)外,OpenJDK几乎拥有了当时SunJDK的全部代码。
OpenJDK的质量主管曾经表示在JDK7中,SunJDK和OpenJDK除了代码文件头的版权注释之外,代码几乎是完全一样的,所以OpenJDK7与SunJDK7本质上就是同一套代码库出来的产品。
总结下来,OpenJDK和OracleJDK存在以下方面的区别:
授权协议不同
OpenJDK采用GPLV2协议放出,而OracleJDK则采用JRL放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于GPLV2允许在商业上使用,而JRL只允许个人研究使用。
OpenJDK不包含OracleJDK中的部分产权代码
由于OracleJDK中的部分代码的产权也不是归Oracle所有的,所以这部分代码就没开源到OpenJDK中。但是很多“好心”的开源爱好者在OpenJDK中实现了相同的功能,并将源代码开源到OpenJDK中。比如说字体栅格化引擎,使用FreeType代替。
不能使用Java商标
在Sun被Oracle收购以后,Java这个商标就归Oracle所有了。不仅OpenJDK不能使用java商标,J2EE这个曾经Sun的亲儿子命运也同样坎坷,已经被Oracle无情抛弃,同样
不能在使用Java商标。
但是随着JDK版本的不断发布,Oracle失去了维护OpenJDK的耐心,因为不赚钱啊。RedHat从Oracle手上接过OpenJDK的管理权利和维护职责。
2019年3月20日,JDK12发布,只包含8个JEP,其中主要有Switch表达式、Java微测试套件(JMH)等新功能,最引人注目的特性无疑是加入了由RedHat领导开发的Shen-andoah垃圾收集器。Shenandoah作为首个由非Oracle开发的垃圾收集器,其目标又与Oracle在JDK11中发布的ZGC几乎完全一致,两者天生就存在竞争。Oracle马上用实际行动抵制了这个新收集器,在JDK11发布时才说应尽可能保证OracleJDK和OpenJDK的兼容一致,转眼就在OracleJDK12里把Shenandoah的代码通过条件编译强行剔除掉,使其成为历史上唯一进入了OpenJDK发布清单,但在OracleJDK中无法使用的功能。
所以对于高版本的OpenJDK和OracleJDK之间,也存在OpenJDK中有的功能,但是OracleJDK中不包含的。
总的来说,对于普通开发,使用OpenJDK和OracleJDK并没有太大差别,两者的差别更体现在商业考量上面。
openjdk源代码不完整
这个很容易想到,在采用GPL协议的OpenJDK中,SUNJDK的一部分源代码因为产权的问题无法开放给OpenJDK使用,其中最主要的部份就是JMX中的可选元件SNMP部份的代码。因此这些不能开放的源代码将它作成plug,以供OpenJDK编译时使用,你也可以选择不要使用plug。而Icedtea则为这些不完整的部分开发了相同功能的源代码(OpenJDK6),促使OpenJDK更加完整。
总结
其他区别欢迎各位指出
以上就是openjdk与Oraclejdk的区别的详细内容,更多关于openjdk与Oraclejdk的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。