译者的话:决定翻译这篇文章不是一个人做出的,而是一种必要的措施:)。 作为CUBA框架的供应商,我们以令人羡慕的规律性与这个问题接触。 当然,这对于我们来说也是一个非常重要的主题,为了响应最新的变化,我们在Oracle JDK和OpenJDK上都建立了测试平台-这种措施目前可以保护我们的用户免于不可预见的许可费用。 但是,该主题尚未结束,我们将继续密切监视事件的发展,而且,谁知道,也许我们明年将不得不为其他一些JDK程序集添加支架...
这篇文章引人入胜的事实是它简洁地描述了问题以及最流行的JDK及其功能。
甲骨文公司最近宣布,由于转向了“发布培训”(一种新的版本发布方法) ,Java的发展将发生巨大变化。 此更改还导致版本支持方面的更改,现在将不对所有人实施,而仅对LTS版本实施 。 Java Champions社区已经阐明了所引入的创新, 可以在线获取详细文档。
即使有了这个消息,问题仍然存在:目前有哪些JDK构建可用? 它们是免费的还是商业的? 在回答这个问题之前,重要的是要了解JDK作为产品的要求。 实际上,只有一个核心JDK源代码。 他在这里 。 任何人都可以使用源代码来构建自己的程序集并将其放在网络上的某个位置。 但是,必须完成一个单独的认证程序,才能将JDK组件视为有效。 Java社区流程 (JCP)提供了认证,该Java社区流程提供了技术兼容性套件(TCK)。 如果组织创建符合TCK的新OpenJDK程序集,则将其视为“ Java SE兼容”。
请记住,除非装配公司从Oracle获得商业许可,否则该装配不能称为“ Java SE”。 例如,通过TCK的AdoptOpenJDK构建不是“ Java SE”,而是“ Java SE兼容”。 您还需要考虑的是,认证现在是基于“假释”的-结果不会发送到JCP / Oracle进行验证,而是分类信息。 简而言之,每个采用OpenJDK源代码并构建版本的供应商都会产生另一个单独的JDK构建。

因此,不费吹灰之力,我们建议您熟悉以下立即可用的JDK:
Oracle JDK
这是Java 11的主要提供者 (已经发布)。 这是带有付费支持的商业版本。 它可以免费下载,并且只能直接用于开发。 您必须在不支付Oracle费用的情况下将其用于生产中 (因此,对于许多对许可不感兴趣的人来说,这是一个陷阱)。 Oracle计划在2026年及以后提供有偿支持。 与以前相比,Oracle JDK程序集绝不会比OpenJDK“好”(只要两者处于相同的安全补丁程序级别)。
Oracle OpenJDK构建
在GPL下提供了带有Classpath Extension的免费非品牌版本的OpenJDK (适用于商业用途)。 这些构建版本仅在发布后的6个月内可用。 预计Java 11将发布Java版本11.0.0和两个安全补丁11.0.1和11.0.2。 要继续使用Oracle的OpenJDK版本及其补丁,必须在启动后一个月之内升级到Java 12。 请注意,提供安全补丁的过程与提供支持的过程有所不同,后者包括为处理错误报告付费。
采用OpenJDK
这些也是免费的和非品牌的OpenJDK构建 ,带有带有Classpath Extension的GPL,仅与Oracle的OpenJDK构建不同,这些构建版本对Java 11等主要版本的有效期更长。下一个主要版本发布一年后的4年 。 AdoptOpenJDK是面向社区的。 当其他团队为原始OpenJDK存储库创建和发布安全修补程序时,他们将发布构建。 IBM和Red Hat都表示他们打算发布此类补丁。
采用OpenJDK OpenJ9
除了标准的OpenJDK构建外, AdoptOpenJDK还将提供带有OpenJ9的版本,而不是HotSpot。 OpenJ9最初是IBM JVM,但现在是开源的。 而且,顺便说一句,这种选择是最值得研究的。
红帽OpenJDK
红帽在具有付费支持的商业产品红帽企业Linux(RHEL)上提供OpenJDK构建版本。 红帽在OpenJDK中的安全修复方面做得很好。 过去,Red Hat负责Java 6和7的安全更新,因为Red Hat构建与操作系统的集成度更高,因此不能将其称为典型的OpenJDK构建(没有最终用户JDK)。
阿祖尔祖鲁语
Zulu是带有付费商业支持的OpenJDK的品牌版本。 此外,尽管Azul通过Zulu社区免费提供了一些Zulu物品,但他们没有任何特殊义务来提供这些程序集。 与其他供应商不同, Azul具有相当大的Zulu支持计划, 包括对Java 9、13和15的支持 。
亚马逊corretto
这是所描述的所有选项中的最新选项。 Corretto是OpenJDK构建的免费版本,并通过TCK提供长期支持。 它在标准许可条件下分发给所有版本的OpenJDK:GPL + CE。 亚马逊将创建自己的补丁程序并在AWS上启动Corretto,因此将非常积极地使用它(并已添加到某些产品中)。 计划至少在2023年6月之前支持Java 8。
在将原始OpenJDK转换为不同版本的程序集的过程中,制造商可以添加各种实用程序或为产品添加商标(如果这不排除认证(TCK))。 例如,您不能将新的公共方法添加到API或新的语言资源。
还有其他JDK实现,例如IBM和SAPMachine。 但是,这些版本的程序集不经常使用,因此本文中未提及。 在此处和此处可以找到更多信息。
结论
就个人而言,我看不到多个版本的JDK的特殊问题,因为它们都需要经过认证(TCK)。 真正值得担心的是使用一种专有的JDK和Oracle的免费版本的程序集,以避免将来出现麻烦。 如果仅使用基本功能(例如,您的业务并不特别依赖于安全更新),则Oracle的OpenJDK构建(NOT OracleJDK)更适合您,因为 它们会不断更新(发布后的6个月内),您可以在生产中使用JDK,而不会出现任何问题。 如果您的企业使用云服务(或与AWS一起使用),那么已经在Amazon Linux和Docker上使用的 AWS Corretto是一个不错的选择。