来聊聊 OpenJDK 和 JVM 虚拟机

自从 Oracle 收购 Sun 以后,Java 世界也变了不少。

好在 Oracle 还开源了个 OpenJDK,并且很多东西都变了。

OpenJDK 就是一个桶,什么都可以往里面装,各大公司又纷纷退出自己的 JDK,简直直呼看不懂。

OpenJDK 在 Windows 环境下的诟病就是不好装,不知道怎么装。

救民水火的 RedHat

RedHat 应该注意到了这个情况,在自己的开发网站中推出了 RedHat OpenJDK 下载。我的本地开发环境就用的 RedHat 下载 OpenJDK。

挺好用的。

2022-08-21_08-47-03

如果你怕麻烦,直接用这个 JDK 也没啥问题。

从安装的环境中看不出来 JVM 用的是那个版本,应该是 HotSpot 吧。

如果错了请大家纠正。

IBM

在实际世界中,推动开源的还有 IBM。

这个名字不应该被忘记,虽然近些年有点廉颇老矣的意思了。

IBM 推出了 semeru, 下载页面是 IBM Developer

上面使用的 OpenJDK 和 OpenJ9 的虚拟机。

2022-08-21_08-50-30

因为同事的新机器要配置 JDK,突然问我要什么 JDK,我才从 IDEA 上面找到的。

上面还有一个 Eclipse Temurin 下载,你可能就有点困惑,我到底要下载那一个了。

下载地址为: Latest releases

为什么有 2 个版本

为什么这里有 2 个 OpenJDK 版本的下载呢?

经过考古,主要原因是这 2 个 OpenJDK 的 JVM 虚拟机版本不一样。

Eclipse Temurin 使用的是 Hotspot 的虚拟机。

IBM Semeru 使用的是 OpenJ9 的虚拟机。

IBM 和 Eclipse 基金会的渊源

IBM 将自己的开源的东西捐献给了 Eclipse 基金会。

可以说没有 IBM 就没有 Eclipse,Eclipse 就是 IBM 成立的,但是 Eclipse 又是独立运作的,捐献出去的东西也和 IBM 没有什么太大关系了。全部都是 Eclipse 基金会维护的。

IBM Semeru 认证

IBM Semeru 下面又出现了一个认证的版本。

Eclipse Temurin 提供 OpenJDK + Hotspot 映像,IBM Semeru Runtimes 将提供 OpenJDK + Eclipse OpenJ9 映像的开放和认证 (JCKed) 版本。

这是一个令人困惑的故事和过渡,我会尝试添加一些背景。到目前为止,AdoptOpenJDK 一直在使用 Hotspot 和 OpenJ9 VM 生成 OpenJDK 二进制文件。

随着 Adopt 迁移到 Eclipse,法律限制阻止了新的 Eclipse Adoptium 小组生产/发布基于 OpenJ9 的二进制文件。

因此,IBM 将以 IBM Semeru Runtimes 的家族名称生产基于 OpenJ9 的 2 种风格的二进制文件,即 Open 和 Certified。本质上相同的二进制文件,在不同的许可证下发布。

下载 IBM Developer 就可以开始使用了。

IBM Semeru Runtimes将有两个版本,具有不同的许可证:IBM Semeru Runtime开放版具有开源许可证(GPLv2+Classpath扩展),而IBM Semeru Runtime认证版具有IBM许可证。IBM Semeru Runtime都通过了全面的Eclipse AQAvit质量保证测试套件,以提供一个稳定和可支持的引擎,可以运行任何种类的Java应用程序。

正如其名称所示,IBM Semeru Runtime认证版也经过了Java TCK认证。 为了支持新的命名规则,从2021年7月的更新版本开始,当前的IBM SDK,即Java技术版11,将更名为IBM Semeru Runtime认证版。

上面的话真的很绕。

我的理解就是因为 OpenJ9 已经捐献给了 Eclipse 基金会了。从法律角度来说和 IBM 已经没有什么关系了,这个是属于 Eclipse 基金会的东西。

IBM 为了避免法律上面的麻烦搞了个认证版本。

这个认证版本和不认证版本的代码和结构都完全相同,只是 IBM 可能希望通过认证版本提供一些更多的支持吧。

对于开发人员来说,都一样没区别,放心用。

写在最后

Java 世界有了不少的变化。

IBM 是我一直比较敬佩的公司,从 Dev2Dev 网站到对 Java 世界的支持。

以及捐献给 Eclipse 基金会的很多产品,都让人值得怀念。

对比 Oracle 的贪得无厌,微软的小肚鸡肠,IBM 和 RedHat 都值得大家为他们点个赞。

虽然现在 Java 的版本已经被搞得乱得不要不要的了。

简单总结下就是,如果你希望:

OpenJDk + HotSpot 虚拟机: 下载 Eclipse Temurin 或者 RedHat 版本。
OpenJDK + OpenJ9 虚拟机:下载 IBM Semeru 版本(认证不认证都一样)