Laut dem Oracle-Blog Oracle JDK Releases for Java 11 and Later
Ab Java 11 wird Oracle JDK-Versionen unter der Open-Source- GNU General Public License v2 mit Ausnahmeregelung für die Klassendatei (GPLv2+CPE) und unter einer kommerziellen Lizenz für diejenigen bereitstellen, die das Oracle JDK als Teil eines Oracle-Produkts oder -Dienstes verwenden oder die keine Open-Source-Software verwenden möchten. Diese Kombination aus Open-Source-Lizenz und kommerzieller Lizenz ersetzt die historische " BCL "-Lizenz, die eine Kombination aus kostenlosen und kostenpflichtigen kommerziellen Bedingungen enthielt.
Es werden verschiedene Builds für jede Lizenz bereitgestellt, aber diese Builds sind funktional identisch, abgesehen von einigen kosmetischen und Verpackungsunterschieden, die unten im Detail beschrieben werden.
Vom BCL zur GPL
Die Binär-Code-Lizenz für Oracle Java SE-Technologien ("BCL") war über ein Jahrzehnt lang die primäre Lizenz für Oracle Java SE-Technologien. Die BCL erlaubt die Nutzung unter bestimmten Bedingungen ohne Lizenzgebühren. Um die Dinge zukünftig zu vereinfachen, begann Oracle damit, Open-Source-lizenzierte OpenJDK-Builds seit Java 9 bereitzustellen, wobei dasselbe Lizenzmodell wie für die Linux-Plattform verwendet wird. Wenn Sie es gewohnt sind, Oracle Java SE-Binärdateien kostenlos zu erhalten, können Sie dies einfach mit den bei Oracle erhältlichen OpenJDK-Builds unter jdk.java.net fortsetzen. Wenn Sie es gewohnt sind, Oracle Java SE-Binärdateien als Teil eines kommerziellen Produkts oder Dienstes von Oracle zu erhalten, können Sie weiterhin Oracle JDK-Versionen über My Oracle Support (MOS) und anderen Standorten beziehen.
Funktional identisch und austauschbar...
Oracles BCL-lizenziertes JDK enthielt historisch gesehen "kommerzielle Funktionen", die nicht in OpenJDK-Builds verfügbar waren. Wie versprochen hat Oracle jedoch im letzten Jahr diese Funktionen der OpenJDK-Community zur Verfügung gestellt, darunter:
Ab Java 11 weisen Oracle JDK-Builds und OpenJDK-Builds daher eine grundsätzliche Identität auf.
...mit einigen kosmetischen und Verpackungsunterschieden
Es gibt immer noch einige wenige Unterschiede, einige davon absichtlich und kosmetischer Natur, und einige einfach, weil eine längere Diskussion mit OpenJDK-Mitarbeitern erforderlich ist.
- Oracle JDK 11 gibt eine Warnung aus, wenn die Option -XX:+UnlockCommercialFeatures verwendet wird, während in OpenJDK-Builds diese Option zu einem Fehler führt. Diese Option war nie Bestandteil von OpenJDK und es würde keinen Sinn machen, sie jetzt hinzuzufügen, da keine kommerziellen Funktionen in OpenJDK enthalten sind. Dieser Unterschied bleibt bestehen, um es Benutzern von Oracle JDK 10 und früheren Versionen zu erleichtern, auf Oracle JDK 11 und später zu migrieren.
- Oracle JDK 11 kann so konfiguriert werden, dass Nutzungsdaten an das " Advanced Management Console " Tool weitergeleitet werden, das ein separates kommerzielles Oracle-Produkt ist. Wir werden mit anderen OpenJDK-Mitarbeitern zusammenarbeiten, um zu erörtern, wie solche Nutzungsdaten in zukünftigen OpenJDK-Versionen nützlich sein können. Dieser Unterschied besteht hauptsächlich, um ein konsistentes Erlebnis für Oracle-Kunden zu bieten, bis solche Entscheidungen getroffen sind.
- Das javac --release-Kommando verhält sich für die Java 9- und Java 10-Ziele anders, da in diesen Versionen das Oracle JDK einige zusätzliche Module enthielt, die in den entsprechenden OpenJDK-Versionen nicht enthalten waren:
- javafx.base
- javafx.controls
- javafx.fxml
- javafx.graphics
- javafx.media
- javafx.web
- java.jnlp
- jdk.jfr
- jdk.management.cmm
- jdk.management.jfr
- jdk.management.resource
- jdk.packager.services
- jdk.snmp
Dieser Unterschied bleibt bestehen, um ein konsistentes Erlebnis für bestimmte Arten von Legacy-Anwendungen zu bieten. Diese Module sind entweder jetzt separat als Teil von OpenJFX verfügbar, sind jetzt sowohl in OpenJDK als auch im Oracle JDK enthalten, da es sich um kommerzielle Funktionen handelte, die Oracle an OpenJDK beigetragen hat (z. B. Flight Recorder), oder wurden aus dem Oracle JDK 11 entfernt (z. B. JNLP).
- Die Ausgabe der Befehle java --version und java -fullversion wird in Oracle JDK-Builds von OpenJDK-Builds unterscheiden, damit Support-Teams etwaige vorhandene Probleme diagnostizieren können. Insbesondere führt die Ausführung von java --version mit einem Oracle JDK 11-Build zu:
java 11 2018-09-25
Java(TM) SE-Runtime-Umgebung 18.9 (Build 11+28)
Java HotSpot(TM) 64-Bit-Server-VM 18.9 (Build 11+28, gemischter Modus)
Und für einen OpenJDK 11-Build:
openjdk version "11" 2018-09-25
OpenJDK-Runtime-Umgebung 18.9 (Build 11+28)
OpenJDK 64-Bit-Server-VM 18.9 (Build 11+28, gemischter Modus)
- Das Oracle JDK hat schon immer verlangt, dass kryptografische Anbieter von Drittanbietern von einem bekannten Zertifikat signiert werden. Das Kryptografie-Framework in OpenJDK verfügt über eine offene kryptografische Schnittstelle, was bedeutet, dass nicht festgelegt ist, welche Anbieter verwendet werden können. Oracle JDK 11 wird weiterhin eine gültige Signatur erfordern, und Oracle OpenJDK-Builds werden auch weiterhin die Verwendung eines gültigen Signature oder eines nicht signierten kryptografischen Drittanbieters erlauben.
- Oracle JDK 11 wird Installationsprogramme, Branding und JRE-Verpackungen für eine konsistente Erfahrung mit Desktop-Anwendungen enthalten. Oracle OpenJDK-Builds sind derzeit als Zip- und Tar-GZ-Dateien verfügbar, während alternative Vertriebsformate in Betracht gezogen werden.