自由的Java实现 是用来实现Oracle Java,并在自由软件许可证下发布的软件。Sun公司在2007年5月将大部分Java的实现代码以开源协议发布,所以Oracle Java基本上是开源实现[ 1] ,但是从2019年4月16日起,Oracle Java颁布了新的许可协议[ 2] ,这将会对Oracle Java的商业使用造成影响[ 3] 。Java实现包括编译器、运行时、类库等。自由软件的倡导者们将自由的Java虚拟机称为自由Java运行时 或自由的运行时 。
一些自由软件运动的倡导者不愿意使用“Java”一词,因为它存在版权问题[ 4] 。因此,即使是“自由Java运动”,他们也避免使用“自由Java运行时”一词。
第一个提供大量Java平台功能的自由软件项目是Guavac,它在1995年11月左右开始。[ 5] [ 6] 此后,自由软件运动开发了其他Java编译器,最著名的是GNU Java编译器 。其他还包括由Eclipse 基金会维护的Eclipse Java编译器(ECJ )和不再积极维护的Jikes 。从GCC4.3开始,GCJ(GCC所附带的Java编译器)使用ECJ解析器前端来解析Java,但GCJ于不久后停止开发。[ 7]
自由的运行时的例子则包括Kaffe、SableVM和gcj。
GNU Classpath 是Java的主要自由类库。大多数自由的运行时都使用GNU Classpath作为其类库。
2005年5月,Apache Harmony宣布成立,然而,该项目选择了Apache许可证 ,而Apache许可证在当时与所有现有的自由Java实现不兼容。
2005年5月的另一个事件是OpenOffice.org 宣布OpenOffice 2.0将依赖于某些特定的Java功能,而这些功能是自由软件实现无法提供的。在争议之后,OpenOffice.org采用了一个指导方针,要求它能够与自由的Java实现相兼容。
在2006年11月之前已经与自由软件Java实现合作的著名应用程序包括OpenOffice.org和Vuze,这两个应用程序都可以使用GCJ编译。
2006年11月13日,Sun公司根據GNU General Public License 發布了其編譯器javac 。[ 8]
截至2007年9月,Sun除了釋出javac外,也將 HotSpot 和幾乎所有Java Class Library 的程式碼作為自由軟體發布。
根據他們承諾於2007年上半年基本完全基於自由和開放原始碼代碼釋出一個完全可構建的JDK ,[ 9] Sun 於2007年5月8日釋出了類庫的完整源代碼 ,除了一些有限的部分,這些部分是由Sun 從第三方獲得許可,這些第三方不希望他們的代碼在自由軟件許可下釋出。[ 10] Sun已經表示,它的目標是用替代實現來取代其餘專有和封閉源代碼的部分,並使類庫完全免費和開源。由於JDK中有一些受限代碼 ,Sun將繼續在商業發行版中使用該代碼,直到被完全功能齊全的免費和開源替代方案取代為止。
截至2008年5月,類別庫中僅有的專有部分是(在OpenJDK 7中截至2007年5月佔4%,[ 11] [ 12] 在OpenJDK 6中截至2008年5月佔不到1%[ 13] [ 14] )是SNMP 實現部分。[ 15]
自2007年5月首次發布以來,昇陽電腦 在社區的幫助下,已經釋出了幾乎所有受限制的程式碼,並提供了免費軟體(或替代的免費軟體)。
所有音頻引擎代碼,包括軟體合成器,都已作為開源碼發布。[ 15] [ 16] 專門為 OpenJDK 開發的新合成器 Gervill 取代了封閉源軟體合成器。[ 17]
所有在該類別庫中使用的密碼學 類別均已作為自由軟體發布。[ 18]
FreeType 已取代了縮放和光柵化字體的程式碼。[ 19] [ 20] [ 21]
LittleCMS 已取代原生的顏色管理系統。[ 20] 在JDK中有一個可插拔的層,因此商業版本可以使用舊的顏色管理系統,而OpenJDK可以使用LittleCMS。
在phoneME項目中使用的開放原始碼Pisces渲染器已取代抗鋸齒圖形光柵化程式碼。[ 20] [ 22] [ 23] 這段程式碼功能正常,但仍需要一些效能增強。[ 24]
JavaScript 外掛程式碼已開源(JavaScript 引擎自始至終都是開源的)。[ 25]
由於先前存在負擔的元件,無法僅使用免費軟體元件建構OpenJDK 。為了在整個類別庫變為免費之前能夠做到這一點,並且能夠在Fedora Core 和其他自由Linux 發行版中捆綁OpenJDK ,紅帽公司 已經啟動了一個名為IcedTea的專案。這基本上是一個OpenJDK/GNU Classpath 混合體,可以用於使用僅免費軟體來啟動OpenJDK。[ 26] [ 27]
截至 2008 年 3 月,Fedora 9 發行版已使用 OpenJDK 6 取代 OpenJDK 7 的 IcedTea 實作。[ 14] 這種改變的一些聲明原因包括:
昇陽電腦已經取代了IcedTea提供的大多數替代方案,現在所剩下的受限制代碼佔類庫的少於1%(這段代碼對運行OpenJDK並不必要)。
OpenJDK 6 是穩定分支,而 OpenJDK 7 不穩定,預計直到 2009 年才會發布穩定版本。
昇陽電腦已經獲得了OpenJDK商標在Fedora中使用的許可。[來源請求]
在2008年6月,宣布IcedTea 6(作為 Fedora 9 上打包的OpenJDK版本)已通過了技術相容性套件的測試,可以宣稱是完全相容的Java 6實作。[ 28] [來源請求]
在2013年9月,Azul Systems推出了Zulu,這是一個免費的、開源的OpenJDK 版本,適用於Windows Server 和Microsoft Azure 雲端。後續版本增加了對Mac OS X 、多個Linux 版本和Java平台標準版8的支援。Zulu已經通過OpenJDK社區技術兼容性套件認證,符合Java SE 8、7和6。Core[ 29]
Amazon 已發布了Amazon Corretto,這是一個無需費用的多平台、可投入生產使用的Open Java Development Kit發行版。它是在GPL v2下釋出的,並附有Classpath Exception的GPL 連結例外。Java 8 和Java 11 的長期支持版本可用。它於2019年1月31日首次公開發布。[ 30]
在 2017 年,Eclipse Foundation 推出了 AdoptOpenJDK,現在更名為 Adoptium,其主要目標是 "促進並支援用於整個 Java 生態系統的高品質運行時和相關技術"
^ OpenJDK and the IcedTea Project . www.redhat.com. [2019-12-16 ] . (原始内容 存档于2021-03-08) (韩语) .
^ Oracle Java SE License . www.oracle.com. [2020-12-29 ] . (原始内容 存档于2021-05-07) (美国英语) .
^ Oracle Java 许可重要更新 . www.java.com. [2020-12-29 ] . (原始内容 存档于2021-04-13).
^ Java Licensing Logo Guidelines (PDF) . [2020-12-29 ] . (原始内容 (pdf) 存档于2020-12-01) (美国英语) .
^ Announcing: guavac 0.2.5, A free compiler for the Java language . 1996-09-07 [2007-06-24 ] . (原始内容 存档于2009-08-14).
^ Changelog of guavac, showing the first release happening in January 1996 . [2007-06-24 ] . (原始内容 存档于2007-09-28). Wed Nov 22 05:43:07 1995 […] CompilerMain.C, Compiler. C, Compiler.h, lexer.l, parser.y: Initial revision
^ GCC 4.3 Release Series -- Changes, New Features, and Fixes . [2007-10-08 ] . (原始内容 存档于2021-04-27).
^ Sun picks GPL license for Java code . [2024-05-20 ] . (原始内容存档 于2012-11-03).
^ OpenJDK FAQ 互联网档案馆 的存檔 ,存档日期2007年4月2日,.
^ Open JDK is here! . Sun Microsystems. 2007-05-08 [2007-05-09 ] . (原始内容存档 于2012-02-07).
^ Herron, David. Plans for OpenJDK . 2007-10-04 [2007-10-09 ] . (原始内容 存档于2007-10-11).
^
Fitzsimmons, Thomas. Plans for OpenJDK . 2007-05-18 [2007-05-22 ] .
^
Angel, Lillian. OpenJDK to replace IcedTea in Fedora 9 . 2008-03-13 [2008-04-05 ] . (原始内容 存档于2008-04-18).
^ 14.0 14.1 Wade, Karsten. OpenJDK in Fedora 9! . redhatmagazine.com. 2008-03-13 [2008-04-05 ] . (原始内容 存档于2008-04-21). Thomas Fitzsimmons updated the Fedora 9 release notes source pages to reflect that Fedora 9 would ship with OpenJDK 6 instead of the IcedTea implementation of OpenJDK 7. Fedora 9 (Sulphur) is due to release in May 2008.
^ 15.0 15.1 OpenJDK 6 b10 source posted . 2008-05-30 [2008-06-01 ] . (原始内容存档 于2009-06-18).
^ audio-engine project page . [2024-05-20 ] . (原始内容存档 于2007-05-16).
^ Gervill - Software Synthesizer . [2008-06-01 ] . (原始内容 存档于2011-10-04).
^ Crypto has been added to OpenJDK . 2007-09-27 [2007-10-07 ] . (原始内容存档 于2007-12-25).
^ font-scaler projectpage . [2024-05-20 ] . (原始内容存档 于2015-06-10).
^ 20.0 20.1 20.2 Java2D project page . [2024-05-20 ] . (原始内容存档 于2007-05-16).
^ Freetype font rasteriser . 2007-08-07 [2007-11-24 ] . (原始内容存档 于2009-01-07).
^ phoneme.dev.java.net/ 互联网档案馆 的存檔 ,存档日期2007-06-10.
^ graphics-rasterizer project page . [2024-05-20 ] . (原始内容存档 于2007-05-16).
^ Graham, Jim. Open Source rasterizer . Sun Microsystems. 2007-10-03 [2007-05-09 ] . (原始内容存档 于2021-11-30).
^ Javascript is encumbered and there is no javascript plugin support. . IcedTea . 2008-03-11 [2008-06-01 ] . (原始内容 存档于2008-09-27). Changing Summary. JavaScript is no longer encumbered, but we still need liveconnect support.
^ Andrew, Haley. Experimental Build Repository at icedtea.classpath.org . 2007-06-07 [2007-06-09 ] . (原始内容 存档于2008-02-11).
^ Wielaard, Mark. Experimental Build Repository at icedtea.classpath.org . 2007-06-07 [2007-06-09 ] . (原始内容 存档于2007-06-19).
^ Sharples, Rich. Java is finally Free and Open . 2008-06-19. (原始内容 存档于2008-06-20).
^ Core . [2024-05-20 ] . (原始内容存档 于2015-09-21).
^ Arun Gupta. Amazon Corretto 8 Now Generally Available . Amazon Web Services. January 31, 2019 [2019-07-25 ] . (原始内容存档 于2024-05-20).