1. 程式人生 > >轉:OpenJDK和SunJDK的區別和聯絡

轉:OpenJDK和SunJDK的區別和聯絡

使用過LINUX的人都應該知道,在大多數LINUX發行版本里,內建或者通過軟體源安裝JDK的話,都是安裝的OpenJDK,那麼到底什麼是OpenJDK,它與SUN JDK有什麼關係和區別呢?


歷史上的原因是,OpenJDK是JDK的開放原始碼版本,以GPL(General Public License)協議的形式放出(題主提到的open就是指的開源)。在JDK7的時候,OpenJDK已經作為JDK7的主幹開發,SUN JDK7是在OpenJDK7的基礎上釋出的,其大部分原始碼都相同,只有少部分原始碼被替換掉。使用JRL(JavaResearch License,Java研究授權協議)釋出。至於OpenJDK6則更是有其複雜的一面,首先是OpenJDK6是JDK7的一個分支,並且儘量去除Java SE7的新特性,使其儘量的符合Java6的標準。關於JDK和OpenJDK的區別,可以歸納為以下幾點:

授權協議的不同:

OpenJDK採用GPL V2協議放出,而SUN 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代替。



OpenIDK只包含最精簡的JDK:OpenJDK不包含其他的軟體包,比如Rhino Java DB JAXP……,並且可以分離的軟體包也都是儘量的分離,但是這大多數都是自由軟體,你可以自己下載加入。

不能使用Java商標:這個很容易理解,在安裝OpenJDK的機器上,輸入“java-version”顯示的是OpenJDK,但是如果是使用Icedtea補丁的OpenJDK,顯示的是java。



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

轉自:http://www.zhihu.com/question/19646618