2012年4月2日 星期一

[Linux] JDK,JRE and open jdk,sun jdk差別

JDK跟JRE的差別:
JDK和SDK其實我們通常指的都是同一個東西, 而JDK與JRE的差別是,JDK可以拿來編譯,你所寫的Java程式, 如果你想要學Java, 就請裝JDK.如果只是要執行Java的程式, 你只要裝JRE就可以了. (JRE是JDK的子集)

JDK版本介紹:
JDK(Java Development Kit)就是Java的開發工具包,是給Java開發者使用,所以以照自己的需求來安裝套件。
Java SE=Java Standard Edition (主要用於桌面程序,控制台開發)
Java EE=Java Enterprise Edition (企業級開發)
Java ME=Java Mobile Edition (嵌入式開發)

在大多數的Linux發行版裡面,幾乎都會內建OpenJDK這套JDK.
什麼是OpenJDK?
這裡就簡述一下其歷史:
OpenJDK簡單來說就是JDK7的開放原始碼版本。
你可以從 http://openjdk.java.net/projects/jdk6/ 很清楚的看到,自從JDK7 b10以後,就產生了一個新計畫 OpenJDK ,它是一個開放原始碼計畫,以 GPL釋出。OpenJDK已經成為了JDK7的主幹開發,而Sun JDK7則是基於OpenJDK7的原始碼所發布的,其大部分原始碼都相同,只有少部份原始碼被取代掉,使用JRL(非自由軟體的開放原始碼)釋出。

那麼OpenJDK6呢?很多人都認為它就是JDK6的分支,那你就錯了,實際上JDK6還是屬於JRL釋出,且與OpenJDK6有很大的差異,OpenJDK6僅是一個OpenJDK7的分支,並且去除Java SE 7的特性,盡量使其符合Java SE 6。

以下說明Sun JDK(以後可能要叫做Oracle JDK)與OpenJDK的不同:

釋出授權條款的不同:
OpenJDK 採用GPLv2 釋出而 Sun JDK則採用 JRL釋出。兩者協議雖然都是開放原始碼的,但在使用上卻有很大的不同,其中最大的便是,GPLv2允許在商業上面使用,而JRL僅允許個人研究使用。OpenJDK並不包含Deployment(部署)功能:部署的功能包含:Browser Plugin、Java Web Start、以及Java控制面板。這些功能在OpenJDK中找不到。然而Icedtea計畫自行開發了一個Plugin與整合了 netx 這個 Java Web Start 計畫,使得OpenJDK也可以體會到部份部署的功能。

原始碼尚未完整:
OpenJDK大致上與Sun JDK原始碼相符合,然而部份原始碼因為產權問題無法開放給 OpenJDK使用,其中最主要的部份就是JMX中的可選元件SNMP部份的程式碼。因此這些不能開放的原始碼將它作成plug,以供OpenJDK編譯時使用,你也可以選擇不要使用plug。而Icedtea則為這些不完整的部份開發了相同功能的程式碼(僅有OpenJDK6),促使OpenJDK更加完整。

部份程式碼以開放原始碼專案替代:
OpenJDK由於產權問題,剝離了很多產權非Sun的程式碼。為了補足這些程式碼,因此使用了許多功能一樣的開放原始碼專案。最明顯的例子就是:字體柵格化引擎,使用FreeType替代。

只包含最精簡的JDK:
OpenJDK不包含其他軟體包,如:Rhino、Java DB(Apache Derby)、JAXP(僅提供原始碼下載網址)...... 且可以分離的軟體包也盡量的分離。然而這些計畫大多數也是自由軟體,你可以自行下載並且加入。在Icedtea裡面,也重新加入了這些軟體包,因此你使用Icedtea編譯OpenJDK時,它可能會要求你安裝或指定Rhino位置。

不能使用Java商標:
由於OpenJDK並不完整,因此不是標準的Java,也就無法使用Java商標。但是Icedtea則致力於補完OpenJDK的不完整,至今已經大致上補完了,也可通過JCK認證,因此若使用Icedtea補丁的OpenJDK,你輸入 "java -version" 就可以看到最前面顯示的是 "Java" 而不是 "OpenJDK" 。基本上,在 Sun Java 體系中,Java SE 這部份開放原始碼還不夠徹底,而 JavaFX 則是僅開放 Compiler 的原始碼(註解1),其中的理由部份是產權問題。此外,也希望Oracle能讓JCP更自由一點,讓廠商們有公平發表機會,並且開放其JCK與TCKs工具。一旦開放之後,相信Java發展將會更加迅速,每個人都有提供意見的管道,並使Java能夠更普及,甚至在動態網頁上,Java Applet能夠重回原本被 Flash取代的地位。

註解1:你會發現你沒有安裝JavaFX,卻可以執行JavaFX的程式。實際上你正要執行JavaFX程式時,網頁會提供一個JavaFX的下載地點,一旦你瀏覽到含有JavaFX的網站,就會自動去JavaFX官方網站下載JavaFX執行環境來執行。

沒有留言:

張貼留言