Java 11 計划於本月,即 9 月 25 日發布。與 Java 10 不同,Java 11 不僅提供了長期支持,還將作為 Java 平台的參考實現。新的長期支持版本每三年發布一次,根據后續的發布計划,Java 17 將於 2021 年發布。
我們曾報道過,甲骨文已經改進了Java SE(標准版)的商業支持計划,由之前企業一次性支付永久許可費用加年度支持費用的模式,改為新的訂閱模式(Java SE Subscription),當然個人使用和非商業使用可繼續享受免費支持,無需訂閱。在本文中,我們不妨了解一下 Oracle JDK 之外的 JDK,以及圍繞 OpenJDK 構建的生態系統所擁有的深度。本文將為大家介紹一些主流的 OpenJDK 變種版本。
OpenJDK builds
實際上,JDK 只有一組源代碼。源代碼使用 Mercurial(分布式版本控制系統)托管在 OpenJDK。任何人都可以獲取該源碼,並通過源碼構建一個變種版本發布到網絡上。但是需要一個獨有的認證程序(certification process)來確保構建的變種版本是有效的。
這個認證程序是由 JCP(Java Community Process) 組織審核的,后者會提供技術兼容性工具包(TCK,有時也稱為 JCK)。如果一個組織構建了一個 OpenJDK 的變種版本,並通過了 TCK 的兼容性測試,則可將構建的這個變種版本稱為"Java SE compatible"(兼容 Java SE 的 JDK)。
要注意的是,如果提供者沒有從 Oracle 獲得商業許可,不能將該構建版本稱為"Java SE"。例如,通過 TCK 兼容性測試的 AdoptOpenJDK 不是"Java SE",而是兼容 Java SE 的 JDK或兼容 Java SE 規范的 JDK。還要注意,認證程序目前是基於信任基礎的 —— 結果不會提交給 JCP/Oracle 用於檢查,也不會被公開。詳細說明可點此查看。
總的來說,OpenJDK + 變種版本的提供者將一個源碼庫轉換為許多不同的變種構建版本。
在將 OpenJDK 源碼轉換為變種版本的過程中,提供者可能會添加一些額外的標記或實用程序,但注意不要影響后面的認證程序。例如,提供者無法為 API 添加一個新的公共方法,或一項新的語言特性。
Oracle JDK
從 Java 11 開始,這是一個提供付費支持的品牌商業版本。當然個人使用和非商業使用仍可繼續享受免費支持(Oracle JDK 仍將為開發、測試、原型或展示目的的使用提供免費支持),不需要商業支持或企業管理工具的人可以選擇使用 Oracle 的 OpenJDK 構建。Oracle 計划在 2026 年后提供全額付費的服務支持(詳情)。要注意的是,與過去不同,Oracle JDK 並不比 OpenJDK “更好”(前提是兩者都處於相同的安全補丁級別)。
OpenJDK builds by Oracle
這些是免費的、完全無品牌的 OpenJDK 版本,基於 GPL 開源協議(+Classpath Extension),公司可安全且放心使用。這些版本僅在發布后的六個月內可以使用。要繼續使用由 Oracle 的 OpenJDK 構建版本和安全補丁,需要在發布新版本后的一個月內升級至新版本。
AdoptOpenJDK builds
這些版本也是免費的、完全無品牌的 OpenJDK 版本,基於 GPL 開源協議(+Classpath Extension),以免費軟件的形式提供社區版的 OpenJDK 二進制包,公司也可安全且放心使用。與由 Oracle 的 OpenJDK 構建版本不同,這些版本會提供更長的支持,像 Java 11 一樣,至少提供 4 年的免費長期支持(LTS)計划。AdoptOpenJDK 是一個由社區驅動的項目,如果其他群組在 OpenJDK 的源碼倉庫中創建和發布了安全修復程序,它們也會提供構建。 IBM 和 Red Hat 也曾表示他們打算提供這些安全補丁。
AdoptOpenJDK OpenJ9 builds
除了標准的 OpenJDK 構建外,AdoptOpenJDK 還提供了使用 OpenJ9 而非 HotSpot 的版本。OpenJ9 最初是由 IBM 實現的 JVM,現在已開源並交由 Eclipse 運作。
Red Hat OpenJDK builds
Red Hat 通過 Red Hat Enterprise Linux (RHEL) 提供了 OpenJDK 的變種構建版本,這也是提供付費支持的商業版本(詳情)。他們在為 OpenJDK 提供安全補丁方面做得非常好,而且 Red Hat 還為 Java 6 和 7 提供安全更新。Red Hat 構建的版本能更好地集成到操作系統中,所以它稱不上是純粹的 OpenJDK 版本(盡管你也不會注意到差異)。
Other Linux OpenJDK builds
不同的 Linux 發行版擁有不同的方式來訪問 OpenJDK。這里是一些常見的發行版:Debian,Fedora, Arch, Ubuntu。
Azul Zulu
Zulu 是 OpenJDK 的免費版本,但同時提供商業付費支持。當然不購買收費的技術支持的話,Azul 也有為 Zulu 提供免費的社區技術支持。Azul 有一個廣泛的計划以支持 Zulu 商業化,包括支持 Java 9,13 和 15 ,這點與其他的提供者有不同之處(詳情)。
IBM
IBM 為 Java 8 及更早版本提供並支持 JDK。他們還使用 OpenJ9 為 AdoptOpenJDK 構建提供商業付費支持。
SAP
SAP 使用 GPL + CE 許可證為 Java 10 及更高版本提供 JDK。他們還有一個商業的閉源 JVM。不過沒有找到任何有關支持生命周期的信息。
總結
現在有很多不同的 OpenJDK 變種版本,它們都基於原始的上游代碼倉庫。但每個構建版本都提供了獨有的選擇 —— 免費或商業,品牌或非品牌。可以選擇當然很好,但如果你追求的是“標准”,那么目前我最好的建議是使用 Oracle 的 OpenJDK 構建版本、AdoptOpenJDK 構建版本或操作系統(Linux)中內置的版本。
編譯自:https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html
作者:Stephen Colebourne