关于Java的那些事

“Java收费了!”一颗石激起千层浪,媒体博眼球的目标达到了。上至航母级银行的IT高管,下至最基层的开发人员,一时间齐齐聚焦于此。为什么这个问题引起这么大的关注呢?因为尽管新一代编程语言可谓“人才辈出”,但是Java仍是目前使用最多的编程语言,不仅如此,Java SE也是云上排名第一的运行时。开发者和虚拟机数量可参考下图。

关于Java的那些事

下面这些关于Java的事你是否也很关心呢?

1.Java以前是免费的,现在要收费了?

  事实上,JDK有非公开版本,从来也没有免费过,比如6u45、7u80等等。官网所免费下载的Oracle Java SE公共更新版本,是遵循BCL(Binary Code License)协议,BCL协议支持一些免费使用的场景,也规定了一些须付费的场景。Java 6,7,8 的公开版本可以在不违反BCL制约的情况下使用。Java 8在19年1月之后不能免费用于商业系统,需要购买订阅服务才能获得后续更新和相应的服务。

  Oracle JDK 11将是纯商业化软件。Oracle Java SE 11开始,按照OTN(Oracle Technology Network License Agreement)协议规定,只有在开发、测试及原型证明的场景下提供有限的授权。关于授权政策的一些具体问题可以参考下面网页:

https://www.java.com/zh_CN/download/faq/distribution.xml

2.Java SE订阅服务提供什么?

  •   提供企业云、服务器和桌面部署所需的所有 Java SE 许可。

  •   提供最新的 Java 更新和安全修复程序,以及24x7 技术支持。

  •   提供Advanced Management Console (中心化管理系统) ,具有控制面板视图,管理、监测、控制企业内部各个版本的Java SE。

3.关于目前最广泛使用的Java 8的后续使用的考虑。

  Java SE 8是2014年发布,公共更新到2018年底;此后提供商业更新直至2025年3月。总的来说,存量项目,可考虑继续使用Java SE 8。新项目推荐使用Java SE 11。

  2019年1月以后,Oracle Java SE 8公开更新将不向没有商业许可证的业务、商用或生产用途提供。对于非个人使用的情况,如果需要2019年1月以后的Java SE 8的更新,则需订阅服务;如果保持2019年1月以前的版本及补丁(Oracle JDK 8 u191 是2019年1月前发布的最新版本),则在约定场景下使用则不必付费。关于Oracle Java SE 8发行版更新的声明请参见下面官网内容。

关于Java的那些事

  那么保持对后续更新的关注并使用更新是不是必要的呢?不少资深Java开发者持类似言论:“Java SE 8已经发布5年了,早就稳定了”“Java SE 8补丁已经到191了,重要漏洞都被发现并修补了”,面对这样的观点,还是那个原则,看你的企业、你的技术团队以及你的应用对风险的承担能力,是否能够自行承担技术风险;同时要审慎考虑可能存在的合规风险。

  Java SE 8之前的版本均已经停止公开更新,只有拥有许可的客户才能够下载到这些公开更新停止后的补丁。我们知道目前仍有为数众多的客户使用Java SE 7或者6。回顾一下历史,Java的几个老版本停止公开更新后仍出现大量补丁以解决新出现的漏洞,其中不乏严重的高危漏洞,例如Java 7在2015年4月停止公开更新后新出版本由7.0_80增长到7.0_191。看看下面关于公开更新停止后又出现的补丁数,不禁令人对没有保障的运行产生担心,不难推想Java SE 8后续将同样会有为数不少的新的漏洞和必要的更新。关于Java的那些事



4.OpenJDK和Oracle JDK的关联与差别是什么?

  Oracle贡献了OpenJDK绝大部分源代码,并仍在持续对OpenJDK支持和贡献。在各个版本的Oracle JDK中都有部分代码因为版权问题,不能公开。Java 11之前, Oracle JDK与OpenJDK存在差异不能互换(interchangeable), Open JDK 11和Oracle JDK 11代码相同可以互换。

  两者在支持力度、生命周期方面差异巨大。Oracle为订阅服务的客户提供强有力而且及时的技术保障,并且在产品生命周期方面会根据企业客户商用系统的特点提供保障。而OpenJDK并没有强有力和及时的技术保障,即使是市场上其他声称可以提供Java支持的公司都非常依赖Oracle代码和技术,而且OpenJDK每半年升级一次版本并停止对上一版本的更新和支持,这些对于企业级用户的关键应用有着巨大而深远的影响。

  Oracle JDK中还会存在一些Open JDK没有的、商用闭源的功能,例如早期版本中从JRockit移植改造而来的Java Flight Recorder(JFR),Java Mission Control(JMC)等,Oracle逐步贡献了包括上述两个功能的更多的功能给开源Java社区。仍有一些商用特征没有开放出来,包括MSI installer for Java SE, the Advanced Management Console等。如果你感兴趣,具体商用功能清单可参见:https://www.oracle.com/technetwork/java/javase/documentation/java-se-product-editions-397069.pdf,并关注新版本更新。

5.谁更青睐Oracle JDK?

  国外用户购买Java许可是出于合规和安全两方面考虑。

  国内大企业特别是金融行业亦非常关注合规和安全,对于关键系统的运行风险和服务保障非常重视。金融客户特别是大型银行的核心及关键系统的运行不容任何可见的风险,必须有在专有领域技术实力强的厂商来保驾护航。

  另一方面,开源技术的广泛使用,使得企业用户在多次危机考验中认识到平台保障的重要性。他们希望有可信赖的厂商能够提供技术保障,与他们共担风险共同面对鼎力相助。

  因此,需要强有力的专业技术服务保驾护航、重视合规和安全风险的企业都在积极咨询并规划、执行Java SE订阅事宜。

6.关于JDK版本更新,一个你需关注的要点:“长版本LST”。

  为响应现代技术变化和开发需求,从JDK9开始,JDK发布由三年左右改为半年,每六个月更新一版本。Oracle JDK区分了长版本(LTS)和短版本(non-LTS),JDK 8/JDK 11/ JDK 17是长版本。非长版本,半年后就不会再出公共更新了。各版本JDK的生命周期可参考下面示意图。

  对于企业客户的业务、商用、生产用途的生命周期较长的应用要选择LST。除非你的应用是季节性的实验品。

关于Java的那些事

7.可以选择免费的JDK吗?

  市场上有免费的JDK选择。可以考虑选择Open JDK,11版本以后它的代码与Oracle JDK相同并可以互换,只是须注意Open JDK的产品周期是半年一个新版本。在实在不想付费的情况下选择Open JDK,虽然自担技术风险压力太大,但还是比让领导承担合规风险要好一点吧。

8.关于Oracle Java SE,有没有免费的“午餐“呢?

  这个可以大声说一句,Oracle有声明,对于Oracle自己的其他产品所使用的Oracle Java SE,拥有限定的Java SE授权,只要这些产品的许可在有效期内,则可以在这些产品使用到Java SE时直接获得Java SE的服务支持。比如采购了Oracle Weblogic,Oracle Coherence等产品,那么你同时拥有了这些产品部署范围内的Java SE的许可。

编辑:殷海英





上一篇:Java 常用类总结(SE基础)


下一篇:码农飞升记-02-OracleJDK是什么?OracleJDK的版本怎么选择?