前陣子有 Oracle 對企業追討 Java 授權費的新聞搞得人心惶惶:
被很多人問到「為了跑 Java 程式裝 JRE/JDK 也會被收錢嗎?」「裝什麼版本才會被收錢?」…
身為 Java 麻瓜,我知道才有鬼,新聞寫得不是很清楚,自己也好奇有無方法排除侵權疑慮,故門外漢爬文整理心得如下。(聲明:對此領域全然陌生,純為爬文心得拋磚引玉,如有錯誤歡迎補充指正)
- Java 產品很多,Oracle 官方網頁列舉的 Java 產品系列: 參考來源:PTT
*Java SE (最通用的一般平台)
*Java EE (企業級,例如:Serverlet)
*Java ME (行動平台,已漸漸勢微)
*Java SE Support (顧問服務)
*Java SE Advanced & Suite (SE的擴增功能、更強大的SDK… 等)
*Java Embedded、Java DB、Web Tier、Java Card、Java TV
Java EE/ME 需購買授權眾所周知,最有爭議的是 Java SE,也就是一般 PC 跑 Java 程式要去 Oracle 網站下載的版本。 Java SE(JRE、JDK)是免費的。BUT!在一些情境下需購買授權: 參考
*用於「智慧系統中的專門嵌入式電腦」(specialized embedded computers used in intelligent systems)
*透過工具來大規模部署開發完成的應用,例如:Windows Installer Enterprise JRE Installer工具」,會超出「一般運算用途」(general purpose computing)
*使用 Advanced Desktop、Advanced、Suite 等進階商業付費功能
前兩者情境很好識別,但第三種情境就有點模糊空間,甚至像是陷阱。進階商業付費功能變成陷阱的原因在於 Oracle 沒有為 Advanced Desktop、Advanced、Suite 拆出獨立安裝程式,全部包在 Java SE 標準安裝裡,就算你不想用,一旦下載安裝,電腦就具備使用 Advanced Desktop、Advanced、Suite 的能力,啟動 JVM 時加上 –XX:+UnlockCommercialFeature 參數即可開啟。
實際觀察,Java SE Adavnced 跟 Suite 的下載連結就是指到 Java SE 標準版的下載連結,應可證明 Oracle 並未區隔出不同的安裝程式。另外,我也找到一篇國外討論也提到 Oracle 沒有針對免費及付費產品提供不同安裝程式的問題:
"Java SE is free for what Oracle defines as “general purpose computing”...But it is customers in these general-purpose settings getting hit by LMS. The reason is there’s no way to separate the paid Java SE sub products from the free Java SE umbrella at download as Oracle doesn’t offer separate installation software"
這讓我想起餐廳「還沒點菜桌上就擺了幾盤小菜,等著你一挾就得付錢」的小伎倆,合法但存在爭議。
在沒有選擇的情況下安裝了付費功能,變成使用者得證明自己沒用不需付費,稱之為陷阱也不為過。一般使用者自然不會知道 –XX:+UnlockCommercialFeature 這種鬼參數,只知道點兩下程式就會動了。若使用者下載了第三方提供的 Java 程式,開發者在啟動程式批次指令裡下了 –XX:+UnlockCommercialFeature 參數… 其實我搞不懂,這樣子是開發者要付費還是使用者要付費?
付費功能是使用者安裝的沒錯,但使用者可主張自己從沒打算使用(其實是被硬塞的),封印被第三方程式解除,此時該算誰的責任是個好問題。
這有點像在手機裝了某個 App 在亂發簡訊,帳單得自己繳沒話說,但手機裝 App 前會有明顯的要求簡訊發送的授權確認,Java SE 進階功能在啟用時少了明確親民的提示,就易惹來爭議。
新聞裡有提到:
不少企業已經請授權專家和 Java 專家來檢視自家的 Java 版權。專家建議,當使用者下載 Java 就會得到所有的元件,因此必須要確認你只安裝那些需要且符合授權的元件,並刪除不需要的元件。
但依據上述研究心得,沒授權但不想用元件會被包在 Java SE 一起被裝起來,要怎麼刪除是個謎。而 Oracle 為什麼把事情搞得這麼複雜?把 Java SE 安裝程式分成免費版跟商業版,很難嗎?
最後,若想徹底遠離扯不清的 Java SE Advanced Desktop、Advanced、Suite 授權爭議,有幾個辦法:
- 如果完全用不到 Java 程式,可以移除 Java SE 製造不在場證明
- 改用 OpenJDK吧!開源萬歲~