Il y a quelques mois, Oracle a annoncé un changement radical dans le cycle de release de Java. Il y aura dorénavant une release majeure tous les 6 mois, une mineure tous les 2 mois et une LTS (Long Time Support) tous les 3 ans. Ceci constitue un changement de cap important qui risque d’avoir de nombreux impacts dans l’industrie.
Avant de poursuivre, revenons au début. Java est un langage de programmation orienté objet multi-plateformes. Java est une sorte d’API open source qui peut être implémentée par n’importe qui. La seule contrainte est qu’une implémentation doit être validée (TCK).
Il existe différentes versions de la JVM (Java Virtual Machine) dont voici quelques exemples :
- Oracle et OpenJDK sont les plus connues
- RedHat
- Zulu / Zing (Azul)
- Corretto (Amazon)
Java a été lancé en 1995 par Sun. En 2006, Sun publie le code en open source et on voit alors apparaître une première alternative, OpenJDK. En 2009, Sun est racheté par Oracle. Quelques années plus tard, en 2017, Oracle annonce un changement du cycle de release. Au même moment, Java 9 est disponible et Java 8 devient une version LTS. Six mois plus tard, Java 10 est disponible et Java 9 n’est plus maintenue. Encore six mois de plus et Java 11 est disponible et devient à son tour une version LTS.
A partir de Janvier 2019, toute nouvelle mise à jour de Java 8 et de Java 11 sera payante. Cela implique de souscrire un contrat auprès d’Oracle. Le montant public indiqué n’est que purement informatif. Les commerciaux analysent la société cliente dans son ensemble et transmettent une proposition personnalisée qui sera forcément moins chère que celle annoncée sur le site.
Chaque version non LTS a le droit à 2 mises à jour, une tous les 2 mois avant la version majeure suivante.
Ce changement de philosophie de la part d’Oracle a été motivé par plusieurs points. Le retard d’un an pris sur Java 8 avec les lambda et les problèmes de sécurité. De même, Java 9 a subi un an de retard dû, entre autres, au désaccord lié à l’intégration des modules. Oracle souhaite aussi rendre l’écosystème plus attractif et compétitif. Le cycle de release raccourci permet également d’intégrer plus rapidement les nouvelles fonctionnalités (mot clé var dans Java 10 par exemple). On peut aussi imaginer qu’Oracle a souhaité modifier son business model pour dégager un surplus de cash avec les versions LTS.
En parallèle, Oracle a décidé de supprimer les veilles fonctionnalités (dégraissage du mammouth) et veut réduire le Java à son essentiel. JavaEE a rejoint la fondation Eclipse et devient Jakarta EE. Java FX est devenu un projet open source.
Il ne reste que deux possibilités aux utilisateurs de Java, soit migrer vers une version plus récente, soit ne rien faire. Attention, dans le cas de la migration, il faut prendre en compte l’intégration des modules et la suppression de certaines classes.
Migrer vers une version plus récente apporte beaucoup d’avantages mais aussi un inconvénient majeur.
Commençons par les avantages :
- Bénéficier des améliorations de la JVM (GC G1), Jshell, var…
- Le support de HTTP 2 en natif pour ceux qui font du web
- Utiliser les mises à jour des dernières librairies
- Faciliter le recrutement en attirant des talents avides des dernières technologies
L’inconvénient majeur est la migration en module et tout ce que cela implique. Cette dernière n’est pas des plus faciles. L’outil jdeps a été mis à disposition afin d’essayer de nous faciliter la vie.
Si vous êtes décidés à migrer, se pose la question du choix de la JVM, gratuite ou payante. Pour rappel, en version gratuite, il existe l’OpenJDK distribué par Oracle et Corretto d’Amazon (encore en beta et basé sur l’OpenJDK). En version payante, il existe Oracle et Zulu basé sur l’OpenJDK.
En théorie, la version fournie par Oracle (LTS) sera plus stable, avec de meilleures performances. Les patchs de sécurités seront backportés et il y aura forcément moins de release technique. Il faut compter une release majeure tous les 3 ans au plus tôt.
A contrario, l’utilisation de l’OpenJDK impose certaines contraintes. Il y a une release tous les 2 mois et chaque version comporte moins de fonctionnalités que la version LTS d’Oracle. Elle est potentiellement moins stable. En revanche, elle possède l’avantage de bénéficier de toutes les dernières nouveautés.
Concernant Corretto, Amazon va proposer une version gratuite et LTS, basée sur l’OpenJDK. Pour l’instant, cette version est en bêta et est basée sur Java 8 avec une livraison prévue début 2019 et un support jusqu’en 2023. La version Java 11 est prévue pour mi 2019.
Nous sommes actuellement à un tournant de Java. La question de savoir s’il faut faire ou non la migration vers une nouvelle version majeure n’est pas la seule question à se poser. Se pose également celle de la pertinence de Java car la migration vers Java 9 est difficile et coûteuse en temps. Si vous décidez de conserver Java, vous devez alors trancher entre LTS et gratuite. Si vous avez une base de jeux de tests (intégration / unitaire) importante, alors une version gratuite peut avoir du sens car le coût de mise à jour devient plus faible. En revanche, si vous disposez de peu de tests, une version LTS paraît plus appropriée. Le choix entre Zulu, Corretto et Oracle va dépendre de votre contexte. Sachez aussi que les frameworks tel que Spring, EhCache ou Hazelcast vont passer directement à Java 11 ce qui signifie qu’à priori, ils optent pour l’option LTS.
Vos commentaires
merci, pour les infos tres claires.
Bonjour,
Je rajoute une distribution est AoptOpenJDK, cette dernière permet de l’OpenJDK soutenu par Oracle mais offre en plus des LTS gratuites.
Un certains nombres d’entreprises se dirigent sur cette solution.
Merci très bon article !