Poussé vers la sortie par certains, Java n’a pas dit son dernier mot
Java semble perdre en popularité, dépassé par des langages réputés pour leur simplicité et leur efficacité. Cependant, l’écosystème créé par Sun et propulsé par Oracle évolue pour dépasser son cadre de départ.
Comme à son habitude, GitHub a présenté en 2020 son étude annuelle Octoverse. Outre le fait qu’il y a désormais 56 millions de « développeurs » (ou de personnes qui ont hébergé du contenu) sur GitHub, les observateurs du rapport se penchent sur les langages de programmation les plus populaires.
Pour la première fois en 2019, Python a dépassé Java en renommée. Cet ordre restait inchangé en 2020. JavaScript conserve la première place, suivi par Python et enfin Java. Petite surprise des données récoltées entre 2019 et 2020, TypeScript détrône ce cher PHP, à la sixième position de ce classement derrière C#.
Python, JavaScript et TypeScript gagnent en popularité
Mario RodriguezVP produit, GitHub
« JavaScript est toujours numéro un. En fait, TypeScript est passé de la dixième position à la quatrième. Donc, JavaScript et TypeScript combinés sont les langages de programmation les plus populaires », déclare Mario Rodriguez, vice-président produit chez GitHub. « Python est au deuxième rang grâce à l’accélération des projets de machine learning. Java a pris la troisième place. Aujourd’hui, Java continue de rencontrer un succès incroyable, surtout dans les entreprises ».
Il est important de noter que cette étude reflète une réalité dans l’écosystème GitHub entre octobre 2019 et septembre 2020. De son côté, StackOverflow a organisé un sondage auprès de 65 000 membres de sa communauté afin de connaître leur langage préféré. Là encore, TypeScript est largement plébiscité, en deuxième position après Rust (que les sondés semblent apprécier par renommée, la plupart d’entre eux ne l’utilisent pas). JavaScript se trouve ici en dixième et dernière position de ce classement, tandis que Java n’est même pas mentionné dans l’article qui accompagne l’enquête. Kotlin tient la quatrième place.
« La montée en puissance de TypeScript met en évidence le changement de direction de Microsoft et son adhésion au mouvement de l’open source. Alors que les bases de code du front end web et de Node.JS augmentent en taille et en complexité, l’adoption du typage statique de TypeScript donne aux développeurs une confiance accrue dans la justesse de leur code », écrivent les auteurs de l’étude.
La mort de Java ? Une « fake news » selon Redmonk
Java serait-il dépassé ? Remplacé par TypeScript, JavaScript et Kotlin ? Selon l’index TIOBE de janvier 2021, le langage supporté par Oracle conserve son rang dans le champ d’expertise d’un développeur. Il occupe la deuxième position de l’index après C et devant Python. JavaScript n’est que septième, tandis que TypeScript atteint la quarantième place de l’indicateur. Toutefois, Paul Jensen, CEO de Tiobe, remarque une baisse constante de la popularité de Java.
En juin 2020, le cabinet d’analyse Redmonk réalisait son classement bisannuel des langages de programmation. Java se retrouve ici en troisième position. « C’est la première fois que nous logeons Java en dessous de la première ou deuxième place », écrit Stephen O’Grady, analyste principal et cofondateur de RedMonk.
Pour autant, difficile de douter de la pertinence du langage en entreprise. Dans un rapport publié à la fin de l’année 2019, Indeed notait en 2019 que Java est la compétence de programmation la plus recherchée après SQL. Cloud Foundry remarque à partir d’un sondage annuel mené entre septembre et octobre 2020 auprès de ses utilisateurs que 76 % des 176 répondants certifiés recourent à Java en combinaison avec leur PaaS Cloud Foundry, soit le langage le plus populaire devant JavaScript (64 %), Python (58 %) et Go (40 %).
Dans une version complétée de l’étude de StackOverFlow, Java est le cinquième langage le plus utilisé par les professionnels, tandis que TypeScript se retrouve en huitième position (JavaScript caracole en tête).
« Même si d’autres rapports ont prématurément et faussement annoncé la mort de Java ou l’ont radié, sa solide performance dans ces classements quantitatifs a validé ce que nous avons observé qualitativement, à savoir que Java reste largement employé grâce à sa capacité à trouver et à satisfaire de nouveaux cas d’usage », ajoute de son côté Stephen O’Grady.
Les frameworks, appréciés par les développeurs Java
Mais Java n’est pas seulement un langage de programmation orienté objet, il s’entoure d’un écosystème, de composants et de modules qui ne lui sont plus forcément spécifiques.
L’éditeur Snyk évalue les outils liés à Java à travers un rapport intitulé sobrement « JVM ecosystem report ». L’édition 2020, publiée en février, se base sur un sondage auprès de 2 000 développeurs réalisé à la moitié de l’année 2019.
Point intéressant mentionné dans l’étude, le framework SpringBoot sponsorisé par VMware prend désormais une place importante dans l’écosystème Java. D’après le rapport de Snyk, six développeurs sur dix utilisent Spring. D’ailleurs, 41 % des sondés exploitent Java EE ou Jakarta EE à travers un framework. Cette tendance forte s’explique par le manque de souplesse, sa gourmandise en ressources et la supposée complexité de son environnement. Il fait souvent l’objet de moqueries qui ont mené à la multiplication de « memes » plus ou moins drôles.
Blague à part, les frameworks comme Spring entendent faciliter la programmation d’applications Java en le rendant modulaire. De même, Microprofile tente d’accommoder ce langage au développement de microservices. De son côté, Red Hat pousse le projet Quarkus, un cadriciel Java conçu pour adapter Java aux environnements containérisés, notamment en réduisant l’empreinte mémoire des JVM et finalement en affinant la compatibilité du langage avec les architectures cloud natives.
ActiveJ s’applique dans cette même voie en affirmant proposer une plateforme Java alternative imaginée pour remplacer Spring, Quarkus, Micronaut, mais aussi Spark.
Micronaut développe un framework polyglotte (Java, Groovy, Kotlin) basé sur JVM qui – comme Quarkus, Helidon et Spring – commence à s’appuyer sur GraalVM, une machine virtuelle multilangage offrant une compilation anticipée (ahead of time). Pour beaucoup de membres de la communauté des développeurs, c’est d’ailleurs ce projet qui guide le futur de Java. GraalVM est sous licence GPLv2 et a pour principal contributeur Oracle.
Java (et Oracle) : je t’aime, moi non plus
Et comme souvent, la chaîne d’outils Java dépend de son contributeur principal, ici Oracle. Seulement le changement de licence d’Oracle JDK a largement impacté la décision des sondés de l’étude de Snyk de se tourner vers OpenJDK. Là où en 2018-2019, 70 % des répondants affirmaient utiliser Oracle JDK en production, ce pourcentage tombe à 34 % dans l’enquête 2019-2020. Toutefois, la version d’OpenJDK distribuée par la compagnie de Larry Ellison a les faveurs de 15 % des sondés, tandis que 24 % d’entre eux se sont retournés vers Adopt OpenJDK. À titre indicatif, la version supportée par AWS (Amazon Corretto) n’est employée que par 4 % des interrogés. Ces évolutions s’appréhendent par le fait que seulement 9 % des développeurs interrogés paient le support pour JDK et quand ils le font, Oracle domine le tableau devant Red Hat/IBM et Azul. Dans son état de l’art de Java, New Relic, note que 75 % du marché reste à la main d’Oracle, après l’inspection de plusieurs millions de JVM.
Un autre phénomène explique la situation. Le passage de Java EE à Jakarta EE entraîne un changement de name space, pour des questions de propriété intellectuelle. Si une entreprise souhaite migrer vers Jakarta EE, elle devra donc réexaminer l’intégralité de ces applications afin de renommer un ensemble de classes commençant par javax. en jakarta.
En revanche, quand il s’agit de ses propres projets open source, Oracle s’ouvre un peu plus. Il a permis et poussé la migration des dépôts d’OpenJDK sur Mercurial vers GitHub pour accueillir Java 16.
Et si la cadence des releases a été revue à la hausse pour une publication tous les six mois, il faudra attendre septembre 2021 pour la prochaine version LTS, Java SE 17.
Les développeurs eux-mêmes adoptent une forme de conservatisme au sujet de Java. Dans la plupart des études communautaires, celles de Snyk, Jetbrains (contributeur principal de l’IDE IntelliJ IDEA) ou JRebel publiées en 2020, Java 8 reste la version dominante devant Java 11, une autre version profitant du LTS depuis sa disponibilité en 2014. Apache Tomcat, lancé en 2006, est le serveur web applicatif le plus populaire, tandis que Maven et Gradle demeurent les outils d’automatisation préférés des programmeurs, si l’on en croit les sondages. Jenkins, lui est souvent en tête du classement des composants CI/CD.
La JVM et… Kotlin inspirent le futur de Java
Cependant, comme le suppose Mario Rodriguez de GitHub, l’écosystème Java tend à s’étendre. Les développeurs ne manipulent plus un seul langage, mais plusieurs : d’où la popularité des JVM, qui sont polyglottes.
Dans une section de l’étude de Snyk justement consacré à la machine virtuelle Java, une écrasante majorité des développeurs interrogés (86,9 %) manie le langage pensé par Sun associé à leurs JVM pour leur application principale. Snyk note cependant que l’influence de Kotlin a doublé en un an, pour représenter 5,5 % des réponses.
« La croissance de l’adoption de Kotlin parmi les utilisateurs de JVM n’est pas surprenante si l’on considère l’aisance avec laquelle il s’intègre avec Java. Sans oublier que l’adoption de Kotlin dans des frameworks tels que SpringBoot a facilité la création de systèmes de production. Il est important de noter que les innovations de Kotlin infusent le développement de Java. Les versions plus récentes de Java tentent d’intégrer des concepts qui sont populaires et appréciés dans des langages comme Kotlin. Il est intéressant de voir comment cela influence l’adoption future de différents langages au sein des JVM », analysent les auteurs du rapport.
Dans cette vision simplifiée de Java, le projet Panama remporte l’adhésion, car il doit « enrichir les connexions entre les machines virtuelles Java et des API bien définies, mais “étrangères” (non-Java) », dont les interfaces principalement utilisées par les développeurs spécialistes du C. De son côté, JRebel note également l’intérêt pour le projet Loom afin d’améliorer la gestion du code concurrent pour Java avec les JVM via des méthodes d’appels asynchrones.
Le projet Valhalla, lancé en 2014, doit procurer de nouveaux typages génériques aux langages basés sur les JVM, avant tout par l’apport de classes Inline (là encore, une influence de Kotlin). Enfin, GraalVM est en cours d’adaptation dans OpenJDK par le biais du projet Leyden, dont le rôle est de trouver des composants alternatifs déjà existants tout en en ajoutant des images statiques à Java SE.