從 2019 年 4 月 16 起的發行版更改了 Oracle Java 許可。
新的適用於 Oracle Java SE 的 Oracle 技術網許可協議 與以前的 Oracle Java 許可有很大差異。 新許可允許某些免費使用(例如個人使用和開發使用),而根據以前的 Oracle Java 許可獲得授權的其他使用可能會不再支持。 請在下載和使用此產品之前認真閱讀條款。
距離Oracle宣佈商用Oracle Jdk要收費已經過去一年了,公司的Oracle Jdk版本一直沒有升級,維持在8U211之前。但是,這始終是個問題,遲早要面對,最終我們決定採用OpenJDK,轟轟烈烈的Oracle Jdk替換為OpenJDK的升級過程就要開始了,但願別有什麼坑。
下面梳理一下JDK的收費的問題。
2019年4月16日,Oracle發佈了新的JDK 8的更新,版本號為8u211和8u212。與以往不同的是,新版本的許可協議從BCL換成了OTN,這就意味著,如果想在生產環境使用這個版本了或者之後發佈的新版本,就需要給Oracle交錢了。
問題一:Oracle JDK使用什麼協議?
BCL協議,即Oracle Binary Code License Agreement,協議規定你可以使用JDK,但是不能進行修改。私用和商用都可以,但是JDK中的某些商業特性,是需要付費才可以使用的。OTN協議,即Oracle Technology Network License Agreement,目前新發布的JDK用的都是這個協議,可以私用,商用需要付費。Oracle JDK在8U211之前是BCL協議,之後都是OTN協議。
問題二:不想掏錢怎麼辦?
可以使用OpenJDK,OpenJDK是一個基於GPLv2+CE協議的開源JDK實現,他由OpenJDK社區來運作,作為OpenJDK社區的主導者,Oracle也在儘量減小OpenJDK和Oracle JDK的差別,將一些商業特性移植到了OpenJDK上,比如Java Flight Recorder,Java Mission Control和ZGC等等。對於普通開發者,兩者差異可忽略不計。
除了Oracle的OpenJDK,還有很多免費OpenJDK實現可以用,比如 Zulu,AdoptOpenJDK,Amazon的Corretto和阿里巴巴的dragonwell等等。
問題三:OpenJDK和OracleJDK有什麼關係?
Yes. Oracle JDK is based on the OpenJDK source code. In addition, it contains closed-source components
是的,Oracle JDK 是在OpenJDK源碼的基礎上編譯的,加入了一些商業化組件和features.除此之外,我們還關心兩者的發佈關係,下面來看下JDK的發佈模型。2017年9月21日,伴隨著JDK9的發佈,JDK就開啟了新的發佈模式(如下圖所示)。JDK分為OracleJDK、OpenJDK。
OpenJDK的lience是GPLv2+CPE,可以免費使用。從JDK9開始,OpenJDK每6個月發佈一次,也就是每年的3月份、9月份各發布一次,稱為feature release。JDK9就是在2017年9月份過GA的。除了feature release之外,OpenJDK每個季度會提供一個update release。分別在1月份、4月份、7月份和10月份。所以每個feature release之後,都會有兩個update release。
使用OracleJDK需要commercial license,這個不是免費的。OracleJDK每3年發佈一次LTS(Long Term Support)版本,Support的期限是8年。2018年9月發佈的JDK11是第一個LTS版本,support到2026年9月。同樣,OracleJDK每年也有4個update release。因為OracleJDK每3年發佈一次LTS版本,所以下一次LTS將在2021年9月份發佈。
問題四:Oracle JDK 和 Open JDK有什麼區別
參考 https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later 所說,可以看到大概有幾點區別:
1.Oracle JDK 包含了OpenJDK版本中沒有的“商業特性”。然而,正如承諾的那樣,在過去的一年中,Oracle正在為OpenJDK社區貢獻這些特性:
Oracle認為,從Java 11開始,Oracle JDK構建和OpenJDK構建在本質上是相同的。
From Java 11 forward, therefore, Oracle JDK builds and OpenJDK builds will be essentially identical.
- 仍然存在少量的差異,有些是故意的(可能因為Sun公司源碼協議問題),有些是修飾性的,有些只是因為需要更多的時間與OpenJDK貢獻者進行討論,具體如下:
- Oracle JDK 11在使用-XX:+ unlockcommercial alfeatures選項時發出警告,而在OpenJDK中,這個選項會導致錯誤。
- 可以將Oracle JDK 11配置為向“高級管理控制檯”工具提供日誌數據,這是一個單獨的商業Oracle產品。
- Oracle JDK中包含一些OpenJDK中不存在的模塊(不過從Oracle的描述來看,這些差別是一些遺留原因造成的,Oracle會逐步消除這些差異),具體如下:
- 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
- java -version和java -fullversion命令的輸出將區分Oracle JDK構建和OpenJDK構建,具體來說,運行java -version:
Oracle JDK 11的構建結果如下:
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)
And for an OpenJDK 11 build:
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將繼續包括安裝程序、品牌和JRE打包,以獲得與傳統桌面使用一致的體驗。Oracle OpenJDK的構建版本目前以zip和tar.gz文件的形式提供,同時還在考慮其他的發佈格式。
問題五:我們願意掏錢,怎麼收費?
可以通過訂閱Java SE Subscription來付費,桌面用途每人每月2.5刀,服務器用途每個處理器每月25刀,量多還有優惠。
寫在最後:
Money!但是掙錢的同時,Oracle也不想把市場整沒了,畢竟在這個領域內還有一些競爭者,所以在提供了商用收費、私用免費模式的同時,推出了OpenJDK,供企業免費使用;從Oracle JDK和OpenJDK的發佈來看,OpenJDK的發佈頻率更快,也存在OpenJDK為Oracle JDK探路的用意;Oracle JDK提供給對穩定性要求更高的企業用戶,比如說傳統的大企業,不差錢;OpenJDK提供給一些急先鋒,反正你自己公司一週幾個版本,bug不斷,也不在乎OpenJDK升級的這點風險。
來個投票,也歡迎已經大規模遷移過的朋友留言探討遷移過程中是否有什麼坑:
閱讀更多 令狐沖學Java 的文章