OpenJDK和OracleJDK的區別
在2006年11月13日的JavaOne大會上,Sun公司(當時還沒被收購)宣布計劃要把Java開源,在隨後的一年多時間內,它陸續地將JDK的各個部分在GPL v2(GNU General Public License v2)協議下公開了源碼,並建立了OpenJDK組織對這些源碼進行獨立管理。除了極少量的產權程式碼(Encumbered Code,這部分程式碼所有權不屬於Sun公司,Sun本身也無權進行開源處理)外,OpenJDK幾乎擁有了當時SunJDK 的全部程式碼。
OpenJDK的品質主管曾經表示在JDK 7中,SunJDK和OpenJDK除了程式碼文件頭的版權注釋之外,程式碼幾乎是完全一樣的,所以OpenJDK 7與SunJDK 7本質上就是同一套程式碼庫出來的產品。
總結下來,OpenJDK和OracleJDK存在以下方面的區別:
授權協議不同
OpenJDK 採用GPL V2協議放出,而OracleJDK則採用JRL放出。兩者協議雖然都是開放源程式碼的,但是在使用上的不同在於GPL V2允許在商業上使用,而JRL只允許個人研究使用。
OpenJDK不包含OracleJDK中的部分產權程式碼
由於OracleJDK中的部分程式碼的產權也不是歸Oracle所有的,所以這部分程式碼就沒開源到OpenJDK中。但是很多「好心」的開源愛好者在OpenJDK中實現了相同的功能,並將源程式碼開源到OpenJDK中。比如說字體柵格化引擎,使用Free Type代替。
不能使用Java商標
在Sun被Oracle收購以後,Java這個商標就歸Oracle所有了。不僅OpenJDK不能使用java商標,J2EE這個曾經Sun的親兒子命運也同樣坎坷,已經被Oracle無情拋棄,同樣
不能在使用Java商標。
但是隨著JDK版本的不斷發布,Oracle失去了維護OpenJDK的耐心,因為不賺錢啊。RedHat從Oracle手上接過OpenJDK的管理權利和維護職責。
2019年3月20日,JDK 12發布,只包含8個JEP,其中主要有Switch表達式、Java微測試套件(JMH)等新功能,最引人注目的特性無疑是加入了由RedHat領導開發的Shen-andoah垃圾收集器。Shenandoah作為首個由非Oracle開發的垃圾收集器,其目標又與Oracle在JDK 11中發布的ZGC幾乎完全一致,兩者天生就存在競爭。Oracle馬上用實際行動抵制了這個新收集器,在JDK 11發布時才說應儘可能保證OracleJDK和OpenJDK的兼容一致,轉眼就在OracleJDK 12里把Shenandoah的程式碼通過條件編譯強行剔除掉,使其成為歷史上唯一進入了OpenJDK發布清單,但在OracleJDK中無法使用的功能。
所以對於高版本的OpenJDK和OracleJDK之間,也存在OpenJDK中有的功能,但是OracleJDK中不包含的。
總的來說,對於普通開發,使用OpenJDK和OracleJDK並沒有太大差別,兩者的差別更體現在商業考量上面。
一些問題
具體有哪些功能是OracleJDK中有,但是OpenJDK中不包含的。歡迎開發經驗豐富的大神評論留言。