Gestern wurde auf Habré eine Übersetzung des Beitrags „Nicht in die Falle der Verwendung von Oracle JDK 11 geraten“ veröffentlicht, gefolgt von einer Diskussion über „Java bezahlt“, aber nicht alles ist so beängstigend, wie es auf den ersten Blick scheint - unten ist die Übersetzung der Veröffentlichung aus dem Oracle-Blog mit der offiziellen Position für Lizenzierung und Vertrieb JDK-Versionen 11+.Zusammenfassung
Ab Java 11 veröffentlicht Oracle das JDK unter der
GNU General Public License v2, mit der Classpath Exception (GPLv2 + CPE) und unter einer kommerziellen Lizenz für diejenigen, die das Oracle JDK als Teil von Oracle-Produkten oder -Diensten verwenden oder Open Source nicht verwenden möchten Software. Diese Kombination aus OS-Lizenz und kommerzieller Lizenz ersetzt die alte
BCL (Oracle Binary Code License), die aus kommerziellen und kostenlosen Nutzungsbedingungen besteht.
Für jede Lizenz werden separate Assemblys bereitgestellt. Diese Assemblys sind jedoch
funktional identisch , mit Ausnahme einiger kosmetischer Unterschiede und Unterschiede in der Art und Weise, wie Binärdateien verpackt werden, die nachstehend ausführlich beschrieben werden.
Von BCL zu GPL
Die BCL-Lizenz für Oracle Java SE wird seit über 10 Jahren zur Lizenzierung von Oracle Java SE-Technologien verwendet. Unter bestimmten Bedingungen erlaubt BCL die Verwendung ohne Lizenzgebühren. Um die weitere Arbeit zu vereinfachen, begann Oracle ab Java 9, OpenJDK-Assemblys unter der von der Linux-Plattform verwendeten Betriebssystemlizenz bereitzustellen
(der Linux-Kernel wird unter der GNU GPLv2-Lizenz vertrieben) . Wenn Sie es gewohnt sind, die Oracle Java SE-Binärdateien kostenlos zu verwenden, können Sie dies einfach mit den OpenJDK-Binärdateien fortsetzen, die auf jdk.java.net verfügbar sind. Wenn Sie es gewohnt sind, Oracle Java SE-Binärdateien als Teil der kommerziellen Produkte oder Services von Oracle zu verwenden, können Sie weiterhin Oracle JDK-Versionen über
My Oracle Support (MOS) oder anderswo erhalten.
Funktionell und austauschbar identisch ...
Das BCL-lizenzierte Oracle JDK enthielt in der Vergangenheit „kommerzielle Funktionen“, die in OpenJDK-Builds nicht verfügbar waren. Wie versprochen hat Oracle im vergangenen Jahr OpenJDK um folgende Funktionen erweitert:
Ab Java 11 und höher sind daher die Oracle JDK- und OpenJDK-Assemblys im Wesentlichen identisch.
... aber mit einigen kosmetischen und Verpackungsunterschieden
Es gibt noch eine kleine Anzahl von Unterschieden, einige absichtlich und kosmetisch, und einige erfordern nur mehr Zeit, um mit OpenJDK-Mitarbeitern zu diskutieren.
- Oracle JDK 11 zeigt eine Warnung an, wenn die
-XX:+UnlockCommercialFeatures
, während diese Option in OpenJDK zu einem Fehler führt. Diese Option war noch nie Teil von OpenJDK, daher macht es keinen Sinn, sie hinzuzufügen, da OpenJDK keine kommerziellen Funktionen enthält. Dieser Unterschied soll Benutzern von Oralce JDK 10 oder früher das Upgrade auf Oracle JDK 11 oder höher erleichtern. - Oracle JDK 11 kann so konfiguriert werden, dass Protokolldaten für die Advanced Management Console bereitgestellt werden , ein separates kommerzielles Oracle-Produkt. Wir werden mit anderen OpenJDK-Mitwirkenden an der Notwendigkeit arbeiten, solche Daten und ihre Vorteile in zukünftigen Versionen in OpenJDK bereitzustellen. Dieser Unterschied besteht hauptsächlich darin, die Erfahrungen der Oracle-Kunden zu bewahren.
- Der
javac --release
verhält sich für Java 9 und Java 10 unterschiedlich, da in diesen Versionen des Oracle JDK einige zusätzliche Komponenten enthalten sind, die nicht Teil der entsprechenden Versionen von OpenJDK 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
Diese Unterscheidung bleibt erhalten, um die Kompatibilität in einigen älteren Fällen aufrechtzuerhalten. Diese Module sind jetzt entweder separat als Teil von OpenJFX verfügbar oder in OpenJDK und im Oracle JDK vorhanden, da es sich um kommerzielle Funktionen handelt, die Oracle zu OpenJDK hinzugefügt oder aus Oracle JDK 11 (z. B. JNLP) entfernt hat. - Die Ausgabe der
java -fullversion
und java -fullversion
unterscheidet sich zwischen den Builds Oracle JDK und OpenJDK, sodass die Supportteams auftretende Probleme diagnostizieren können. Insbesondere wird beim Ausführen von java --version
mit einem Oracle JDK 11-Build Folgendes ausgegeben:
Java 11 2018-09-25
Java (TM) SE-Laufzeitumgebung 18.9 (Build 11 + 28)
Java HotSpot (TM) 64-Bit-Server-VM 18.9 (Build 11 + 28, gemischter Modus)
Und mit OpenJDK 11:
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (Build 11 + 28)
OpenJDK 64-Bit Server VM 18.9 (Build 11 + 28, gemischter Modus)
- Oracle JDK hat immer verlangt, dass kryptografische Anbieter von Drittanbietern mit einem bekannten Zertifikat signieren. Die Kryptografie in OpenJDK verfügt über eine offene Schnittstelle. Dies bedeutet, dass der verwendete Kryptoanbieter nicht eingeschränkt ist. Oracle JDK 11 erfordert weiterhin eine gültige Signatur, und OpenJDK-Assemblys ermöglichen weiterhin die Verwendung eines Kryptoanbieters eines Drittanbieters, sowohl mit gültiger als auch ohne Signatur.
- Oracle JDK 11 wird weiterhin Installationsprogramme, Branding und JREs enthalten, um die Kompatibilität mit älteren Desktopanwendungen zu gewährleisten. OpenJDK-Assemblys sind jetzt als zip- und tar.gz-Dateien verfügbar, während alternative Formate für die Verteilung in Betracht gezogen werden.
Wie nennen wir sie?
Im Idealfall können wir alle Oracle JDK-Assemblys je nach Ihrer Situation als "Oracle JDK" bezeichnen, entweder unter der GPL oder unter einer kommerziellen Lizenz. Aus historischen Gründen gibt es zwar geringfügige Unterschiede, wir werden sie jedoch separat behandeln: OpenJDK und Oracle JDK.