[討論] Java依舊免費?
良葛格寫的文章
Java依舊免費?
https://www.ithome.com.tw/voice/126265
Oracle JDK只能用於一般用途,不過,OpenJDK仍能允許商業使用。但是,雖然有免費、可商用的JDK建構版本,並不代表JDK的選擇與維護是零成本
過去,被認為是免費的Java而言,在傳出有企業遭到追討授權費的新聞後,Java不再免費的話題,就傳遍了大街小巷。
現在,Java 11都釋出了,若還只是在討論免不免費這件事,只是把問題看得太簡單了!
Java釋出版本與頻率
Java在釋出的版本與頻率上,過去以來,曾有幾次重大變更。
若干歷史在先前專欄〈想跳舞的Java〉曾經提過,就結論而言,JDK8及更早版本,安全性修補的釋出會是基於5的倍數,遇偶數加一,例如8u5、8u11、8u25等,8u31,特性(feature)釋出版本會是20的倍數,像是8u20、8u40、8u60等,會包含先前的安全性修補,以及不影響規格書的特性,像是JVM的效能增強或工具更新等,自Java
9開始,安全性修補版本改為每三個月釋出一次,而特性版本改為每六個月釋出一次,在這樣的頻率下,9.0.1、10.0.1中,1代表著安全修補,而9、10這開頭的數字,代著特性版本,更新內容可以是包含JVM、語言、程式庫等各種更新,而不是像Java 7到Java 8這樣,數字代表著重大釋出(major release)。
Java 9、10都是短期支援版本,在下個小版本釋出之後,上個版本就不再維護,使用者要趕快更換至新版本。
不過,就企業而言,安全性的修補通常是重大考量,因而更需要留意的是長期支援版本(Long-Term-Support, LTS),例如,Java 8就是個長期支援版本,Oracle預計支援至2020年,〈Oracle Java SE Support Roadmap〉(https://goo.gl/7Civd5)指出,自Java 8之後,預計每三年釋出一個LTS,最新出爐的Java 11,就是長期支援版本。
Stephen Colebourne在〈Java release chains〉(https://goo.gl/2Tex7a)建議,可以將LTS視為如同過去版本的重大釋出,因而就企業而言,Java 8是個可考慮的版本(他建議至少是8u40之後的版本),接下來則是 Java 11,若是Oracle JDK11,目前預計支援至2026年。
Java不再免費?
前陣子有段時間,傳言有企業接到Oracle通知,將Java運用在商業或特定用途,必須繳交授權費,因而傳出許多Java不再免費的消息,甚至與Oracle控告Google的官司新聞混淆在一起。
而Oracle與Google之所以打官司,問題就在於,Oracle聲稱Google的Android系統抄用了Java的API,而這與Java運用在商業或特定用途必須繳交授權費,其實是不相干的兩回事。
「Java不再免費」是個籠統的說法,被稱為不再免費的對象,指的其實是JDK/JRE。
過去從Sun下載JDK使用,沒聽過被要求授權費的事情。因為,從Sun/Oracle下載的JDK(不包含JDK11),必須遵守BCL(Binary Code License )規範,而當時Sun BCL也提到,從Sun下載的JDK在用於桌面個人電腦時,是免費的(no-fee);到了後來,在Oracle BCL中則提出不同規範,要求從Oracle下載的JDK,只能用於一般用途(general purpose, general use, general computing)。
然而,到底什麼是一般用途呢?就目前我所搜集到的資訊來說,看不到有任何來源給出了清楚的界線!不過,後來在〈Oracle Java SE 8 Release Updates〉(https://goo.gl/CNqJp2)中指出,Oracle JDK8的公開更新自2019年1月之後,在沒有取得商業授權下,非個人用途是不得採用的。
就LTS來說,剛釋出的Oracle JDK11在〈Oracle JDK License〉(https://goo.gl/4vFoAZ)也明確寫著,除了開發、測試、原型、應用程式展示外,不可將之用於任何資料處理(data processing)、商業、產品、內部企業等目的。
儘管BCL對於什麼是一般用途,一直沒有定義清楚的畫分界線,然而,就Oracle JDK8、Oracle JDK11等LTS版本來說,商務上的應用,確實不再是免費的!
基於OpenJDK的建構版本
若採用重要的LTS,Oracle JDK的用戶必須取得商用授權,才能取得安全修補,不過,對OpenJDK來說並非如此!2006年JavaOne大會上,Sun宣告Java開放原始碼,2009年4月15日正式發布OpenJDK,而OpenJDK7的授權為GPLv2 + Classpath Exception(https://goo.gl/eYsupP),基本上,這裡允許商業上的使用。
舉例來說,OpenJDK7當中,有許多程式碼因程式碼授權的衝突而必須拿掉,使得原始的OpenJDK7是不完整的,所以,Red Hat於2007年發起了IcedTea計畫,致力於修補OpenJDK7,使之完備,並通過了JCK相容測試。
至於OpenJDK6,則是OpenJDK7的分支,過去Oracle JDK6結束支援時,Red Hat於2013年3月宣布,他們持有OpenJDK6領導權,而能持續對OpenJDK6臭蟲與安全問題進行修補(但該公司在2016年12月已經終止OpenJDK6的支援)。
在〈Oracle JDK Releases for Java 11 and Later〉(https://goo.gl/uSV34X)提到,從Java 11開始,除了必須取得商用授權的Oracle JDK之外,Oracle也提供OpenJDK的建構版本,其中也包含了過去版本中的一些商用特性(過去幾年Oracle陸續貢獻給OpenJDK社群)。
因此,就功能而言,從JDK11開始,Oracle JDK及OpenJDK基本上是相同的(文中也提到了一些差異性,像是javafx等模組)。
若是使用Oracle建構的OpenJDK,未來無法從Oracle取得安全修補,不過,安全修補會回饋至OpenJDK的原始碼庫,而除了自行建構以便跟上修補之外,也有其他預建構好的OpenJDK版本,像是〈Time to look beyond Oracle's JDK〉(https://goo.gl/ZPgvD4)提到的AdoptOpenJDK等。
單就免費的考量來說,AdoptOpenJDK就提供了OpenJDK8到10,在Java 11正式釋出後不久,也會有OpenJDK11的版本,就LTS來說,基本上,不用擔心沒有免費的安全修補可用。
若需要商務上的付費服務,〈Time to look beyond Oracle's JDK〉也提到,如Azul Zulu等公司,在考量與作業系統整合度時,Red Hat也提供內含OpenJDK的建構版本。
並非只是免費與否
就簡單的結論來說,Java還是有免費版本的JDK,問題在於選擇使用哪個JDK。然而,就算有AdoptOpenJDK等組織或公司,提供現成OpenJDK建構,但是,更多樣的OpenJDK建構來源,加上六個月的釋出模型,以及三年一次的LTS版本,也代表著更多必須考量的問題。
就穩定的安全修補而言,著重在三年一次的LTS是個選擇,然而,不同的OpenJDK建構版本,對LTS的支援期限也不同。另外,也必須同時考量程式庫要求的最低版本等問題,關於這部份,可參考〈如何面對新的Java Release Model〉(https://goo.gl/F5UoPF)。
因而就算有免費可商用的JDK建構版本,也並不代表JDK的選擇與日後維護等是零成本,更積極評估與選擇變得必要,我建議以上提及的文件內容,你可以詳細閱讀,評估時容易有個出發點,不致於單純落入免不免費這件事上!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.230.7.177
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1539496398.A.C89.html
推
10/15 08:43,
5年前
, 1F
10/15 08:43, 1F
→
10/15 08:48,
5年前
, 2F
10/15 08:48, 2F
推
10/15 11:38,
5年前
, 3F
10/15 11:38, 3F
→
10/15 12:46,
5年前
, 4F
10/15 12:46, 4F
推
10/15 14:43,
5年前
, 5F
10/15 14:43, 5F
→
10/15 14:44,
5年前
, 6F
10/15 14:44, 6F
推
10/15 15:09,
5年前
, 7F
10/15 15:09, 7F
→
10/15 15:09,
5年前
, 8F
10/15 15:09, 8F
→
10/15 17:10,
5年前
, 9F
10/15 17:10, 9F
→
10/15 17:13,
5年前
, 10F
10/15 17:13, 10F
→
10/15 17:14,
5年前
, 11F
10/15 17:14, 11F
推
10/15 17:23,
5年前
, 12F
10/15 17:23, 12F
→
10/15 17:23,
5年前
, 13F
10/15 17:23, 13F
推
10/15 17:39,
5年前
, 14F
10/15 17:39, 14F
→
10/15 17:39,
5年前
, 15F
10/15 17:39, 15F
→
10/15 17:39,
5年前
, 16F
10/15 17:39, 16F
→
10/15 17:41,
5年前
, 17F
10/15 17:41, 17F
→
10/15 17:41,
5年前
, 18F
10/15 17:41, 18F
→
10/15 17:45,
5年前
, 19F
10/15 17:45, 19F
→
10/15 17:45,
5年前
, 20F
10/15 17:45, 20F
→
10/15 17:50,
5年前
, 21F
10/15 17:50, 21F
→
10/15 18:04,
5年前
, 22F
10/15 18:04, 22F
→
10/15 18:05,
5年前
, 23F
10/15 18:05, 23F
→
10/15 18:07,
5年前
, 24F
10/15 18:07, 24F
→
10/15 18:07,
5年前
, 25F
10/15 18:07, 25F
→
10/15 18:07,
5年前
, 26F
10/15 18:07, 26F
→
10/15 18:07,
5年前
, 27F
10/15 18:07, 27F
推
10/15 18:43,
5年前
, 28F
10/15 18:43, 28F
→
10/15 19:05,
5年前
, 29F
10/15 19:05, 29F
→
10/15 19:05,
5年前
, 30F
10/15 19:05, 30F
→
10/15 19:05,
5年前
, 31F
10/15 19:05, 31F
推
10/15 19:09,
5年前
, 32F
10/15 19:09, 32F
→
10/15 19:09,
5年前
, 33F
10/15 19:09, 33F
→
10/15 19:09,
5年前
, 34F
10/15 19:09, 34F
→
10/15 19:10,
5年前
, 35F
10/15 19:10, 35F
→
10/15 19:10,
5年前
, 36F
10/15 19:10, 36F
→
10/15 19:56,
5年前
, 37F
10/15 19:56, 37F
推
10/15 20:07,
5年前
, 38F
10/15 20:07, 38F
→
10/15 20:07,
5年前
, 39F
10/15 20:07, 39F
→
10/15 20:11,
5年前
, 40F
10/15 20:11, 40F
推
10/15 20:12,
5年前
, 41F
10/15 20:12, 41F
→
10/15 20:12,
5年前
, 42F
10/15 20:12, 42F
→
10/15 20:13,
5年前
, 43F
10/15 20:13, 43F
→
10/15 21:18,
5年前
, 44F
10/15 21:18, 44F
→
10/15 21:54,
5年前
, 45F
10/15 21:54, 45F
→
10/15 21:55,
5年前
, 46F
10/15 21:55, 46F
→
10/15 21:55,
5年前
, 47F
10/15 21:55, 47F
→
10/15 21:56,
5年前
, 48F
10/15 21:56, 48F
→
10/15 21:56,
5年前
, 49F
10/15 21:56, 49F
→
10/15 21:56,
5年前
, 50F
10/15 21:56, 50F
→
10/15 22:03,
5年前
, 51F
10/15 22:03, 51F
推
10/15 22:18,
5年前
, 52F
10/15 22:18, 52F
→
10/15 22:18,
5年前
, 53F
10/15 22:18, 53F
→
10/15 22:23,
5年前
, 54F
10/15 22:23, 54F
→
10/15 22:41,
5年前
, 55F
10/15 22:41, 55F
→
10/16 08:54,
5年前
, 56F
10/16 08:54, 56F
→
10/16 08:55,
5年前
, 57F
10/16 08:55, 57F
→
10/16 08:55,
5年前
, 58F
10/16 08:55, 58F
→
10/16 08:55,
5年前
, 59F
10/16 08:55, 59F
→
10/16 09:08,
5年前
, 60F
10/16 09:08, 60F
推
10/16 09:17,
5年前
, 61F
10/16 09:17, 61F
→
10/16 09:41,
5年前
, 62F
10/16 09:41, 62F
推
10/16 09:42,
5年前
, 63F
10/16 09:42, 63F
→
10/16 09:42,
5年前
, 64F
10/16 09:42, 64F
推
10/16 10:38,
5年前
, 65F
10/16 10:38, 65F
→
10/16 10:38,
5年前
, 66F
10/16 10:38, 66F
→
10/16 11:02,
5年前
, 67F
10/16 11:02, 67F
→
10/16 11:02,
5年前
, 68F
10/16 11:02, 68F
→
10/16 11:03,
5年前
, 69F
10/16 11:03, 69F
→
10/16 11:04,
5年前
, 70F
10/16 11:04, 70F
→
10/16 11:10,
5年前
, 71F
10/16 11:10, 71F
→
10/16 17:59,
5年前
, 72F
10/16 17:59, 72F
→
10/16 18:01,
5年前
, 73F
10/16 18:01, 73F
→
10/16 18:02,
5年前
, 74F
10/16 18:02, 74F
→
10/16 18:04,
5年前
, 75F
10/16 18:04, 75F
→
10/16 18:35,
5年前
, 76F
10/16 18:35, 76F
→
10/16 18:39,
5年前
, 77F
10/16 18:39, 77F
→
10/16 19:09,
5年前
, 78F
10/16 19:09, 78F
→
10/16 19:11,
5年前
, 79F
10/16 19:11, 79F
推
10/16 19:19,
5年前
, 80F
10/16 19:19, 80F
→
10/16 20:28,
5年前
, 81F
10/16 20:28, 81F
→
10/16 20:28,
5年前
, 82F
10/16 20:28, 82F
推
10/16 20:56,
5年前
, 83F
10/16 20:56, 83F
→
10/16 20:56,
5年前
, 84F
10/16 20:56, 84F
→
10/16 20:57,
5年前
, 85F
10/16 20:57, 85F
→
10/16 20:57,
5年前
, 86F
10/16 20:57, 86F
→
10/16 20:57,
5年前
, 87F
10/16 20:57, 87F
→
10/16 21:00,
5年前
, 88F
10/16 21:00, 88F
→
10/16 21:13,
5年前
, 89F
10/16 21:13, 89F
→
10/16 21:14,
5年前
, 90F
10/16 21:14, 90F
→
10/16 21:14,
5年前
, 91F
10/16 21:14, 91F
推
10/17 00:02,
5年前
, 92F
10/17 00:02, 92F