JDK 規範與實作

May 14, 2022

Java 由 Sun 創造,為了讓對 Java 興趣的廠商、組織、開發者與使用者參與定義 Java 未來的功能與特性,Sun 公司於 1998 年組成了 JCP(Java Community Process)。

JCP/JSR

JCP 是個開放性國際組織,目的是讓 Java 演進由 Sun 非正式地主導,成為全世界數以百計代表成員公開監督的過程。

任何想要提議加入 Java 的功能或特性,必須以 JSR(Java Specification Requests)正式文件的方式提交,JSR 必須經過 JCP 執行委員會(Executive Committee)投票通過,方可成為最終標準文件,有興趣的廠商或組織可以根據 JSR 實現產品。

若 JSR 成為最終文件後,必須根據JSR實作出免費且開發原始碼的參考實現,稱為 RI(Reference Implementation),並提供 TCK(Technology Compatibility Kit)作為技術相容測試工具箱,方便其它想根據 JSR 實現產品的廠商或組織參考與測試相容性。

無論是 Java SE、Java EE 或 Java ME,都是業界共同訂製的標準,每個標準背後代表了業界所面臨的一些問題,他們期待使用 Java 來解決問題,認為應該有某些元件、特性、應用程式介面等,來解決這些問題,因而製訂JSR作為正式標準規範文件,不同的技術解決方案標準規範會給予一個編號。

在 JSR 規範的標準之下,各廠商可以各自實作成品,所以同一份 JSR,可以有不同廠商的實作產品,以 Java SE 為例,對於身為開發人員,或使用 Java 開發產品的公司而言,只要是使用相容於標準的 JDK/JRE 開發產品,就可以執行於相容於標準的 JRE,而不用擔心跨平台的問題。

Java SE 17 的主要規範是在 JSR 392 文件之中,而 Java SE 17 中的特定技術,會再規範於特定的 JSR 文件。

Sun JDK/Oracle JDK

在過去,Sun JDK 實現,就是 JDK 的參考實作(Reference Implementation),有興趣的廠商或組織可以根據 JSR 自行實現產品,只有通過 TCK 相容性測試的實作,才可以使用 Java 這個商標。

過去的 Sun BCL 提到,從 Sun 下載的 JDK 用於桌面個人電腦時,是免費的(no-fee);JDK8 以來至 Java SE 17 之前的這段時間,Oracle JDK 使用者,必須取得商用授權,才能進行商務應用,使用 Oracle JDK 中提供的商用技術(像是 Java SE Advanced Desktop、Advanced、Suite等),以及從 Oracle 官方取得臭蟲、安全性修補等服務。

在 Java SE 17 正式釋出之際,Oracle 允許在 NFTC(Oracle No-Fee Terms and Conditions) 授權下免費使用Java,這涵蓋了商業用途,詳情可參考〈Introducing the Free Java License〉。

OpenJDK

2006 年 JavaOne 大會上,Sun 宣告其參考實作將開放原始碼,從 JDK7 b10 開始有了 OpenJDK,並於 2009 年 4 月 15 日正式發佈 OpenJDK。

與當時同為開放原始碼的 Sun JDK 不同的是,Sun JDK 當時採 JRL,而 OpenJDK 採 GPL2 with the Classpath Exception,前者原始碼可用於個人研究使用,但禁止任何商業用途,後者則允許商業上的使用。

在〈Oracle JDK Releases for Java 11 and Later〉提到,從 Java 11 開始,除了釋出 Oracle JDK 建構版本之外,也會提供 OpenJDK 參考實作,不過後者不能使用 Oracle 提供的臭蟲、安全性修補等服務。

然而,相關的修補原始碼會回饋至 OpenJDK 的原始碼庫,OpenJDK 使用者,可以自行取得原始碼進行建構;除了自行建構之外,有些組織會在取得修補原始碼後,提供預先建構好的 OpenJDK LTS 免費版本,像是 Adoptium(前身 AdoptOpenJDK)、Amazon Corretto、Microsoft Build of OpenJDK;Azul Zulu 則為 OpenJDK 提供了付費服務,而在考量與作業系統整合度時,Red Hat 提供內含 OpenJDK 的建構版本。

簡單來說,現有的JDK選擇很多,無論你選擇哪個版本,請確認來源是否可信任、留意授權問題、提供了哪些服務、支援的時程等問題!

分享到 LinkedIn 分享到 Facebook 分享到 Twitter