{"id":4568,"date":"2020-10-31T14:48:47","date_gmt":"2020-10-31T12:48:47","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=4568"},"modified":"2020-10-31T14:48:47","modified_gmt":"2020-10-31T12:48:47","slug":"oracle-jdk-vs-openjdk-und-migration-zu-azul-fuer-den-kommerziellen-betrieb","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2020\/10\/oracle-jdk-vs-openjdk-und-migration-zu-azul-fuer-den-kommerziellen-betrieb\/","title":{"rendered":"Oracle JDK vs. OpenJDK und Migration zu Azul f\u00fcr den kommerziellen Betrieb"},"content":{"rendered":"<p>Ver\u00e4nderungen in der Verf\u00fcgbarkeit des Java Development Kit seit dem Release des JDK 11 im September 2018 erschweren den sicheren Betrieb von Java-Anwendungen f\u00fcr viele Endnutzer. Die Nutzung des Oracle JDK ist im kommerziellen IT Betrieb nun nur noch mit Lizenz m\u00f6glich.<br \/>\nAzul Systems tritt an, mit der <strong>Zulu OpenJDK Laufzeitumgebung<\/strong> eine wirtschaftlich attraktive Java-Distribution mit zuverl\u00e4ssigen Updates und Bug Fixes anzubieten.<\/p>\n<p>2006 hat Sun Microsystems, zu diesem Zeitpunkt der Inhaber der Marke Java, angek\u00fcndigt das JDK in ein Open-Source Projekt zu \u00fcberf\u00fchren. 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\u00f6ffentlicht. Einige Teile des OpenJDK blieben bis April 2009 propriet\u00e4r, bis mit build 53 des OpenJDK 7 eine vollst\u00e4ndig auf Open Source basierende Distribution verf\u00fcgbar 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 \u201ecopyleft\u201c Natur der GPL sich auf die Anwendungen auswirkt die das OpenJDK als Laufzeitumgebung nutzen. Im September 2007 hat Oracle zahlreiche Ver\u00e4nderungen bei der Art und Weise wie das JDK entwickelt, verbreitet und aktualisiert wird. Diese lassen sich wie folgt zusammenfassen:<\/p>\n<ul>\n<li>Der Releasezyklus des JDK ist kalendergetrieben mit zwei Releases pro Jahr im M\u00e4rz und September.<\/li>\n<li>Oracle hat liefert nun eine zweite Bin\u00e4rdistribution des JDK aus, die ausschlie\u00dflich 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\u00fcr Oracle Binaries verwendet wird.<\/li>\n<li>Ab JDK 11 gibt es keine funktionalen Unterschiede mehr zwischen den Oracle JDK Binaries und eine reinen Open Source OpenJDK. Um dies zu erm\u00f6glichen, hat Oracle einige zuvor propriet\u00e4re Features zum OpenJDK hinzugef\u00fcgt (z.B. Mission Control und Flight Recorder). Einige andere Features, wie Web Start und JavaFX, wurden entfernt.<\/li>\n<li>Ab JDK 11 nutzt Oracle das Oracle Technology Network License Agreement (OTNLA) welches keine v\u00f6llig freie Nutzung mehr erlaubt. Unter dieser Lizenz kann das Oracle JDK frei f\u00fcr Entwicklung und Test verwendet werden, ben\u00f6tigt aber eine kommerzielle Lizenz f\u00fcr die produktive Nutzung.<\/li>\n<li>Oracle OpenJDK-Binaries werden nur maximal 6 Monate bis zum n\u00e4chsten JDK gepflegt. Longterm Support ist von Oracle nur unter einem Lizenzvertrag verf\u00fcgbar sein.<\/li>\n<li>Freie Updates f\u00fcr das JDK 8 enden im Januar 2019 mit Update 202. Anwender k\u00f6nnen 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\u00fcrfen zur produktiven Nutzung eine Lizenzvereinbarung mit Oracle.<\/li>\n<\/ul>\n<p>Das OpenJDK ist ein reines Source Code Projekt. Um es als Java Laufzeitumgebung nutzen zu k\u00f6nnen ist es n\u00f6tig, das Projekt in eine Bin\u00e4rdistribution zu kompilieren. Die von Azul erstellte Distribution tr\u00e4gt den Namen Zulu. Zulu wird, mit dem vom OpenJDK vorgegebenen Standard<br \/>\nBuild Prozess erstellt und alle Binaries mit dem Technology Compatibility Kit (TCK) validiert, um Kompatibilit\u00e4t und Konformit\u00e4t mit der Java SE-Spezifikation sicherzustellen. Um die den stabilen und sicheren Betrieb bei den Kunden zu erm\u00f6glichen werden regelm\u00e4\u00dfige Updates f\u00fcr<br \/>\ndas OpenJDK erstellt, die Bug Fixes und Security Patches enthalten. Bis zu Version 9 des JDK wurden diese Updates jeweils f\u00fcr die aktuelle Version und die vorhergehende Version bereitgestellt. Die \u00dcberlappung der Supportzeitr\u00e4ume 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 \u00f6ffentlichen und freien Support herausgefallen. Azul liefert auf weiterhin Updates f\u00fcr all diese JDK-Versionen. Dies erlaubt es den Kunden auch \u00e4ltere Java-Versionen sicher im produktiven Betrieb zu nutzen.<\/p>\n<h3>Unterschiede zwischen OpenJDK und Oracle JDK<\/h3>\n<p>Da das OpenJDK die Referenzimplementierung des Java SE-Standards darstellt, nutzen Oracle und andere es als Basis ihrer Bin\u00e4rdistributionen. Vor JDK 11 enthielt das Oracle JDK eine Reihe von<br \/>\nzus\u00e4tzlichen Features, von denen einige nun Open Source sind, andere bleiben propriet\u00e4r.<\/p>\n<ul>\n<li>Die Kryptographie-Module von Oracle JDK und OpenJDK unterst\u00fctzten 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\u00e4nkungen zur Schl\u00fcssell\u00e4nge und St\u00e4rke der Verfahren entfernt. Zuvor war die Schl\u00fcssell\u00e4nge auf 128 Bit beschr\u00e4nkt, und es war n\u00f6tig, ein erg\u00e4nzendes Modul zu installieren, um starke Kryptographie zu aktivieren. F\u00fcr Oracle JDK war dieses Module das Java Cryptographic Extensions (JCE) package, und f\u00fcr 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.<\/li>\n<li>JavaFX ist ein optionales GUI Framework, welches Oracle mit dem JDK ausgeliefert hat. Die Quellen wurden in das OpenJFX-Projekt \u00fcberf\u00fchrt. Azul unterst\u00fctzt OpenJFX im ZuluFX Bundle. Download verf\u00fcgbar unter: http:\/\/openjdk.java.net\/projects\/openjfx<\/li>\n<li>Browser-Plugin: Das Browser Applet Plugin ist mit dem Oracle JDK, aber nicht mit Zulu JDK verf\u00fcgbar.<\/li>\n<li>Applet-Support im Browser wurde mit JDK 9 deprecated und mit JDK 11 von Oracle entfernt.<\/li>\n<li>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\u00fcr Zulu 11 verf\u00fcgbar. F\u00fcr IcedTea-Web ist ein sorgf\u00e4ltiger<br \/>\nMigrationstest notwendig.<\/li>\n<li>Mission Control: Bis Oracle JDK 9 ist Mission Control ein kostenpflichtiges Add-on f\u00fcr 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\u00fctzung kompatibel.<\/li>\n<li>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\u00fctzung profitieren k\u00f6nnen.<\/li>\n<li>&#8211; 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\u00fcgbar: <a href=\"https:\/\/visualvm.github.io\/\">https:\/\/visualvm.github.io\/<\/a>.<\/li>\n<li>Java DB: Bin\u00e4rdistribution 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\u00fcgbar: <a href=\"https:\/\/db.apache.org\/derby\/\">https:\/\/db.apache.org\/derby\/<\/a>.<\/li>\n<\/ul>\n<h3>Nicht im OpenJDK enthaltene Features<\/h3>\n<ul>\n<li>Fonts: Sowohl Oracle als auch Zulu JDKs werden mit dem gleichen Satz an kommerziell lizenzierten Fonts ausgeliefert.<\/li>\n<li>SNMP: Das Oracle JDK enth\u00e4lt ein propriet\u00e4res Modul. Diese wurde mit JDK 11 aus dem Oracle JDK entfernt. Die Open Source L\u00f6sung SNMP4J\u00a0 <a href=\"http:\/\/snmp4j.com\/\">http:\/\/snmp4j.com\/<\/a> kann ggf. als Alternative dienen.<\/li>\n<li>Sound-Treiber: Nur f\u00fcr \u00e4ltere Windows Versionen ben\u00f6tigt und nicht im OpenJDK enthalten.<\/li>\n<\/ul>\n<h3>Abweichungen zwischen OpenJDK und Oracle JDK<\/h3>\n<ul>\n<li>Color Matching: Das Oracle JDK verwendet eine propriet\u00e4re L\u00f6sung. Zulu JDK nutzt die L\u00f6sung des OpenJDK, die vergleichbare, aber nicht identische Ergebnisse liefert.<\/li>\n<li>Font Rendering: Das Oracle JDK verwendet einen propriet\u00e4ren Font-Renderer (T2K). Zulu (und OpenJDK) nutzen den FreeType Open Source Renderer <a href=\"https:\/\/www.freetype.org\/\">https:\/\/www.freetype.org\/<\/a>.<\/li>\n<li>Java 2D Graphics Rasterizer: Vor JDK 9 nutzte OpenJDK den Pisces Open Source Renderer, w\u00e4hrend Oracle JDK ein propriet\u00e4res 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.<\/li>\n<\/ul>\n<h3>JDK Deployment<\/h3>\n<p>Anwender k\u00f6nnen bei der Planung des OpenJDK-Rollout folgenge Option in Betracht ziehen:<\/p>\n<ul>\n<li>Weiternutzung der bereits installierten Java-Laufzeitumgebungen, wie z. B. JDK 8, ohne Updates und Security-Patches. Dies ist die Option mit dem h\u00f6chsten betrieblichen Risiko, da im Laufe der Zeit vermehrt Sicherheitsl\u00fccken aufgedeckt werden. F\u00fcr Anwendungen die regulatorischen Anforderungen entsprechen m\u00fcssen ist dies ein erhebliches Problem.<\/li>\n<li>Migration der Anwendungen auf die neueste freie OpenJDK-Version mit Update auf die Folgeversion alle 6 Monate. Dies ist mit einem Kompatibilit\u00e4tsrisiko verbunden, da Oracle angek\u00fcndigt hat, das Kompatibilit\u00e4t nicht mehr 100% garantiert wird (bis JDK 9 war R\u00fcckw\u00e4rtskompatibilit\u00e4t stehts ein Designziel). Der Test und Migrationsaufwand kann f\u00fcr nicht aktiv weiterentwickelte Anwendungen erheblich sein.<\/li>\n<li>Weiterverwendung von Oracle JDK als kostenpflichtige Subskription. Dies eliminiert die Risiken der vorgenannten Optionen ist aber meist die teuerste L\u00f6sung. Die neue Oracle Java Subskription wird auf der Basis von \u201eOracle Processors\u201c kalkuliert. Die Ermittlung der zu lizensierenden Mengen kann komplex sein, da neben der genauen Zahl von physischen Cores ein CPU Typ spezifischer \u201eCore factor\u201c herangezogen werden muss. In virtualisierten Umgebungen (z. B. VMware) muss das gesamte vCenter lizensiert werden, da Applikationen zwischen Servern migrieren k\u00f6nnen. Ein typischer Server hat zwei Intel Xeon Hexa-core CPUs und wird als sechs \u201eOracle Processors\u201c gez\u00e4hlt. Bei Java SE-Subskriptionskosten von $25 pro Oracle Processor pro Monat sind dies $1800 pro Jahr f\u00fcr diesen Beispielserver. In Umgebungen mit \u00fcber 1000 Servern k\u00f6nnen die Kosten \u00fcber einer Million USD pro Jahr liegen.<\/li>\n<li>Support f\u00fcr 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 \u00fcber 1000 Servern zu weniger als einem Zehntel des Oracle Subskription Listenpreises kommt. F\u00fcr gr\u00f6\u00dfere Umgebungen ist daher Zulu Enterprise immer die kosteng\u00fcnstigere L\u00f6sung.<\/li>\n<\/ul>\n<h3>Migration zu Zulu Enterprise<\/h3>\n<p>Das Zulu OpenJDK wird unter der GPLv2 with CPE Lizenz ver\u00f6ffentlicht. Zulu Binaries stehen f\u00fcr Windows, Linux, Solaris und MacOS X auf <a href=\"https:\/\/www.azul.com\/downloads\/zulu-community\/\">https:\/\/www.azul.com\/downloads\/zulu-community\/<\/a> zum Download bereit. Auch Release Notes mit Installationsanleitung finden sich auf dieser Seite. Diese decken alle bereitgestellten Paketformate, Abh\u00e4ngigkeiten sowie Anleitungen f\u00fcr die Installation in g\u00e4ngigen 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.<\/p>\n<h3>Das Zulu Commercial Compatibility Kit<\/h3>\n<p>Die propriet\u00e4ren 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.<\/p>\n<p>Zum Download des Zulu CCK m\u00fcssen die Nutzungsbedingungen akzeptiert werden. Der Installer \u00fcberpr\u00fcft, ob eine passende Zulu-Version installiert ist. Beim Download ist auf die korrekte Version zu achten! Details und Download gibt es unter <a href=\"https:\/\/www.azul.com\/products\/zulu-and-zulu-enterprise\/cck-downloads\/\">https:\/\/www.azul.com\/products\/zulu-and-zulu-enterprise\/cck-downloads\/<\/a>. Dies erm\u00f6glicht in der Regel eine Migration ohne zus\u00e4tzlich betriebliche Aufw\u00e4nde.<\/p>\n<h3>Zusammenfassung<\/h3>\n<p>Zulu ist eine OpenJDK Distribution die vollumf\u00e4nglich 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 \u00e4ltere OpenJDK-Versionen vor; daher k\u00f6nnen sich Azul-Kunden der aktuellsten Security-Patches und Bug-Fixes auch auf \u00e4lteren Java-Versionen erfreuen.<\/p>\n<p>Die Zulu OpenJDK-Distribution bietet eine kosteng\u00fcnstige Alternative, um Applikationen auf aktuelle Java Versionen zu migrieren und sicher zu betreiben.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ver\u00e4nderungen in der Verf\u00fcgbarkeit des Java Development Kit seit dem Release des JDK 11 im September 2018 erschweren den sicheren Betrieb von Java-Anwendungen f\u00fcr viele Endnutzer. Die Nutzung des Oracle JDK ist im kommerziellen IT Betrieb nun nur noch mit Lizenz m\u00f6glich. Azul Systems tritt an, mit der Zulu OpenJDK Laufzeitumgebung eine wirtschaftlich attraktive Java-Distribution [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-4568","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=4568"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4568\/revisions"}],"predecessor-version":[{"id":4569,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/4568\/revisions\/4569"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=4568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=4568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=4568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}