了解 Oracle JDK 版本的轉變

Oracle JDK、Oracle OpenJDK 以及 Java 8 公開更新的結束

Du Spirit
Java Magazine 翻譯系列

--

Translated from “Understanding Java Releases in Transition” by Donald Smith, Java Magazine, November/December 2018, page 52–55. Copyright Oracle Corporation.

從 Java 11 開始,Oracle 將會提供以開碼 GNU General Public License v2 授權的版本 (Classpath 例外,GPLv2 + CPE),以及商業授權版本,提供給作為 Oracle 產品或服務的一部分而使用 Oracle JDK的人,或是不想使用開源軟體的人。結合開源授權與商業授權,取代歷史悠久具有免費與付費商業條款的 Binary Code License (BCL)。將替每個授權提供不同的版本,除了外觀與包裝的差異外,功能是相同的。

從 BCL 到 GPL

作為 Java 技術的主要授權,Oracle Java SE 使用 BCL 已有十多年之久,BCL 允許在特定條件下無償使用,為滿足現在應用開發所需,Oracle 從 Java 9 起,開始提供與 Linux 平台相同授權的 OpenJDK。如果您習慣免費取用 Java SE,您能在 jdk.java.net 從 Oracle 取得 OpenJDK。如果您習慣將 Java SE 視為 Oracle 的商業產品或服務的一部分,那可以繼續從 My Oracle Support 或其他位置取得 Oracle JDK 版本。

功能相同具可交替性

Oracle BCL 授權的 JDK 過去包含的商業功能在 OpenJDK 版本無法使用,正如承諾,過去幾年,Oracle 已將這些功能貢獻給 OpenJDK 社群,包含 Java Flight Recorder、Java Mission Control、application class-data sharing 及 Z garbage collector (ZGC)。[譯註:這些功能名稱就不翻譯了]

因此,從 Java 11 開始,Oracle JDK 和 OpenJDK 在本質上相同。確實仍有些小差異,有些是有意的和表面上的,有些是單純需要更多時間與 OpenJDK 貢獻者討論。

Oracle JDK 與 OpenJDK 之間的差異

當使用-XX:+UnlockCommercialFeatures選項,Oracle JDK 11 會發出警告,反之,OpenJDK 此選項會導致錯誤。-XX:+UnlockCommercialFeatures選項從來就不是 OpenJDK 的一部分,現在加入也沒意義,因為 OpenJDK 不包含任何商業功能。這差異是為了讓 Oracle JDK 10 及其早期版本的使用者能更容易轉換到 Oracel JDK 11 及後續版本。

可以設定 Oracle JDK 11 將使用日誌資料提供給 Advanced Management Console,一個 Oracle 單獨的商業產品。Oracle 將與 OpenJDK 的貢獻者合作,討論這些使用資料在未來的 OpenJDK 發揮用。這差異主要是確保 Oracle 的顧客在做出此類決定前能有一致的體驗。

指令javac --release在 Java 9 與 Java 10 行為不一樣,因為 Oracle JDK 在這裡版本中包含某些額外的模組,是不包含在 OpenJDK 中,這些額外的模組為:
javafx.base
javafx.controls
javafx.fxml
javafx.graphics
javafx.media
javafx.web
java.jnlp
jdk.jfr
jdk.management.cmm
jdk.management.jfr
jdk.management.resource
jdk.packager.services
jdk.snmp

這差異仍存在,以提供過去的產品能有一致的體驗,這些模組現在作為 OpenJFX 的一部分,單獨提供,在 OpenJDK 及 Oracle JDK 中都可使用,因為他們曾是商業功能,Oracle 貢獻給 OpenJDK (像是 Flight Recorder),或是從 Oracle JDK 11 中移除 (例如 JNLP)。

指令java --versionjava -fullversion會區分 Oracle JDK 與 OpenJDK 的版本,以便支援團隊能檢測問題,具體來說,在 Oracle JDK 11 執行 java --version 指令會看到

java 11 2018–09–25
Java(TM) SE Runtime Environment 18.9 (build 11+28)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11+28, mixed mode)

在 OpenJDK 11 則會看到

openjdk version “11” 2018–09–25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

Oracle JDK 總會要求第三方加密提供者由已知的憑證簽屬,OpenJDK 有個開放的加密介面,這意味不會限制能使用哪些提供者。Oracle JDK 11 仍會繼續要求有效的簽章,而 Oracle 的 OpenJDK 則仍允許使用有有效簽章或沒有簽章的第三方加密提供者。

Oracle JDK 11 仍會提供安裝程式、品牌與 JRE 提供傳統桌面使用者一致的體驗,Oracle 的 OpenJDK 目前則只提供 zip 及 tar.gz 檔案,正在考慮替代的散佈格式。

該如何稱呼它們?

理想上,根據您的情況,不論是 GPL 授權或是商業授權,您能簡單稱呼所有的 Oracle JDK 版本為 “Oracle JDK”,然而。基於歷史因素,存在一些小的差異,Oracle 分別稱之為 Oracle OpenJDK,已及 Oracel JDK。[譯註:簡單說,GPL 授權的稱為 Oracle OpenJDK,商業授權的稱為 Oracle JDK]

關於 Java 8 及公開更新的結束

不論您如何稱呼它,都應積極考慮轉移到 Java 11,因為很快 (2019 一月),Java SE 8 商業使用者將迎來公開更新的終結,到那時,Oracle 將提供近連續五年的免費公開更新。需要更長時間使用 Java 8 的商業使用者,Oracle 提供 Oracle Java SE 訂閱服務,因此他們能繼續受益於 Java SE 8 的服務與定期更新。想繼續使用免費更新和修正的使用者應該轉移到後續版本,如前所述,目前最新的版本是 Java 11。[譯註:此文章是 2018 發表,當時最新版本確實是 Java 11]

不論如何,Oracle 將會為個人桌面使用的 Oracle Java SE 8 持續提供更新至 2020 十二月,在此期間,個人使用者應聯繫應用程式的供應商,鼓勵它們轉移它們的應用程式到最新的 Java,或轉換到其它應用程式。

展望未來,直到下個版本,Oracle 打算提供 Oracle JDK 與 Oracle OpenJDK 至少六個月的免費公開更新。商業使用者可以透過訂閱,取得長期版本的後續更新,或轉換到 OpenJDK 版本。

這些所有的變更,從授權、多種版本,到支援的選項,都是為了讓開發者或公司,可以選擇免費使用 Java 或付費取得服務。

譯者時間:

這篇文章放在待翻譯的清單中好長一段時間 (2018 至今...),最近 (2021) 正好 Java 17 發布,稍有空閒時間就順便翻一下,有空會再找 Java 17 新功能的文章來翻譯,順便玩玩 Java 17。

--

--