不要害怕爪哇人


关于这个问题有一个有趣的讨论Java Champions最近化名为“对Java的恐惧”最初的帖子是关于一个正在评估使用哪个版本的Java的大学教员。鉴于它提出的问题,我认为它值得在博客中讨论。

我将引用引发讨论的评论:

“Oracle JDK / Oracle OpenJDK构建和其他提供商的OpenJDK构建将在更新的前六个月从相同的来源构建,在此期间应该可以互换。”六个月之后,甲骨文JDK公司/甲骨文公司的OpenJDK版本将由甲骨文公司自己开发。其他OpenJDK提供商将继续从OpenJDK更新项目中创建二进制文件。因此,Oracle JDK / Oracle OpenJDK和OpenJDK从其他提供商构建的版本可能有细微的不同。当然,来自各方的二进制文件可能会随着时间的推移而变化。”

问题的关键在于,随着时间的推移,我们将会看到Java平台的差异,因为不同的OpenJDK二进制程序发行商提供的实现与Oracle JDK略有不同。

这种情况不会发生的原因有很多,实际上,什么都没有改变。我们可以从两个角度来看待这个问题:安全补丁和错误修复/所有其他的变化。

不久前,甲骨文在OpenJDK叫做Vulnerability Group。这是一个封闭的小组,由于其工作的性质,它不公开任何讨论。集团成员中涉及的公司和集团不对外公布,但成员名单在OpenJDK census page。我只想说,所有参与的人都代表着你所期望的对JDK安全感兴趣的人。

该小组的职责是“…接收OpenJDK代码库中的漏洞报告,审查它们,协作修复它们,并协调此类修复的发布。”使命宣言中的关键词是合作。这个组的成员都可以看到安全问题和工作的细节一起开发补丁。结果是OpenJDK二进制文件的所有主要发行版都可以访问相同的安全补丁代码库。这就消除了这些变化的早期分歧问题。

对OpenJDK的更新超出了安全补丁的范围,还包括错误修复和其他小的改进。在新的发布节奏下,甲骨文上游对当前所做的所有更改OpenJDK repository只有。最近一次更新(4月份)的变更被升级到OpenJDK 12回购。对于包含这些更改的非甲骨文二进制发行版,它们必须被反向导入到旧的受支持版本的源代码中。

谁做这种反向传播工作取决于谁提供二进制分布。

红帽公司的安德鲁·哈利最近接管了这两个项目的主要维护者OpenJDK 811 update项目。正如安德鲁在一篇recent blog是的,确实如此意味着红帽已经“接管”了OpenJDK更新项目(正如您可能从earlier Red Hat press release)。红帽是OpenJDK项目的主要贡献者,两者都是旧版本(安德鲁也是OpenJDK 7 update project)和新版本(有两个JEPs来自JDK的红帽子。

4月份的JDK更新与过去不同,因为这是甲骨文第一次没有发布长期支持版本的公开更新。甲骨文唯一的免费公开更新是JDK 12

红帽公司的工程师与来自亚马逊和IBM等公司的其他人一起,对这些变化进行了反向报道,并立即将这些变化上传到OpenJDK 8和11更新网站。Azul的工程师也独立完成了同样的工作。

一个显而易见的问题是,Azul为什么要这么做?当然,这恰恰导致了原帖子描述的问题。

Azul有两个OpenJDK发行版(在许多方面与甲骨文相似)。我们的Zulu Enterprise edition是一个完全受支持的TCK-verifiedOpenJDK的分发(我们支持JDK 7、8和11,并扩展了更新的可用性)。作为客户合同的一部分,我们定义service-level agreements (SLAs)甲骨文发布他们的更新后,更新的速度有多快。最高水平的服务水平协议是48小时。为了保证这一点,我们不能依赖其他组织的工程师的善意,所以我们自己做这项工作。

我们的另一个分配是免费的Zulu Community edition,这是对当前OpenJDK repo中的任何内容的直接构建。这将只包含代码已被上游的更新,因此不附带任何服务级别协议。

除了祖鲁企业和甲骨文JDK之外,所有的OpenJDK二进制发行版都是从同一个OpenJDK回购代码开始的。在这种情况下没有出现分歧。祖鲁企业和甲骨文JDK的用户将是商业客户,他们需要在服务级别协议规定的给定时间内访问更新。

自从OpenJDK 6停止获取公共更新以来,这个过程一直在正常运行。安德鲁·哈利接手了这个项目的领导工作,从那以后,更新就被反向传播和上游化了。最近,安德鲁辞去了项目的领导职务Andrew Brygin of Azul took over。我们继续对OpenJDK 6进行上游更改。

然而,在选择使用OpenJDK二进制发行版时,值得添加一些注意事项。

首先,阿苏尔自己的吉尔·特内最近提出了一个问题mystery meat JDK builds。一些Linux发行版使用的版本字符串不能准确反映给定版本中包含的内容。要记住的第二件事是,尽管OpenJDK二进制文件的起点是OpenJDK repo中的代码,但是不需要修改就可以使用它。一些OpenJDK二进制发行商可能会从后面支持更新版本中没有包含的其他增强功能。用户应该仔细检查以确保他们从他们选择的二进制分布中得到他们想要的。

通过祖鲁企业版和社区版,我们满足了每个人的需求。为什么不试试呢?

最后一件事,more cowbell