Wie funktioniert die Wartung von OpenJDK in der Praxis?

9

Insbesondere möchte ich den Unterschied zwischen Oracle JDK und OpenJDK in Bezug auf Fehlerkorrekturen und andere Patches verstehen.

Welcher Zweig erhält zuerst Korrekturen und hat Oracle die Gewohnheit, Patches zu erstellen, die es nie zu OpenJDK schaffen?

Muton
quelle

Antworten:

6

Dies wird auf der OpenJDK-Seite ausführlich erläutert: Fragen und Antworten zu JDK 7 Update Project Proposal

Wird dieses Projekt als Grundlage für Oracle JDK 7 Update-Versionen dienen?

Ja.

Um aus Joe Darcys FOSDEM- Blogbeitrag auf OpenJDK 6 zu zitieren :

Insbesondere wird es nicht die gleiche Zweiteilung zwischen der OpenJDK 7-Codebasis und der 7-Update-Codebasis geben wie zwischen OpenJDK 6 und dem 6-Update-Zug ...

Nach meiner Lektüre bedeutet oben im Wesentlichen, dass Patches und Updates normalerweise zuerst an Open JDK gesendet und dann mit möglichst geringer Verzögerung in Oracle JDK bereitgestellt werden.

Bei Sicherheitspatches scheint das Bild umgekehrt zu sein, dh ich würde eher erwarten, dass sie zuerst zu Oracle-Versionen und dann (wieder mit möglichst geringer Verzögerung) zu OpenJDK gehen:

Erhält das 7 Update Project Sicherheitskorrekturen von Oracle?

Ja.

Wie bei OpenJDK 6 werden Sicherheitsupdates zunächst vertraulich behandelt und auf eine private Gesamtstruktur angewendet, bevor sie im Rahmen der allgemeinen synchronisierten Veröffentlichung des Fixes für betroffene JDK-Release-Züge in die öffentliche Gesamtstruktur verschoben werden. Darüber hinaus werden sie den Überprüfungs- und Genehmigungsprozess für den öffentlichen Code nicht durchlaufen, und ihre entsprechenden Probleme im Issue-Tracker des Projekts werden nicht öffentlich sichtbar sein.

Wann erhält dieses Projekt Sicherheitsupdates von Oracle?

Der Zeitplan für Oracle Java SE Critical Patch-Updates ist öffentlich verfügbar .

Sicherheitskorrekturen für den Quellcode dieses Projekts werden im JDK 7 Update Project ungefähr zur gleichen Zeit verfügbar gemacht, zu der sie in Produkten von Oracle veröffentlicht werden ...


Um die Gründe besser zu verstehen, warum anscheinend so viel Aufwand betrieben wird, um Oracle und Open JDKs synchron zu halten, ist es sinnvoll, einen Blick auf die Oracle-Entscheidung zum vorherigen Projekt zu werfen: Umstellung auf OpenJDK als offizielle Java SE 7-Referenzimplementierung :

... Oracle und die anderen Mitglieder der Java SE 7-Expertengruppe haben der Java SE 7-Spezifikation ( JSR 336 ) den letzten Schliff gegeben . In seiner Rolle als Spezifikationsleiter ist Oracle für die Bereitstellung der Java SE 7-Referenzimplementierung verantwortlich. Wir werden eine Referenzimplementierung bereitstellen, die vollständig auf dem OpenJDK-Open-Source-Code basiert und unter der GPL-Open-Source-Lizenz verfügbar macht .

Die Rolle der Referenzimplementierung (RI) soll als Goldstandard für alle Java-Implementierungen verwendet werden. Um eine Implementierung als Java SE-kompatibel zertifizieren zu lassen, muss ein Implementierer eine große Anzahl von Kompatibilitätstests bestehen - das Technology Compatibility Kit (TCK). Darüber hinaus können Implementierungen als zusätzliche Kompatibilitätsprüfung mit dem RI verglichen werden. Wenn Ihre Implementierung für das gleiche Verhalten wie die RI zertifiziert wurde, ist sie grundsätzlich Java-kompatibel. Weitere Informationen zu diesem Thema finden Sie in den JCP-FAQ .

In der Vergangenheit hat Sun das Sun JDK immer als RI verwendet und es unter der Binary Code License (BCL) verfügbar gemacht. Dies war für Sun sehr praktisch, da die Produktimplementierung per Definition kompatibel war. Es war jedoch auch verwirrend, da das Sun JDK einige Funktionen enthielt, die nicht Teil des Standards waren, wie beispielsweise das Java-Plugin. Die Fortsetzung dieser Praxis würde es Open-Source-Implementierern ebenfalls schwer machen, da sie den offiziellen RI-Quellcode nicht studieren und bewerten könnten. (Der Quellcode für das Oracle JDK unterscheidet sich geringfügig von OpenJDK - etwas, das wir in Zukunft ansprechen werden).

In diesem Sinne wird Oracle:

  • Erstellen Sie RI-Binärdateien nur basierend auf der OpenJDK-Codebasis.
  • Stellen Sie RI-Binärdateien unter der BCL (der normalen Java-Lizenz) für kommerzielle Implementierer und GPLv2 (mit der Ausnahme Classpath) für Open Source-Implementierer zur Verfügung.
  • Stellen Sie das TCK weiterhin kommerziellen Lizenznehmern zur Verfügung, aktualisieren Sie jedoch auch die OCTLA- Lizenz so, dass sie Java SE 7 abdeckt. Letzteres ermöglicht Open Source-Implementierern den kostenlosen Zugriff auf das TCK, um ihre Implementierungen zu überprüfen ...

Die obige Entscheidung bedeutet viel Aufwand, um Open JDK-Code einzufügen, offiziell verifizierten, getesteten, lizenzierten und konformen Code freizugeben. Wenn Sie hinzufügen, dass es nach dem vereinbarten öffentlichen Zeitplan veröffentlicht werden muss, wird deutlich, dass ein solcher Aufwand in etwa dem entspricht, der zuvor in "traditionellen" Sun / Oracle Java-Versionen verwendet wurde.

Dies macht es nur sinnvoll, die Open- und Oracle JDK-Codebasen so eng wie möglich zu halten. Andernfalls kann eine doppelte Entwicklung und Korrekturen, um beide Projekte mit TCK kompatibel zu machen, unerschwinglich werden.

Es sieht so aus, als ob die Entscheidung, Open JDK als Referenzimplementierung zu verwenden, es im besten Interesse von Oracle gemacht hat, das JDK so nah wie möglich an Open JDK zu halten - bis zur Veröffentlichung von JDK 7.

Um zu verstehen, was Oracle dazu motivieren könnte, die erwähnte Synchronisierung mit JDK 7-Update-Versionen weiter aufrechtzuerhalten, sollten Sie sich das Open JDK 8- Projekt ansehen , dessen Zweck dem von Open JDK 7 ziemlich ähnlich beschrieben wird:

Ziel dieses Projekts ist es, eine Open-Source-Referenzimplementierung der Java SE 8-Plattform zu erstellen, die von JSR 337 im Java Community Process definiert wird .

Aus den gleichen Gründen, die oben in Bezug auf die Referenzimplementierung von JDK 7 erläutert wurden, liegt es wiederum im besten Interesse von Oracle, die Aktualisierungen beider JDKs so weit wie möglich synchron zu halten.

Je mehr Unterschiede zwischen diesen JDKs bestehen, desto schwieriger wird es für Oracle, Java SE 8 zu veröffentlichen, da die Anstrengungen, die erforderlich sind, um die eigene Version mit TCK in Einklang zu bringen, doppelt so hoch sind. Das Gegenteil ist auch der Fall, dh je näher beide Projekte jetzt kommen, desto weniger Aufwand ist erforderlich, um beide Java 8-Implementierungen freizugeben.


Ist es Ihnen jemals passiert, zwei leicht unterschiedliche Versionen derselben Software parallel zu unterstützen, die sich an unterschiedliche Kunden richten? Wenn ja, erinnern Sie sich wahrscheinlich an den Wunsch, beide so nah wie möglich zu halten, und an die Unannehmlichkeiten, die Sie hatten, als diese nicht synchron waren. Mit Open- und Oracle-JDKs ist das ziemlich ähnlich, nur in größerem Maßstab.

Mücke
quelle
Erhält das JDK 7-Update-Projekt nach März 2015 Patches von Oracle, dh nach dem Ende der kostenlosen Updates für Java 7 von Oracle?
Monica wieder herstellen - M. Schröder
@ MartinSchröder schwer zu sagen, ohne die Gedanken von Oracle zu lesen. Dies hängt wahrscheinlich stark davon ab, ob Java 8 bis dahin die offizielle / unterstützte Version sein wird
Mücke
4

Fast alle Fehlerkorrekturen werden direkt über das OpenJDK-Projekt und dann an nachgeschaltete JVM-Anbieter (Oracle, Azul, RedHat usw.) gesendet.

Eine Ausnahme besteht darin, dass einige Sicherheitspatches in nachgeschalteten Versionen (insbesondere Oracle) behoben werden, bevor sie stillschweigend zurück in OpenJDK portiert werden. Auf diese Weise können die Anbieter den größten Teil der Welt mit dem Sicherheitsupdate aktualisieren, bevor die Sicherheitsanfälligkeit im Open Source-Projekt veröffentlicht wird.

Einige Anbieter entscheiden sich auch dafür, ihre Änderungen nicht in OpenJDK zurückzuschieben. Beispielsweise haben sowohl Google als auch Twitter OpenJDK-Versionen geändert, die sie intern mit Fehlerkorrekturen und Funktionen verwenden, die nicht wieder in das OpenJDK-Hauptprojekt aufgenommen wurden.

HTH

Martijn Verburg
quelle