本文最後更新於 2026-02,補充了 Oracle 授權的歷史演變、Java 21 與 25 等 LTS 版本資訊,以及 Microsoft、IBM Semeru、Oracle GraalVM、BellSoft Liberica、Red Hat 等發行版介紹。原文發布於 2022-11。
想下載 Java 開發環境的時候,網路上一搜會發現選擇多到讓人眼花:OracleJDK、OpenJDK、Eclipse Temurin、Amazon Corretto、Azul Zulu⋯⋯同樣都叫 JDK,到底差在哪裡?商業使用會不會踩到授權問題?而且 Oracle 這幾年授權條款改了好幾次,連企業內部的法務都未必跟得上。這篇文章整理 Oracle 從 Java 8 到 Java 25 的授權變化,以及目前主流的幾個 OpenJDK 發行版選擇,幫助大家挑到最適合自己情境的版本。
基本介紹
本文涵蓋以下內容:
- JDK、JRE、JVM 的關係與為什麼要區分
- OracleJDK 與 OpenJDK 的差異
- Oracle 授權的歷史演變,包含 2023 年改成按員工數計價的重大變動
- LTS、GA、EA 三種版本標示的意義,以及目前可用的 LTS 版本
- 七種主流 OpenJDK 發行版介紹與適用情境(Eclipse Temurin、Amazon Corretto、Azul Zulu、Microsoft Build of OpenJDK、IBM Semeru Runtime、Oracle GraalVM、BellSoft Liberica、Red Hat build of OpenJDK)
為什麼需要 JDK
JDK 是 Java Development Kit 的簡稱,是開發、編譯、執行 Java 語言需要的軟體套件,裡面還包含 JRE、JVM 等。其中 JVM 經過 20 多年的發展,有很多好東西在裡面,所以除了 Java 之外還有很多程式語言也透過 JVM 來執行,例如 Kotlin、Groovy、Scala、來自 Ruby 的 JRuby、來自 Python 的 Jython…等。
OracleJDK 與 OpenJDK
OracleJDK 是從甲骨文網站上下載的 Java 開發與執行環境,商業使用需要付費。OpenJDK 的功能與 OracleJDK 是甲骨文另外發布的基於 GPLv2 with classpath exception 的 OpenSource 版,因為是 GPL 授權所以可以商業使用。
之前甲骨文與 Google 的 Java 官司,以及甲骨文宣布 Java 要收費的消息,令人聞之色變。先不談與 Google 官司的部分,其實 Java 本來就是有收費與不收費的部分,只是早期區分的很不明確。在官方的 JDK 當中某些功能不收費、某些功能要收費,恐怕連甲骨文自己都不好判斷哪些用戶要收費了。而且 OracleJDK 能免費使用的話,同為官方發佈的 OpenJDK 的存在變得有點微妙。後來就改成很明確的規則,使用 OracleJDK 要收費,OpenJDK 不變。有點像是 Red Hat Enterprise Linux 要付費、AlmaLinux 與 Rocky Linux 免費那樣(RIP CentOS…)。
大約從 Java 11 到 Java 16 的期間 OracleJDK 都是禁止直接商業使用的,必須付授權費。從 Java 17 開始 Oracle 推出新的「No-Fee Terms and Conditions(NFTC)」授權,OracleJDK 17、21、25 這些 LTS 版又可以免費用於正式環境,不過僅限該 LTS 版發布後到下一代 LTS 發布後一年的時間,超過時間就要走付費訂閱。對企業來說授權細節變來變去太麻煩,這也是為什麼很多人乾脆改用其他公司提供的 OpenJDK 發行版,避免被授權條款綁住。
前面提到的 OpenJDK 都是 Oracle 提供的 OpenJDK,每一代的安全性更新的時間比較短,專注在更新新版本。但不必擔心這些,因為我們不但有 OpenJDK(builds by Oracle),還有許多甲骨文以外的公司推出的 OpenJDK 實作可以使用,也就是本文要介紹的!
授權的歷史演變
Oracle 的 Java 授權這幾年改了好幾次,整理一下時間軸方便理解:
- Java 8(2014)以前:OracleJDK 可以免費用於正式環境,OpenJDK 只是備選方案,大多數人直接下載 OracleJDK。
- Java 11(2018):OracleJDK 改為「OTN License」,正式環境商用要購買訂閱。同時 Oracle 停止維護 OpenJDK 8 的官方 binary,AdoptOpenJDK 等社群版本因此崛起。
- Java 17(2021-09):Oracle 推出 NFTC 授權,OracleJDK 17 又可以免費正式商用,但有時間限制(下一代 LTS 出來後一年內可繼續免費,之後要付費訂閱才能繼續收到更新)。
- 2023-01:Oracle 把 Java SE 訂閱改成按全公司員工數計價,不是按使用 Java 的人數,而且包含協力廠商與外包人員。對中大型企業來說價格直接翻好幾倍,這是這幾年 Java 生態最大的事件,導致很多企業全面遷移到第三方 OpenJDK 發行版。
- Java 21(2023-09)、Java 25(2025-09):繼續沿用 NFTC 授權模式。但因為前述員工計價問題,第三方發行版的市占率大幅成長,Eclipse Temurin、Amazon Corretto、Microsoft Build of OpenJDK 都有顯著的使用者增加。
所以現在的趨勢是「能不碰 OracleJDK 就不碰」,因為授權條款一旦變動會影響整個公司的成本,使用其他公司的 OpenJDK 發行版穩定許多。本篇介紹的這些發行版核心都是同一份 OpenJDK 程式碼,功能上不會有差異,差別在於支援的版本範圍、支援的平台、長期維護承諾、額外的工具等。
為什麼有這麼多 JDK
Java 語言有共通的規範與標準,比如「JEP 286: Local-Variable Type Inference」這邊提議了 Java 10 開始可以使用好用的關鍵字 var 來宣告區域變數,由編譯器自動型別推斷。OpenJDK 的組織會開放提議 Java 的新特性,經過修正與討論後,再投票決定是否要成為正式功能,而且有時候只會定義 Interface 而不會規範實作。因此不同公司、組織可以依照規範建立 OpenJDK 實作。有點像是遵守 Unix 規範的各種類 Unix 作業系統,或是遵守 Linux kernel 的各種 Linux 發行版一樣,玲瑯滿目的選擇有時令人不知從何選起。
想看實際例子的話,可以參考之前的「從 Java 7、17、21、25 到 Java 26,Java Switch 關鍵字的演變」這篇文章,整理了 switch 關鍵字從 Java 7 支援 String、Java 14 的 Switch Expressions 與 yield,到 Java 21 的 Pattern Matching for switch,再到 Java 26 預覽中的 Primitive Types in Patterns,許多功能都是經過 JEP 提案、討論、投票後才成為正式功能,是 OpenJDK 規範流程的具體成果。
更多資訊可以參考:https://en.wikipedia.org/wiki/Java_Community_Process
Java 與 JDK 版本
- EA:早期預覽版,還不穩定,例如有 26EA,代表 26 還不是正式版。
- GA:一般版,可以正式使用。通常不會標註 GA,例如 25。
- LTS:長期支援版,出了新一代之後還是會有安全性更新。目前 LTS 版有 8、11、17、21、25,沒特別限制的情況下建議使用當時最新的 LTS 版(2026 年的話就是 Java 25)。
各種 JDK 介紹
Eclipse Temurin
專案介紹:https://projects.eclipse.org/projects/adoptium
下載連結:https://adoptium.net/temurin/releases/
Docker:https://hub.docker.com/_/eclipse-temurin/
支援平台:Linux(x64、arm64)、macOS(x64、arm64)、Solaris、Windows(x86、x64)
支援版本:8、11、17、21、25 等 LTS 版本,以及最新的功能版本
推薦與否:推薦
Eclipse 基金會底下的頂級專案,有很多大公司加入維護這個 JDK,例如 IBM、Red Hat、微軟。支援的作業系統與 CPU 架構最豐富,不只我上面列出的那些,可以到下載連結看看有多少種。Spring 官方文件、許多 Docker 官方 image 也都採用 Temurin,目前算是 OpenJDK 圈最主流的選擇之一。
Amazon Corretto
官網介紹:https://aws.amazon.com/tw/corretto/
下載連結:https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/downloads-list.html
Docker:https://hub.docker.com/_/amazoncorretto
支援平台:Linux(x64、arm64)、macOS(x64、arm64)、Windows(x64)
支援版本:8、11、17、21、25 等 LTS 版本,以及最新的功能版本
推薦與否:推薦
Amazon 提供的 OpenJDK 實作,介紹頁面寫道「Amazon Corretto 17 is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK). 」也就是不用成本、多平台、可以用於正式環境的 OpenJDK 版本。除了提供各個作業系統與 Docker 容器之外,Amazon 自己的 AWS 雲端服務自然也是採用 Corretto。
Azul Zulu
官網介紹:https://www.azul.com/zh-hans/
下載連結:https://www.azul.com/downloads/?package=jdk
Docker:https://hub.docker.com/r/azul/zulu-openjdk
支援平台:Linux(x86、x64、arm、arm64)、macOS(x64、arm64)、Windows(x86、x64、arm64)
支援版本:6、7、8、11、17、21、25 等 LTS 版本,以及最新的功能版本
推薦與否:推薦
Azul Zulu 是 Azul 提供的免費版 OpenJDK 實作,支援的 Java 版本最豐富,連遠古時期的 Java 6 都有(舊稱 Java 1.6),三個常見作業系統的各種 CPU 架構也都支援,是個不錯的選擇。如果手邊還在維護非常老舊的 Java 6、Java 7 系統,Azul Zulu 幾乎是少數還有提供的選項。Azul 的 JDK 跟 Oracle 一樣,有免費版與付費版。其中 Zulu 是免費版的,不限制商業用途;Core 與 Prime 是付費版的,但試驗與開發用途下可以免費使用,這點也跟現在的 Oracle 類似。
AdoptOpenJDK
下載連結:https://adoptopenjdk.net/
推薦與否:不推薦
這個專案已經停止開發了,最新的版本只到 16 而已。開發團隊將 AdoptOpenJDK 託給 Eclipse Adoptium,是 Eclipse Temurin 的前身,所以有在使用的話建議改用 Eclipse Temurin 囉!
不推薦還特別寫出來是因為前幾年 AdoptOpenJDK 還蠻多人用的,包含我手邊有些主機也用它,提醒有在用的人記得遷移囉!按照 Java 優良的向下相容能力,轉換一個 JDK 版本不太會出問題,而且 Amazon、Azul、Eclipse 也都還有提供舊版但有在維護的 OpenJDK,例如 8 和 11 的 LTS。
Microsoft Build of OpenJDK
官網介紹:https://learn.microsoft.com/zh-tw/java/openjdk/
下載連結:https://learn.microsoft.com/zh-tw/java/openjdk/download
Docker:https://mcr.microsoft.com/en-us/product/openjdk/jdk/about
支援平台:Linux(x64、arm64)、macOS(x64、arm64)、Windows(x64)
支援版本:11、17、21、25
推薦與否:推薦
微軟在 2021 年發布的 OpenJDK 實作,主要服務 Azure 雲端與微軟內部的 Java 應用(Minecraft Java 版就是用它跑的)。微軟招募了不少前 OpenJDK 核心成員,所以維護品質有保證。如果應用部署在 Azure 上、或公司本身就以微軟生態為主,選這個會比較順。
IBM Semeru Runtime
官網介紹:https://developer.ibm.com/languages/java/semeru-runtimes/
下載連結:https://developer.ibm.com/languages/java/semeru-runtimes/downloads/
Docker:https://hub.docker.com/_/ibm-semeru-runtimes
支援平台:Linux(x64、arm64、ppc64le、s390x)、macOS(x64、arm64)、Windows(x64)
支援版本:8、11、17、21 等 LTS 版本
推薦與否:特殊情境推薦
IBM Semeru 跟其他發行版最大的差別在於它使用OpenJ9 JVM,不是常見的 HotSpot。OpenJ9 的特色是記憶體用量比較低、啟動速度比較快,特別適合容器、微服務、Serverless 這類在意記憶體成本與冷啟動的場景。但是長時間運算的吞吐量 HotSpot 通常還是比較好,所以選擇前最好實測一下自己的應用是哪種類型再決定。如果有用到 IBM 大型主機(z 系列、Power 系列)的話,Semeru 也是少數有支援這些架構的發行版。
Oracle GraalVM
下載連結:https://www.graalvm.org/downloads/
支援平台:Linux(x64、arm64)、macOS(x64、arm64)、Windows(x64)
支援版本:17、21、25 等 LTS 版本
推薦與否:特殊情境推薦
GraalVM 也是 Oracle 推出的,但跟 OracleJDK 是不同的產品線。最大的特色是Native Image,可以把 Java 應用直接編譯成單一執行檔,啟動時間從幾秒降到幾十毫秒,記憶體用量也大幅降低,很適合 Serverless 與 CLI 工具。Spring Boot 3、Quarkus、Micronaut 都對 GraalVM Native Image 有不錯的支援。從 GraalVM 21 開始 Oracle 推出 GFTC 授權,正式環境免費使用,跟之前的 GraalVM Community Edition + Enterprise Edition 雙軌制相比簡單很多。但是 Native Image 需要在編譯期就決定所有反射、動態載入的 Class,跟傳統 Java 的開發習慣有些差距,使用前要評估專案是否相容。
BellSoft Liberica
官網介紹:https://bell-sw.com/libericajdk/
下載連結:https://bell-sw.com/pages/downloads/
Docker:https://hub.docker.com/r/bellsoft/liberica-openjdk-debian
支援平台:Linux(x86、x64、arm、arm64、ppc64le、riscv64)、macOS(x64、arm64)、Windows(x86、x64、arm64)、Solaris
支援版本:8、11、17、21、25 等 LTS 版本,以及最新的功能版本
推薦與否:推薦
BellSoft Liberica 是 Spring 官方推薦的 JDK 之一,也是少數有提供「Liberica Full」版本內建 JavaFX 的發行版(其他發行版要另外裝)。支援的 CPU 架構非常廣,連較少見的 RISC-V 都有,適合在嵌入式裝置或 Edge Computing 場景使用。BellSoft 也有自家的 Native Image 方案叫 Liberica NIK,是基於 GraalVM 的延伸版。
Red Hat build of OpenJDK
官網介紹:https://developers.redhat.com/products/openjdk/overview
支援平台:Linux(x64、arm64、ppc64le、s390x)、Windows(x64)
支援版本:8、11、17、21 等 LTS 版本
推薦與否:RHEL 用戶推薦
Red Hat 提供的 OpenJDK 發行版,主要服務 RHEL(Red Hat Enterprise Linux)的用戶,購買 RHEL 訂閱就會包含對應的 Java 支援。如果環境本來就是 RHEL,這是最自然的選擇,不需要另外處理授權問題。Red Hat 也是 OpenJDK 8、11 的長期維護者,貢獻不少安全性更新給整個 OpenJDK 社群。
其他
沒介紹的 OpenJDK 實作還有很多,例如阿里巴巴的 Dragonwell、騰訊的 Kona、SapMachine(SAP 出品)等。如果想看更完整的對照表,可以參考「Which Version of JDK Should I Use?」這個整理得非常詳細的網站。
參考
- 從 Java 11 到 Java 17/林信良 https://www.ithome.com.tw/voice/147487
- How much does Java cost? https://medium.com/techinpieces/how-much-does-java-cost-3c25275b4020
- Which Version of JDK Should I Use? https://whichjdk.com/
- Java Community Process https://en.wikipedia.org/wiki/Java_Community_Process