1. 程式人生 > >OpenJDK與JDK的區別分析

OpenJDK與JDK的區別分析

gpl 不同 java linu value targe 輸入 java db arc

一、以下是具體分析:

以下內容轉自http://fgh2011.iteye.com/blog/1771649:

使用過LINUX的人都應該知道,在大多數LINUX發行版本裏,內置或者通過軟件源安裝JDK的話,都是安裝的OpenJDK,那麽到底什麽是OpenJDK,它與Sun 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部份的代碼。因此這些不能開放的源代碼將它作成plugin,以供OpenJDK編譯時使用,你也可以選擇不要使用plugin。而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社區所希望的。

以下內容引用知乎的內容https://www.zhihu.com/question/19646618/answer/40621705對上面的回答進行補充:

Sun JDK能用於商業用途的license是SCSL(Sun Community Source License)。JRL(Java Research License)是2004年開始用的,伴隨Sun JDK6發布而開始使用,遠比JDK7早。

從代碼完整性來說:

Sun JDK > SCSL > JRL > OpenJDK

Sun JDK有少量代碼是完全不開發的,即便在SCSL版裏也沒有。但這種代碼非常非常少。

SCSL代碼比JRL多一些closed目錄裏的內容。

JRL比OpenJDK多一些受license影響而無法以GPLv2開放的內容。

但從Oracle JDK7/OpenJDK7開始,閉源和開源版的實質差異實在是非常非常小。與其說OpenJDK7是“不完整的JDK”,還不如說Oracle JDK7在OpenJDK7的基礎上帶了一些value-add,其中很多還沒啥用(例如browser plugin)。

二、個人分析理解:

JDK有兩種叫法,早期叫做Sun JDK,現在是Oracle JDK,其實都是同一個東西。但這種說法也不一定準確,因為OpenJDK也叫做Oracle OpenJDK。

然而最簡單直白的理解,也屬於個人理解:OpenJDK是JDK的開源代碼,也不算全是,因為在JDK部分,有一些是Oracle未開放源代碼的,還有就是有一些的歷史原因。

三、參考:

(OpenJDK官網)http://openjdk.java.net/

(針對OpenJDK官方詳細解釋)http://openjdk.java.net/faq/

(OpenJDK官方源代碼庫)http://hg.openjdk.java.net/

(針對官方源代碼的GitHub克隆)https://github.com/dmlloyd/openjdk

https://stackoverflow.com/questions/11547458/what-is-the-difference-between-jvm-jdk-jre-openjdk

OpenJDK與JDK的區別分析