OpenJDK和JDK區別


今天在CentOS7中安裝JDK的時候,在網上看了一些教程,教程里面都說要先刪除CentOS自帶了OpenJDK,我就很好奇,為什么一定要刪除呢?究竟什么是OpenJDK?有什么作用呢?和正式的JDK有什么不同呢?

在網上百度了“OpenJDK有什么作用”,苦苦搜索無果。我想難倒沒有人和我有相同的疑問嗎?嘗試了許多次之后,當再次在百度的搜索框里面輸入的時候,只輸入“OpenJDK”,通過下面的聯想功能搜索“OpenJDK和JDK區別”,終於,終於看到一篇《OpenJDK和JDK區別》,文章給我一種眼前一亮的感覺,欣喜之情溢於言表。真可謂是“眾里尋他千百度,驀然回首,那人卻在燈火闌珊處”。看完文章我也豁然開朗,哦~原來如此。


歷史上的原因是,openjdk是jdk的開放原始碼版本,以GPL協議的形式放出。在JDK7的時候,openjdk已經成為jdk7的主干開發,sun jdk7是在openjdk7的基礎上發布的,其大部分原始碼都相同,只有少部分原始碼被替換掉。使用JRL(JavaResearch License,Java研究授權協議)發布。

至於openjdk6則更是有其復雜的一面,首先是openjdk6是jdk7的一個分支,並且盡量去除Java SE7的新特性,使其盡量的符合Java6的標准。

關於JDK和OpenJDK的區別,可以歸納為以下幾點:

  • 授權協議的不同

openjdk采用GPL V2協議放出,而JDK則采用JRL放出。兩者協議雖然都是開放源代碼的,但是在使用上的不同在於GPL V2允許在商業上使用,而JRL只允許個人研究使用。

  • OpenJDK不包含Deployment(部署)功能

部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,這些功能在Openjdk中是找不到的。

  • OpenJDK源代碼不完整

這個很容易想到,在采用GPL協議的Openjdk中,sun jdk的一部分源代碼因為產權的問題無法開放openjdk使用,其中最主要的部份就是JMX中的可選元件SNMP部份的代碼。因此這些不能開放的源代碼將它作成plug,以供OpenJDK編譯時使用,你也可以選擇不要使用plug。而Icedtea則為這些不完整的部分開發了相同功能的源代碼(OpenJDK6),促使OpenJDK更加完整。

  • 部分源代碼用開源代碼替換

由於產權的問題,很多產權不是SUN的源代碼被替換成一些功能相同的開源代碼,比如說字體柵格化引擎,使用Free Type代替。

  • openjdk只包含最精簡的JDK

OpenJDK不包含其他的軟件包,比如Rhino Java DB JAXP……,並且可以分離的軟件包也都是盡量的分離,但是這大多數都是自由軟件,你可以自己下載加入。

  • 不能使用Java商標

這個很容易理解,在安裝openjdk的機器上,輸入“java -version”顯示的是openjdk,但是如果是使用Icedtea補丁的openjdk,顯示的是java。(未驗證)

總之,在Java體系中,還是有很多不自由的成分,源代碼的開發不夠徹底,希望Oracle能夠讓JCP更自由開放一些,這也是所有Java社區所希望的。

文章轉載自:OpenJDK和JDK區別,感謝作者。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM