Jeudi 6 juillet 2023
Les versions de Java, quelles évolutions au fil du temps ?
Java est l’un des langages les plus utilisés dans la communauté de développeurs (je ne considèrerai pas ici de version antérieure à Java 8, car quasiment plus utilisées aujourd’hui). Depuis la version 9, Java a de nouvelles fonctionnalités tous les 6 mois. Il devient désormais difficile de distinguer les différences. Néanmoins, on voit certaines versions sortir du lot avec un usage plus prononcé que d’autres.
I. Quelles versions de Java sont les plus utilisées en entreprise et pourquoi ?
À l’heure où j’écris cet article, nous attendons avec impatience la sortie de la version 18. Cependant, dans beaucoup d’entreprises, sont encore utilisées des versions antérieures, jusque Java 8 pour encore une grande partie. De par mon expérience et les entretiens que j’ai passé avec plusieurs entreprises, les stacks techniques mentionnent le plus souvent Java 8 et 11.
Pourquoi ces versions en particulier ?
Un sondage a été effectué en 2019 sur Twitter (peu avant la sortie de Java 12), dont les résultats ont été présentés et interprétés dans cet article https://www.developpez.net/forums/d1952429/java/general-java/version-java-utilisez/.
Mais je soupçonne que les proportions aient légèrement changé aujourd’hui, avec notamment une plus grande utilisation de Java 11. Pour essayer de comprendre, voyons un comparatif des évolutions du JDK apportées depuis la version 8 (je ne mentionne pas les fonctionnalités en statut Incubator, Experimental ou Preview sauf explicitement indiqué). Pour une meilleure visibilité, le tableau ne mentionne que les versions les plus utilisées.
Java 8 est encore utilisé aujourd’hui par nombre d’entreprises sur des projets ayant un certain temps et ne pouvant ou ne voulant pas investir des ressources pour entamer une montée de version. Java 11 est la version stable suivante, qui bénéficie aujourd’hui d’un certain recul d’utilisation par la communauté. Java 14 se trouve 3 versions après Java 11, et vient apporter son lot d’améliorations, même n’étant pas LTS.
II. Quels avantages et inconvénients à utiliser une version plus ancienne ou plus récente ?
Plus une version de java a été fournie depuis longtemps, plus les ressources disponibles sur le web seront nombreuses et auront des chances de couvrir un maximum de cas. De plus, avec le recul d’utilisation de la communauté, les versions auront éprouvé leur stabilité dans le temps (avec peut-être d’éventuels correctifs).
D’un autre côté, les versions plus récentes portent de nouvelles fonctionnalités et améliorations qui rendent le développement plus efficace. De plus, la couverture du LTS dure plus longtemps par rapport à aujourd’hui mais elles peuvent manquer de recul pour une utilisation en entreprise qui ne peut se permettre aucun risque.
Améliorations de la JVM et du langage, support de HTTP 2 en natif pour ceux qui font du web : mises à jour des dernières librairies et facilitation du recrutement en attirant des talents avides des dernières technologies.
III. Que choisir pour commencer un projet aujourd’hui ?
Disons-le clairement, le meilleur choix aujourd’hui se situe entre Java 11 et Java 17. De manière générale, il semble le plus sensé de s’appuyer sur les versions LTS (Long Term Support) : l’avantage du LTS est que les mises à jour d’Oracle concernent seulement des améliorations de stabilité, de sécurité et de performance — pas de nouvelles features. Ce qui réduit le risque qu’un correctif vienne causer des problèmes avec des outils ou librairies, et garantit une stabilité sur une longue période (support de Java 8 jusqu’au moins 2030, Java 11 jusque 2026, Java 17 jusqu’au moins 2029).
Bien que des versions plus récentes et avec des fonctionnalités prometteuses continuent de sortir, on peut considérer que la dernière version bénéficiant du LTS d’Oracle, Java 17, manque encore de maturité pour que toutes les entreprises soient prêtes à l’adopter. Une montée de version serait également moins coûteuse à partir de Java 11 plutôt que de Java 8 (Java 9 introduit des changements majeurs).
Reste ensuite à choisir la distribution (cf. le changement de plan de souscription d’Oracle). 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. Vous pouvez vous diriger aussi vers la distribution AdoptOpenJDK. Cette dernière permet de l’OpenJDK soutenu par Oracle mais offre en plus des LTS gratuites.
En conclusion
Cet article n’est certainement pas exhaustif sur les raisons de l’utilisation de Java en entreprise, mais aura le mérite d’apporter un premier élément de réponse à la question. Peut-être serait-il intéressant de pouvoir s’appuyer sur des mesures statistiques actuelles pour des résultats plus proches des réalités de la communauté.
Et vous, quelle version utilisez-vous et pourquoi ? Seriez-vous prêts à monter en version demain ? Êtes-vous plus partisan d’utiliser la JVM d’Oracle ou penchez-vous plus vers de l’open-source ?
Par Jonathan
Nos sources pour cet article
- « A categorised list of all Java and JVM features since JDK 8 to 17 » : https://advancedweb.hu/a-categorized-list-of-all-java-and-jvm-features-since-jdk-8-to-17/
- « New features between Java 8 and Java 17 » : https://ondro.inginea.eu/index.php/new-features-in-java-versions-since-java-8/
- « It’s time to move your applications to Java 17. Here’s why—and how._ » : https://blogs.oracle.com/javamagazine/post/its-time-to-move-your-applications-to-java-17-heres-why-and-heres-how
- « The art of long-term support and what LTS means for the Java ecosystem » : https://blogs.oracle.com/javamagazine/post/java-long-term-support-lts
- « Java : le nouveau modèle avec le Long Time Support » : https://meritis.fr/java-nouveau-modele-long-time-support/
- Oracle Java SE Support Roadmap : https://www.oracle.com/java/technologies/java-se-support-roadmap.html
- JDK Project Releases : https://openjdk.java.net/projects/jdk/