1. 程式人生 > >Java開源還是閉源

Java開源還是閉源

今天在《Java核心技術·卷I》看到常見誤解

Java is proprietary, and it should therefore be avoided.(英文版P14)


表示很好奇為什麼會產生這種誤解於是去查了一下java的開源歷程。
先羅列一下查到的資料:

2006年11月13日,Sun Microsystems正式宣佈Java開源,並希望此舉能夠讓社群幫助進行安全分析、bug報告、增強效能、瞭解偏僻個案等。
不過,十年過去之後,對於Java開源的爭議依舊存在。批評者認為,Java並沒有像官方說的那樣完全開源,其實只開放了SDK,而Java SE和Java EE TCKs仍然是閉源的。
對於Java的開源身世,最初IBM呼籲將Java捐給Apache 軟體基金會,使用Apache許可證分發,但Sun最終決定在GPL許可證下開源Java。GPL許可證要求衍生版本需要公開分發。Gosling稱這能讓Java更好的適應開源社群。Sun在2010年被甲骨文收購,Java也落到了甲骨文手中,由甲骨文主導Java的演化。
引用自https://www.oschina.net/news/79031/is-java-opensource

從這份資料裡面我得到了以下兩點:

  1. Sun公司確實宣佈開源了,但沒有完全開源。
  2. Sun公司在GPL許可證下開源java。

於是我好奇又去查了一下GPL許可協議:

GPL許可協議(GNU General Public License):只要軟體中包含有其他GPL協議的產品或程式碼,那麼該軟體就必須也採用GPL許可協議且開源及免費。具有以下特點:


複製自由:允許將軟體複製到任何人的電腦中,並且不限制複製的數量。
傳播自由:允許以各種形式進行傳播。


收費傳播:允許在各種媒介上出售該軟體,但必需提前讓買家知道這個軟體是可以免費獲得的,並解釋收費的理由(一般來講都是能夠為使用者提供某種服務,以技術服務的形式來收費)。


修改自由:允許開發人員增加或刪除軟體的功能,但必須依然基於GPL許可協議授權。一句話,修改後必須以GPL授權開源釋出。

看上去很正規的許可協議,只有更改了java這門語言本身的程式碼的時候需要開放原始碼。於是對不開源的說法表示不理解,
於是接著針對沒有完全開源的說法找了一下Sun公司開源狀況的描述:

在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本質上就是同一套程式碼庫開發的產品。


作者:奧特曼超人Dujinyang
來源:CSDN
原文:https://blog.csdn.net/DJY1992/article/details/56666725
版權宣告:本文為博主原創文章,轉載請附上博文連結!

喔,在如上對java發展歷史的介紹中,我發現java在發行過程中分為了openjdk和sun/oracle JDK兩種。

通過膜拜大佬瞭解到這兩種JDK是獨立授權的,區別還有一點大。

引自 https://fgh2011.iteye.com/blog/1771649


關於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還是屬於開源的,只是開源的程度沒有達到百分百。

最後用一個大佬很精簡的總結作為本次深入瞭解java開源的結束。

OpenJDK原是SunMicrosystems公司為Java平臺構建的Java開發環境(JDK)的開源版本,完全自由,開放原始碼。Sun Microsystems公司在2006年的JavaOne大會上稱將對Java開放原始碼,於2009年4月15日正式釋出OpenJDK。甲骨文在 2010 年收購SunMicrosystem之後接管了這個專案。


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只發布原始碼


[引用自] (https://blog.csdn.net/lsx2017/article/details/81273548)

對於java8收費的事情。。。有點關注,怎麼說呢,還是希望Oracle能夠讓Java變得更好吧。