Ceci est expliqué en détail sur la page OpenJDK: JDK 7 Update Project Proposition Q & A
Ce projet servira-t-il de base aux versions de mise à jour d'Oracle JDK 7?
Oui.
Pour citer un article du blog FOSDEM de Joe Darcy sur OpenJDK 6 :
En particulier, il n'y aura pas la même dichotomie entre la base de code OpenJDK 7 et la base de code de mise à jour 7 comme il y a entre OpenJDK 6 et le train de mise à jour 6 ...
D'après ma lecture, ci-dessus signifie essentiellement que les correctifs et les mises à jour iront généralement d'abord à Open JDK puis, avec le plus petit délai possible, livrés dans Oracle JDK.
Pour les correctifs de sécurité, l'image semble être opposée, c'est-à-dire que je préférerais qu'ils passent d'abord aux versions d'Oracle puis (encore une fois, avec le plus petit délai possible) à OpenJDK:
Le projet de mise à jour 7 recevra-t-il des correctifs de sécurité d'Oracle?
Oui.
Comme avec OpenJDK 6, les correctifs de sécurité sont d'abord gardés confidentiels et appliqués à une forêt privée avant d'être poussés vers la forêt publique dans le cadre de la publication synchronisée générale du correctif vers les trains de versions JDK concernés. De plus, ils ne passeront pas par le processus de révision du code public et d'approbation du report, et leurs problèmes correspondants dans l'outil de suivi des problèmes du projet ne seront pas publiquement visibles.
Quand ce projet recevra-t-il des correctifs de sécurité d'Oracle?
Le calendrier des mises à jour des correctifs critiques d'Oracle Java SE est accessible au public .
Les correctifs de sécurité pour le code source de ce projet seront disponibles dans le projet de mise à jour JDK 7 à peu près au moment où ils sont publiés dans les produits d'Oracle ...
Pour mieux comprendre les raisons pour lesquelles il semble y avoir tant d'efforts pour maintenir la synchronisation d'Oracle et d'Open JDK, il est logique de jeter un coup d'œil à la décision d'Oracle sur le projet précédent: Passer à OpenJDK en tant qu'implémentation de référence Java SE 7 officielle :
... Oracle et les autres membres du groupe d'experts Java SE 7 ont mis la touche finale à la spécification Java SE 7 ( JSR 336 ). Dans son rôle de responsable des spécifications, Oracle est responsable de la livraison de l'implémentation de référence Java SE 7 ... nous allons fournir une implémentation de référence entièrement basée sur le code open source OpenJDK et la rendre disponible sous la licence open source GPL .
Le rôle de l'implémentation de référence (RI) doit être utilisé comme référence pour toutes les implémentations Java. Pour qu'une implémentation soit certifiée compatible Java SE, un implémenteur doit réussir un grand nombre de tests de compatibilité - le Kit de compatibilité technologique (TCK). De plus, les implémentations peuvent être comparées au RI comme vérification supplémentaire de compatibilité. Fondamentalement, si votre implémentation a été certifiée pour avoir le même comportement que le RI, elle est compatible Java. Pour plus d'informations sur ce sujet, consultez la FAQ JCP .
Historiquement, Sun a toujours utilisé le Sun JDK comme RI et l'a rendu disponible sous la licence de code binaire (BCL). C'était très pratique pour Sun car cela signifiait que la mise en œuvre de son produit était compatible par définition. Cependant, c'était aussi déroutant puisque le Sun JDK contenait pas mal de fonctionnalités qui ne faisaient pas partie de la norme, comme le plugin Java. De plus, la poursuite de cette pratique rendrait les choses difficiles pour les implémenteurs open source car ils ne seraient pas en mesure d'étudier et d'évaluer le code source RI officiel. (Le code source d'Oracle JDK est légèrement différent d'OpenJDK - quelque chose que nous aborderons à l'avenir).
Dans cette optique, Oracle:
- Créez des binaires RI basés uniquement sur la base de code OpenJDK.
- Rendre les binaires RI disponibles sous BCL (la licence Java normale) pour les implémenteurs commerciaux et GPLv2 (avec l'exception Classpath) pour les implémenteurs open-source.
- Continuer à fournir le TCK aux licenciés commerciaux, mais aussi mettre à jour la licence OCTLA afin qu'elle couvre Java SE 7. Ce dernier permet aux implémenteurs open source d'accéder gratuitement au TCK pour vérifier leurs implémentations ...
La décision ci-dessus signifie beaucoup d'efforts à mettre dans le code Open JDK, pour publier du code officiellement vérifié, testé, sous licence et conforme. Si vous ajoutez qu'il doit être publié conformément au calendrier public convenu, il devient évident qu'un tel effort sera à peu près le même que celui qui avait été précédemment mis dans les versions Java «traditionnelles» de Sun / Oracle.
Il est donc tout à fait raisonnable de garder les bases de code Open et Oracle JDK aussi proches que possible: sinon, la duplication du développement et des correctifs pour rendre les deux projets conformes à TCK pourrait devenir intimidante.
Il semble que la décision d'utiliser Open JDK en tant qu'implémentation de référence ait fait dans le meilleur intérêt d'Oracle de garder leur JDK aussi proche que possible en synchronisation avec Open JDK - jusqu'à la sortie de JDK 7.
Pour comprendre ce qui pourrait motiver Oracle à poursuivre la synchronisation mentionnée, avec les versions de mise à jour JDK 7, il serait préférable de jeter un coup d'œil au projet Open JDK 8 , dont le but est décrit à peu près de la même manière que Open JDK 7:
L'objectif de ce projet est de produire une implémentation de référence open source de la plate-forme Java SE 8, à définir par JSR 337 dans le processus de communauté Java .
Pour le même raisonnement que celui expliqué ci-dessus concernant l'implémentation de référence du JDK 7, il est, encore une fois, dans le meilleur intérêt d'Oracle de garder les mises à jour des deux JDK aussi synchronisées que possible.
Plus il y aurait de différences entre ces JDK maintenant, plus il serait difficile pour Oracle de publier Java SE 8, en raison de la duplication des efforts nécessaires pour mettre leur propre version en conformité avec TCK. L'inverse est également vrai, c'est-à-dire que plus les deux projets seront proches, moins d'efforts seront nécessaires pour publier les deux implémentations de Java 8.
Vous est-il déjà arrivé de prendre en charge en parallèle deux versions légèrement différentes du même logiciel, destinées à des clients différents? Si oui, vous vous souvenez probablement du désir de les garder aussi proches que possible et des inconvénients que vous avez rencontrés lorsqu'ils n'étaient pas synchronisés. Avec les JDK Open et Oracle, c'est à peu près comme ça, mais à plus grande échelle.
Presque toutes les corrections de bogues passent directement par le projet OpenJDK puis par les fournisseurs JVM en aval (Oracle, Azul, RedHat, etc.).
Une exception est que certains correctifs de sécurité sont corrigés dans les versions en aval (en particulier Oracle) avant d'être portés discrètement dans OpenJDK. Cela permet aux fournisseurs de mettre à niveau la plupart du monde avec le correctif de sécurité avant de publier la vulnérabilité dans le projet open source.
Certains fournisseurs choisissent également de ne pas repousser leurs modifications dans OpenJDK. Par exemple, Google et Twitter ont modifié les versions d'OpenJDK qu'ils utilisent en interne avec des corrections de bogues et des fonctionnalités qui ne sont pas revenues dans le projet OpenJDK principal.
HTH
la source