首頁  >  文章  >  Java  >  java是開源的麼?

java是開源的麼?

(*-*)浩
(*-*)浩原創
2019-05-31 11:26:077448瀏覽

在2006年11月13日的JavaOne大會上,Sun公司宣布最終會將Java開源,並在隨後的一年多時間內,陸續將JDK的各個部分在GPL v2(GNU General Public License v2)協議下公開了源碼,並建立了OpenJDK組織對這些源碼進行獨立管理。除了極少量的產權程式碼(Encumbered Code,這部分程式碼大多是Sun本身也無權進行開源處理的)外,OpenJDK幾乎包括了Sun JDK的全部程式碼,OpenJDK的品質主管曾經表示,在JDK 1.7中,Sun JDK和OpenJDK除了程式碼檔案頭的版權註解之外,程式碼基本上完全一樣,所以OpenJDK 7與Sun JDK 1.7本質上就是同一套程式碼庫開發的產品。

java是開源的麼?

2006年11月13日,Sun Microsystems正式開源Java。事實上Java的源代碼在發布第一天就可以訪問,這一策略幫助Java在早年推動了平台的建立。

Java之父James Gosling稱,他們公開原始碼的意圖是讓社群幫助進行安全分析、bug報告、增強效能、了解偏僻個案等。 Java最早使用的許可證允許內部使用原始碼但不能分發。

IBM當時呼籲將Java捐給Apache軟體基金會,使用Apache授權分發,但Sun最後決定在GPL授權下開源Java。 GPL授權要求衍生版本需要公開分發。 Gosling稱這能讓Java更好的適應開源社群。 Sun在2010年被甲骨文收購,Java也落到了甲骨文手中,由甲骨文主導Java的演化。

JDK 1.6發布以後,由於程式碼複雜性的增加、JDK開源、開發JavaFX、經濟危機及Sun收購案等原因,Sun在JDK發展以外的事情上耗費了很多資源,JDK的更新沒有再維持兩年發布一個主版本的發展速度。 JDK 1.6到目前為止一共發布了37個Update版本,最新的版本為Java SE 6 Update 37,於2012年10月16日發布。

OpenJDK原是SunMicrosystems公司為Java平台所建構的Java開發環境(JDK)的開源版本,完全自由,開放原始碼。 Sun Microsystems公司在2006年的JavaOne大會上表示將對Java開放原始碼,並於2009年4月15日正式發表OpenJDK。甲骨文在 2010 年收SunMicrosystem後接手了這個計畫。

java在發行過程中分為了openjdk和sun/oracle JDK兩種。

關於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社群所希望的。

到這裡,基本上明白了java為什麼會有開源還是閉源的爭執,也知道了誤解的原因。我個人覺得java還是屬於開源的,只是開源的程度沒有達到百分之百。

Oracle/Sun JDK裡麵包含的JVM是HotSpotVM,HotSpot VM只有非常非常少量的功能沒有在OpenJDK裡,那部分在Oracle內部的程式碼庫裡。這些私有部分都不涉及JVM的核心功能。所以說,Oracle/Sun JDK與OpenJDK其實使用的是同一個程式碼庫。

從一個Oracle內部員工的角度來看,當他要建立OracleJDK時,他同樣需要先從http://hg.openjdk.java.net簽出OpenJDK,然後從Oracle內部的程式碼庫簽出私有的部分,放在OpenJDK程式碼下的一個特定目錄裡,然後建置。

值得注意的是,Oracle JDK只發布二進位安裝包,而OpenJDK只發布原始碼

以上是java是開源的麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn