Veränderungen in der Verfügbarkeit des Java Development Kit seit dem Release des JDK 11 im September 2018 erschweren den sicheren Betrieb von Java-Anwendungen für viele Endnutzer. Die Nutzung des Oracle JDK ist im kommerziellen IT Betrieb nun nur noch mit Lizenz möglich.
Azul Systems tritt an, mit der Zulu OpenJDK Laufzeitumgebung eine wirtschaftlich attraktive Java-Distribution mit zuverlässigen Updates und Bug Fixes anzubieten.
2006 hat Sun Microsystems, zu diesem Zeitpunkt der Inhaber der Marke Java, angekündigt das JDK in ein Open-Source Projekt zu überführen. Zu diesem Zweck wurde das OpenJDK Projekt in Leben gerufen, das ein Zuhause auf http://openjdk.java.net fand. Beginnend mit dem JVM Source Code wurden bis Anfang 2007 auch die Kernbibliotheken veröffentlicht. Einige Teile des OpenJDK blieben bis April 2009 proprietär, bis mit build 53 des OpenJDK 7 eine vollständig auf Open Source basierende Distribution verfügbar war. Seit Java 7 SE ist das OpenJDK die Referenzimplementierung des Java SE-Standards, der durch die entsprechenden Java Specification Requests (JSR) festgelegt wird. Ein Projekt mit dem Ziel einer Open Source Umsetzung von Java SE 6 wurde ebenfalls gestartet, geleitet von Andrew Brygin von Azul Systems. Das OpenJDK steht unter der GNU Public License (GPL) version 2 with classpath exception (CPE). Die Lizenzierung unter der CPE verhindert das die „copyleft“ Natur der GPL sich auf die Anwendungen auswirkt die das OpenJDK als Laufzeitumgebung nutzen. Im September 2007 hat Oracle zahlreiche Veränderungen bei der Art und Weise wie das JDK entwickelt, verbreitet und aktualisiert wird. Diese lassen sich wie folgt zusammenfassen:
- Der Releasezyklus des JDK ist kalendergetrieben mit zwei Releases pro Jahr im März und September.
- Oracle hat liefert nun eine zweite Binärdistribution des JDK aus, die ausschließlich auf OpenJDK Source Code basiert. Diese wird unter der GPLv2 with classpath exception license verbreitet, die weniger restriktiv als die Oracle Binary Code License (BCL) for Java SE ist, welche für Oracle Binaries verwendet wird.
- Ab JDK 11 gibt es keine funktionalen Unterschiede mehr zwischen den Oracle JDK Binaries und eine reinen Open Source OpenJDK. Um dies zu ermöglichen, hat Oracle einige zuvor proprietäre Features zum OpenJDK hinzugefügt (z.B. Mission Control und Flight Recorder). Einige andere Features, wie Web Start und JavaFX, wurden entfernt.
- Ab JDK 11 nutzt Oracle das Oracle Technology Network License Agreement (OTNLA) welches keine völlig freie Nutzung mehr erlaubt. Unter dieser Lizenz kann das Oracle JDK frei für Entwicklung und Test verwendet werden, benötigt aber eine kommerzielle Lizenz für die produktive Nutzung.
- Oracle OpenJDK-Binaries werden nur maximal 6 Monate bis zum nächsten JDK gepflegt. Longterm Support ist von Oracle nur unter einem Lizenzvertrag verfügbar sein.
- Freie Updates für das JDK 8 enden im Januar 2019 mit Update 202. Anwender können dies Version frei weiter nutzen, da sie noch unter der Oracle BCL steht. Ab April 2019 stehen die Updates auf java.oracle.com unter der OTNLA und bedürfen zur produktiven Nutzung eine Lizenzvereinbarung mit Oracle.
Das OpenJDK ist ein reines Source Code Projekt. Um es als Java Laufzeitumgebung nutzen zu können ist es nötig, das Projekt in eine Binärdistribution zu kompilieren. Die von Azul erstellte Distribution trägt den Namen Zulu. Zulu wird, mit dem vom OpenJDK vorgegebenen Standard
Build Prozess erstellt und alle Binaries mit dem Technology Compatibility Kit (TCK) validiert, um Kompatibilität und Konformität mit der Java SE-Spezifikation sicherzustellen. Um die den stabilen und sicheren Betrieb bei den Kunden zu ermöglichen werden regelmäßige Updates für
das OpenJDK erstellt, die Bug Fixes und Security Patches enthalten. Bis zu Version 9 des JDK wurden diese Updates jeweils für die aktuelle Version und die vorhergehende Version bereitgestellt. Die Überlappung der Supportzeiträume seit JDK 6 betrug zwischen 13 und 37 Monate. Unter der neuen Release Policy sind jedoch bereits OpenJDK 6, 7, 8 und 11 aus dem öffentlichen und freien Support herausgefallen. Azul liefert auf weiterhin Updates für all diese JDK-Versionen. Dies erlaubt es den Kunden auch ältere Java-Versionen sicher im produktiven Betrieb zu nutzen.
Unterschiede zwischen OpenJDK und Oracle JDK
Da das OpenJDK die Referenzimplementierung des Java SE-Standards darstellt, nutzen Oracle und andere es als Basis ihrer Binärdistributionen. Vor JDK 11 enthielt das Oracle JDK eine Reihe von
zusätzlichen Features, von denen einige nun Open Source sind, andere bleiben proprietär.
- Die Kryptographie-Module von Oracle JDK und OpenJDK unterstützten die gleichen kryptographischen Funktionen auf der Basis des gleichen Source-Codes. Ab Januar 2018 (JDK 8 Update 161) haben alle OpenJDK-basierten Distributionen (Zulu und Oracle) Einschränkungen zur Schlüssellänge und Stärke der Verfahren entfernt. Zuvor war die Schlüssellänge auf 128 Bit beschränkt, und es war nötig, ein ergänzendes Modul zu installieren, um starke Kryptographie zu aktivieren. Für Oracle JDK war dieses Module das Java Cryptographic Extensions (JCE) package, und für Zulu, das Cryptographic Extension Kit (CEK). Zulu und Oracle JDK folgen im Allgemeinen der gleichen Kryptographie-Roadmap. Details siehe Link https://www.java.com/en/jre-jdk-cryptoroadmap.html.
- JavaFX ist ein optionales GUI Framework, welches Oracle mit dem JDK ausgeliefert hat. Die Quellen wurden in das OpenJFX-Projekt überführt. Azul unterstützt OpenJFX im ZuluFX Bundle. Download verfügbar unter: http://openjdk.java.net/projects/openjfx
- Browser-Plugin: Das Browser Applet Plugin ist mit dem Oracle JDK, aber nicht mit Zulu JDK verfügbar.
- Applet-Support im Browser wurde mit JDK 9 deprecated und mit JDK 11 von Oracle entfernt.
- Java Web Start: Im Oracle JDK enthalten, aber nicht im Zulu JDK. Azul bietet mit IcedTea-Web eine Open Source Alternative. Java WebStart wurde wie Applets mit JDK deprecated und in JDK 11 entfernt. IcedTea-Web ist auch für Zulu 11 verfügbar. Für IcedTea-Web ist ein sorgfältiger
Migrationstest notwendig. - Mission Control: Bis Oracle JDK 9 ist Mission Control ein kostenpflichtiges Add-on für den produktiven Betrieb. Mission Control ist seit JDK 10 Open Source und Teil des OpenJDK. Azul stellt Mission Control als separates Paket bereit. Es ist mit jeder JVM mit Flight Recorder Unterstützung kompatibel.
- Flight Recorder: Wie Mission Control war der Flight Recorder bis JDK 10 kostenpflichtig, ab JDK 11 Open Source. Azul hat einen Backport auf Zulu 8 erstellt, so dass Azul-Kunden ab Zulu 8 (update 202) von Mission Control Unterstützung profitieren können.
- – VisualVM: Bis JDK 8 Teil des Oracle JDK, aber nicht Teil von Zulu. VisualVM wurde ab JDK 9 entfernt , ist aber weiterhin als separates Open-Source-Projekt verfügbar: https://visualvm.github.io/.
- Java DB: Binärdistribution der Apache Derby Datenbank, die im Oracle JDK bis JDK 8 enthalten war, aber nicht mit Zulu ausgeliefert wurde. Ab JDK 9 entfernt, aber weiterhin als Open Source Projekt verfügbar: https://db.apache.org/derby/.
Nicht im OpenJDK enthaltene Features
- Fonts: Sowohl Oracle als auch Zulu JDKs werden mit dem gleichen Satz an kommerziell lizenzierten Fonts ausgeliefert.
- SNMP: Das Oracle JDK enthält ein proprietäres Modul. Diese wurde mit JDK 11 aus dem Oracle JDK entfernt. Die Open Source Lösung SNMP4J http://snmp4j.com/ kann ggf. als Alternative dienen.
- Sound-Treiber: Nur für ältere Windows Versionen benötigt und nicht im OpenJDK enthalten.
Abweichungen zwischen OpenJDK und Oracle JDK
- Color Matching: Das Oracle JDK verwendet eine proprietäre Lösung. Zulu JDK nutzt die Lösung des OpenJDK, die vergleichbare, aber nicht identische Ergebnisse liefert.
- Font Rendering: Das Oracle JDK verwendet einen proprietären Font-Renderer (T2K). Zulu (und OpenJDK) nutzen den FreeType Open Source Renderer https://www.freetype.org/.
- Java 2D Graphics Rasterizer: Vor JDK 9 nutzte OpenJDK den Pisces Open Source Renderer, während Oracle JDK ein proprietäres Modul, Ductus, verwendete. Ab JDK 9 wurde Pisces durch den Marlin Renderer ersetzt, dessen Performance mit Ductus vergleichbar ist. Zulu JDK nutzt Marlin seit JDK 8.
JDK Deployment
Anwender können bei der Planung des OpenJDK-Rollout folgenge Option in Betracht ziehen:
- Weiternutzung der bereits installierten Java-Laufzeitumgebungen, wie z. B. JDK 8, ohne Updates und Security-Patches. Dies ist die Option mit dem höchsten betrieblichen Risiko, da im Laufe der Zeit vermehrt Sicherheitslücken aufgedeckt werden. Für Anwendungen die regulatorischen Anforderungen entsprechen müssen ist dies ein erhebliches Problem.
- Migration der Anwendungen auf die neueste freie OpenJDK-Version mit Update auf die Folgeversion alle 6 Monate. Dies ist mit einem Kompatibilitätsrisiko verbunden, da Oracle angekündigt hat, das Kompatibilität nicht mehr 100% garantiert wird (bis JDK 9 war Rückwärtskompatibilität stehts ein Designziel). Der Test und Migrationsaufwand kann für nicht aktiv weiterentwickelte Anwendungen erheblich sein.
- Weiterverwendung von Oracle JDK als kostenpflichtige Subskription. Dies eliminiert die Risiken der vorgenannten Optionen ist aber meist die teuerste Lösung. Die neue Oracle Java Subskription wird auf der Basis von „Oracle Processors“ kalkuliert. Die Ermittlung der zu lizensierenden Mengen kann komplex sein, da neben der genauen Zahl von physischen Cores ein CPU Typ spezifischer „Core factor“ herangezogen werden muss. In virtualisierten Umgebungen (z. B. VMware) muss das gesamte vCenter lizensiert werden, da Applikationen zwischen Servern migrieren können. Ein typischer Server hat zwei Intel Xeon Hexa-core CPUs und wird als sechs „Oracle Processors“ gezählt. Bei Java SE-Subskriptionskosten von $25 pro Oracle Processor pro Monat sind dies $1800 pro Jahr für diesen Beispielserver. In Umgebungen mit über 1000 Servern können die Kosten über einer Million USD pro Jahr liegen.
- Support für eine alternativen OpenJDK Variante mit niedrigeren Gesamtkosten. Azul kann mit der Zulu Enterprise Distribution eine attraktives Angebot machen, da nur die Zahl der physischen Server in Betracht gezogen werden, und es bei über 1000 Servern zu weniger als einem Zehntel des Oracle Subskription Listenpreises kommt. Für größere Umgebungen ist daher Zulu Enterprise immer die kostengünstigere Lösung.
Migration zu Zulu Enterprise
Das Zulu OpenJDK wird unter der GPLv2 with CPE Lizenz veröffentlicht. Zulu Binaries stehen für Windows, Linux, Solaris und MacOS X auf https://www.azul.com/downloads/zulu-community/ zum Download bereit. Auch Release Notes mit Installationsanleitung finden sich auf dieser Seite. Diese decken alle bereitgestellten Paketformate, Abhängigkeiten sowie Anleitungen für die Installation in gängigen Cloud Umgebungen wie Microsoft Azure und Amazon Web Services bereit. Enthalten sind auch Post-Installationsschritte und eine Anleitung wie die Standard Java Runtime auf einem Server/Desktop aus festgelegt werden kann.
Das Zulu Commercial Compatibility Kit
Die proprietären Lucida Font aus dem Oracle JDK sind nicht Teil des Standard OpenJDK. Falls erforderlich stellt das Zulu Commercial Compatibility Kit (CCK)diese Fonts bereit, um in GUIs und PDF Generatoren ein identisches Layout und Schriftbild zu erhalten.
Zum Download des Zulu CCK müssen die Nutzungsbedingungen akzeptiert werden. Der Installer überprüft, ob eine passende Zulu-Version installiert ist. Beim Download ist auf die korrekte Version zu achten! Details und Download gibt es unter https://www.azul.com/products/zulu-and-zulu-enterprise/cck-downloads/. Dies ermöglicht in der Regel eine Migration ohne zusätzlich betriebliche Aufwände.
Zusammenfassung
Zulu ist eine OpenJDK Distribution die vollumfänglich der Java SE-Spezifikation entspricht. Jede Anwendung, die auf Standard Java-Komponenten und APIs setzt, kann durch einen einfachen Austausch des JDK Pfads migriert werden. Ein engagiertes Entwicklerteam nimmt komplexe Anpassungen, wie Backporting und Integration von Updates in ältere OpenJDK-Versionen vor; daher können sich Azul-Kunden der aktuellsten Security-Patches und Bug-Fixes auch auf älteren Java-Versionen erfreuen.
Die Zulu OpenJDK-Distribution bietet eine kostengünstige Alternative, um Applikationen auf aktuelle Java Versionen zu migrieren und sicher zu betreiben.