Avec les changements apportés à la distribution et au support d’Oracle JDK, il y a eu une incertitude sur les droits d’utilisation d’Oracle JDK et sur l’avenir de Java en général. Faisons le point sur ces évolutions et sur l’alternative que représente OpenJDK, implémentation gratuite et open source de la plate-forme Java SE.

Cet article est le premier d’une série de trois sur le thème des JDK et de leur implémentation. Il est paru initialement dans l’édition spéciale été 2021 du magazine Programmez.com.

Oracle et sa nouvelle politique

Les récents changements apportés à la distribution et au support du JDK (Java Development Kit) d’Oracle sont intervenus en peu de temps, créant une véritable confusion. Cette confusion a commencé à cause de deux événements :

  • Changement radical du cycle de releases de Java,
  • Changement du modèle de support pour Java, rendant les mises à jour payantes pour les anciennes versions. 

Ce qui constitue un changement de cap important qui risque d’avoir de nombreux impacts dans le développement et le run des applications dans les SI (Systèmes d’Information) des entreprises.

Nous listons un bref résumé des changements apportés par Oracle :

  • Oracle distribue désormais deux builds du JDK :
    • Oracle OpenJDK : open source, il est maintenu et développé par Oracle, mais permet aux communautés et autres entreprises de participer à ce développement, comme Red Hat, Azul Systems, IBM ou Apple,
    • Oracle JDK : se base sur l’OpenJDK, mais n’est pas open source. Il est bien meilleur en termes de réactivité et de performances JVM.
  • Depuis janvier 2019, Oracle JDK est gratuit pour le développement et les tests, mais payant pour toute utilisation en production.
  • OpenJDK d’Oracle est gratuit pour tous les environnements, mais les mises à jour sont payantes dès l’apparition d’une nouvelle release majeure. Cela implique la souscription à un contrat de support auprès d’Oracle, qui analysera l’utilisation par l’entreprise cliente dans son ensemble e transmet une proposition personnalisée.
  • Oracle et la communauté OpenJDK passent à un modèle de version LTS plus une nouvelle classe « Feature » Releases.
  • Les versions LTS sont programmées tous les 3 ans. Leur portée est comparable à celle des précédentes versions majeures du JDK. Le JDK 11, lancé en septembre 2018, est la plus récente version LTS de Java. Figure 1
1-image-article-jdk
Figure 1 : Cycle de vie d’OracleJDK
source : magazine programmez hors série 4

 

Cette nouvelle cadence de publication de Java SE présente plusieurs défis et lacunes :

  • À partir du JDK 11, les mises à jour publiques du JDK d’Oracle se terminent en même temps ou très peu de temps après la GA (General Availability) d’une nouvelle version. Par exemple, Oracle a proposé des mises à jour publiques du JDK 11 jusqu’en janvier 2019. Les mises à jour publiques pour le JDK 8 ont également pris fin en janvier 2019.
  • Comme le JDK 11 mettra du temps à être opérationnel, cette « Support Cliff » présente des défis majeurs et des risques de stabilité, obligeant les utilisateurs de mises à jour publiques à choisir entre une version immature et une version présentant des vulnérabilités de sécurité connues (La prochaine LTS est la 17 prévue pour 09/2021).
  • Les versions fréquentes des fonctionnalités permettent d’accéder à de nouvelles capacités du JDK/JVM bien avant la prochaine LTS, mais leur « support Cliff » sans chevauchement les rend problématiques pour une utilisation en production, car il n’y a pas de transition en douceur d’une version stable et mise à jour à la suivante.

L’OpenJDK, une alternative à l’OracleJDK

OpenJDK est une implémentation gratuite et open source de la plate-forme Java SE. Il a été initialement publié en 2007 comme le résultat du développement que Sun Microsystems a commencé en 2006. Elle est devenue une implémentation de référence officielle de Java Standard Edition depuis la version SE 7. Initialement, il était basé uniquement sur le JDK 7. Mais, depuis Java 10, l’implémentation de référence open source de la plate-forme JavaSE est sous la responsabilité du JDK Project.

OpenJDK a plusieurs significations et peut se référer aussi à :

  • Un dépôt de code sources Java, alias projet OpenJDK,
  • Une spécification,
  • Un produit et une distribution fournie et maintenue par Oracle,
  • Une distribution fournie maintenue par la communauté OpenJDK.
2-image-article-jdk
Figure 2 : Cycle de vie d’OracleJDK et OpenJDK
source : magazine programmez hors série 4

 

Les deux produits (OpenJDK et Oracle JDK) sont des implémentations de la même spécification Java passant le TCK (Java Technology Certification Kit). Elles ne sont pas forcements identiques, ci-dessous les principales différences :

Calendrier de publication :

L’OpenJDK aura une version tous les 6 mois, qui est uniquement prise en charge jusqu’à la prochaine version de la fonctionnalité. C’est essentiellement un flux continu de versions destinées aux développeurs. Alors que le JDK d’Oracle cible davantage un public d’entreprise qui privilégie la stabilité. Il est basé sur l’une des versions d’OpenJDK, mais bénéficie d’un support à long terme (LTS). Oracle JDK propose des versions tous les 3 ans. Figure 2

Licences :

Oracle JDK est sous licence Oracle Binary Code License Agreement, tandis qu’OpenJDK est sous licence GNU GPL version 2 avec une exception de liaison. 

L’utilisation de la plate-forme d’Oracle a des conséquences sur les licences. À partir de la Java 8, les mises à jour publiques publiées après janvier 2019 ne seront pas disponibles pour une utilisation professionnelle, commerciale ou de production sans une licence commerciale, comme Oracle l’a annoncé. Cependant, OpenJDK est entièrement open source et peut être utilisé librement.

Performances :

En ce qui concerne les performances, celles d’Oracle sont bien meilleures en termes de réactivité et de performances de la JVM. Il met davantage l’accent sur la stabilité en raison de l’importance qu’il accorde à ses clients professionnels.

Fonctionnalités :

Si nous comparons les fonctionnalités et les options, nous voyons que le produit Oracle possède les fonctionnalités Flight Recorder, Java Mission Control et Application Class- Data Sharing, tandis qu’OpenJDK possède la fonctionnalité Font Renderer. En outre, Oracle dispose de plus d’options de Garbage Collection et de meilleurs moteurs de rendus.

À partir de JDK 11, d’autres différences s’ajoutent à la liste :

  • Chaque licence aura des builds différents, mais ceux-ci seront fonctionnellement identiques avec seulement quelques différences cosmétiques et de packaging.
  • Fonctionnellement identiques et interchangeables, des fonctions traditionnellement « commerciales » telles que Flight Recorder, Java Mission Control et Application Class-Data Sharing, ainsi que le Z Garbage Collector, sont désormais disponibles dans OpenJDK. Par conséquent, les builds d’Oracle JDK et d’OpenJDK sont essentiellement identiques à partir de Java 11.
  • Oracle JDK offre une configuration pour fournir les données du journal d’utilisation à l’outil « Advanced Management Console ».
  • Oracle a toujours exigé que les fournisseurs cryptographiques tiers soient signés par un certificat connu, alors que le cadre cryptographique d’OpenJDK possède une interface cryptographique ouverte, ce qui signifie qu’il n’y a aucune restriction quant aux fournisseurs pouvant être utilisés. Que se passe-t-il à partir de JDK 11 ? C’est le passage de l’état d’esprit d’un fournisseur unique (Oracle) à l’état d’esprit où vous pouvez sélectionner le fournisseur qui vous offre une distribution, dans les conditions qui vous conviennent le mieux : les plates-formes pour lesquelles ils réalisent la compilation d’OpenJDK, la fréquence et la rapidité des versions, la façon dont le support est structuré, etc. Si aucun des fournisseurs ne répond à vos attentes, vous pouvez même construire votre propre distribution d’OpenJDK.