如果去年沒有注意到Oracle Java訂閱授權的警報,今年收到新的訂閱授權費用時,可能會大吃一驚。大部分向我們諮詢Oracle Java議題的企業都擔心置換會有問題,然而,被特定的JDK綁架這種違反Java理念的想法,竟然根深蒂固地存在於企業的意識中。
之所以會有這樣的印象得從Java的技術債說起。Java最重要的核心理念是「Write once, run anywhere」,常翻譯成「一次編寫,到處執行」。但早期JVM的實作差異造成大家普遍認為Java程式只能在特定的JRE上順利執行,無法輕易更換。這個問題隨著OpenJDK專案的推動及其作為Java規格的參考實作(JSR)後逐漸解決。自從昇陽公司在2009年開放原始碼至今已經過了15年,Oracle收購昇陽後,繼承了OpenJDK專案,並將其編譯釋出為現行的Oracle Java SE,因此Oracle Java SE可視為是Oracle OpenJDK的商業授權版,而不應該存在OpenJDK是Oracle Java「副廠」的這種想法。
目前Oracle以GPLv2+CPE 授權釋出OpenJDK,並且僅提供最新版的OpenJDK下載。舊版的LTS更新由參與OpenJDK專案的社群與公司負責(包括Oracle自身),例如現行的Oracle Java 8 update,但編譯品質良莠不齊,導致企業通常選擇「本家的」Oracle Java SE。
儘管如此,OpenJDK專案作為Java世界的基準,已經使不同的JDK之間基本上不太有相容性的問題。在Java 8之前,每個版本都有LTS,其版本號碼最後一碼是版本識別碼,例如8u341、8u342、8u345,指的都是Java 8第34次更新,結尾的數字分別代表:
1:關鍵安全更新(CPU),經過完整測試的安全更新,提供給訂閱客戶,全世界僅Oracle與Azul兩間公司提供此更新。
2:修正包更新(PSU),包含新功能或調整的更新,OpenJDK以此版號釋出。
5:緊急更新,目前都是尾數為2的版本出問題的緊急釋出。
Java 9之後,LTS改為特定版號,使用者可從下載來源分辨CPU版或PSU版。
如果只是想順利使用Java,又不想被狠狠地敲一筆,該怎麼做才好呢?Oracle稱新推出的計價方式為「簡化計費模型」,是根據公司員工人數來計算費用,不論是正職、兼職還是外包駐點,簡單而且暴力。
商用付費授權始於2019年4月,對應的版本是Java 8u211。企業可以盤點目前有多少設備及裝置使用Java 8u211及以上版本的Oracle Java,正確且完整的盤點將會是置換Oracle Java中最重要的作業。確認後安裝對應版本的OpenJDK,測試是否能正常啟動即完成置換。根據發佈紀錄,社群版有約三成的機率會出現問題,因此選擇有提供CPU版本的公司是避免踩雷的關鍵。 最後,再次盤點有沒有遺漏,確認清零。恭喜您,成功脫離困境。
<本文作者:李佳凌現為叡揚資訊資安直屬事業處副處長>