Java 9 : IBM et Red Hat vont voter contre l'implémentation des modules Java via Jigsaw
Une solution qui ne couvre pas tous les cas d'utilisation

Le , par Michael Guilloux, Chroniqueur Actualités
La version stable du JDK 9 est attendue le 27 juillet prochain, ce qui veut dire que nous ne sommes plus qu’à moins de 3 mois. Toutefois, il y a de quoi se demander si la sortie de Java 9 ne sera pas une nouvelle fois repoussée, après que Red Hat et IBM ont publiquement annoncé leur intention de voter contre le projet Jigsaw, l’un des plus grands chantiers de Java 9, qui vise à fournir un système de modules standardisé à Java. Cette initiative a été annoncée depuis Java 7, mais a été reportée jusqu’à ce qu’elle soit finalement maintenue dans Java 9. Là encore, la complexité de Jigsaw et la nécessité de mener des tests approfondis ont été à l’origine du report de la sortie de Java 9, à plusieurs reprises.

Ce qu’il est important de noter ici, c’est que le projet Jigsaw ne vise qu’à standardiser le système de modules de la plateforme Java (Java Platform Module System, en abrégé JPMS). Jigsaw n’est pas la seule ou la première initiative de systèmes de modules pour Java ; il définit simplement le système qui sera utilisé pour modulariser la plateforme et les applications qui reposent sur elle. C’est de là que viendrait donc tout le problème.

Il existe d’autres implémentations de modules dans Java, dont les principales sont les modules JBoss de Red Hat, et OSGi qui est pris en charge par un certain nombre de fournisseurs, y compris IBM. Et ces deux fournisseurs, IBM et Red Hat, et bien d’autres estiment que par rapport aux systèmes de modules existants, Jigsaw ne supporte pas des fonctionnalités importantes, ce qui va donc créer une fragmentation de l’écosystème Java.

Dans un billet et un document publiés le 14 avril dernier, Red Hat et Apache Maven, ainsi que d’autres membres du comité exécutif du Java Community Process, ont exprimé leurs inquiétudes relatives à Jigsaw ; lesquelles peuvent être résumées, entre autres, par les points suivants :

  • Jigsaw est une réinvention et non une standardisation. De nombreux cas de déploiement d'applications largement implémentées aujourd'hui ne sont pas possibles sous Jigsaw, ou nécessiteraient une réarchitecture significative ;
  • un écosystème perturbé. L'implémentation Jigsaw exigera finalement que des millions d'utilisateurs et développeurs dans l'écosystème Java subissent d'importants changements dans leurs applications et bibliothèques. Dans certains cas, Jigsaw contredit des années de meilleures pratiques de déploiement d'applications modulaires qui sont déjà couramment utilisées par l'écosystème dans son ensemble ;
  • fragmentation de la communauté Java. En raison de capacités d'interopérabilité insuffisantes et d'autres restrictions, ils craignent qu'il y ait deux mondes de développement de logiciels Java : le monde Jigsaw et le monde « tout le reste » (chargeurs de classes Java SE, OSGi, modules JBoss, Java EE, etc.). Ils estiment qu’un développeur de bibliothèque devra choisir le monde à supporter, ou faire face aux charges d'une stratégie de supporter les deux à la fois.

Dans la liste de diffusion Open JDK, Red Hat a donc annoncé qu’étant donné les problèmes mentionnés dans le billet, il votera contre l’approbation de la spécification de JPMS, donc Jigsaw, qui « n'est pas dans le meilleur intérêt de la communauté Java. » Le vote officiel devrait avoir lieu le 8 mai prochain.

IBM, également membre du comité exécutif du JCP, a tenu les mêmes propos que Red Hat : « Je crois que ce document [publié par Red Hat] démontre qu'il reste encore du travail pour rapprocher la communauté d'un accord sur la norme proposée », affirme Tim Ellison d’IBM. « Même lorsque les problèmes techniques ont déjà été discutés au sein du groupe d’experts, il incombe à ce groupe de faire tout son possible pour comprendre et résoudre toutes les différences. Si les gens estiment que leur argument n'a pas été pris en compte, il n'est pas surprenant que la frustration s’ensuive », dit-il. « Je suis personnellement déçu que la mise en révision publique ait été faite malgré les objections explicites d'un certain nombre de membres du groupe d’experts ». Pour cela, « IBM vote également "non", ce qui reflète notre position selon laquelle le JSR n'est pas prêt en ce moment pour dépasser l'étape de la révision publique », a-t-il ajouté.

Tim Ellison estime que les problèmes et préoccupations soulevés justifient une discussion et une résolution plus poussées. Il suggère donc que le travail se poursuive entre tous les membres du groupe d'experts pour traiter les problèmes documentés sur les listes de diffusion. « IBM souhaiterait voir un consensus plus approfondi au sein des membres du groupe d'experts avant que cette spécification ne passe à l'étape suivante », a-t-il conclu.

Pour traiter ces problèmes, Red Hat a suggéré dans son billet de repousser la sortie du JDK 9, s’il le faut. « Beaucoup de problèmes pourraient être résolus dans un court laps de temps. D'autres nécessitent peut-être un peu plus de temps pour réussir, mais conduiraient à une meilleure plateforme globale et à une meilleure expérience utilisateur. Un petit délai vaut le coût si l'alternative apporte une solution qui ne couvre pas tous les cas d'utilisation », a écrit Scott Skart de Red Hat.

Sources : Blog de Scott Stark (Red Hat), Open JDK mailing list

Et vous ?

Qu'en pensez-vous ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de Vyrob Vyrob - Membre du Club https://www.developpez.com
le 02/05/2017 à 11:29
Y a un truc qui m'échappe : pourquoi se manifestent-ils seulement maintenant, à 3 mois de la release ? Le projet Jigsaw ne date pourtant pas d'hier.
Avatar de Padget Padget - Nouveau membre du Club https://www.developpez.com
le 02/05/2017 à 11:57
C'est vrai qu'à trois mois d'une release... c'est un peu court pour rebondir. Mais bon, si cela aboutis, cela sera une excellente amélioration pour Java. Le principal avantage sera la taille en mémoire de la JVM qui va considérablement baisser. On rejoint aussi le crédo du C++ : ne t'embarrasse que ce dont tu as la nécessité.
Par contre si, comme certains semblent le supposer, Oracle se détourne de Java, il risque (tant mieux ?) d'y avoir une reconversion de pas mal de développeur vers d'autres écosystèmes (.Net par exemple) : "Le malheur des uns, fait le bonheur des autres".
Avatar de Mickael_Istria Mickael_Istria - Membre émérite https://www.developpez.com
le 02/05/2017 à 12:18
Citation Envoyé par Vyrob Voir le message
Y a un truc qui m'échappe : pourquoi se manifestent-ils seulement maintenant, à 3 mois de la release ? Le projet Jigsaw ne date pourtant pas d'hier.
Il faut lire les posts detailles et les discussions en lien.
Les inquietudes vis-a-vis de Jigsaw et de son interet technique et pour la communaute ont ete manifestees par tous des le debut. La compatibilite avec OSGi ou Maven a ete identifiee comme critique tres tot. Maitenant que Jigsaw a atteint un "pallier", il a ete teste dans ces environnements (OSGi et Maven) et il apparait qu'en l'etat actuel, ca complique tout sans ajouter grand chose. En l'etat actuel, il ne delivre pas les promesses qui ont ete identifiees initialement comme des "requirements".
Si l'annonce n'est publiee que maintenant, c'est qu'avant, il y avait encore de l'espoir que ca tourne mieux; mais maintenant, Jigsaw est face a un constat d'echec programme, et il est donc temps d'etre plus explicite si on veut que les choses aillent dans le bon sens.

Le principal avantage sera la taille en mémoire de la JVM qui va considérablement baisser.
Si par memoire tu entends "espace disque du deliverable", OK. Pour la RAM ou le Heap ca ne devrait pas changer grand chose car les classloaders ne chargent deja que ce qui est utile.
Avatar de Cafeinoman Cafeinoman - Membre éprouvé https://www.developpez.com
le 02/05/2017 à 20:28
C'est sûr que si au final, ca fait un peu d'OSGI et un peu de Maven, mais en moins bien, tout en ne marchant pas ni avec l'un ni avec l'autre, ça n'a pas d'intérêt...
Avatar de Vyrob Vyrob - Membre du Club https://www.developpez.com
le 03/05/2017 à 9:22
Citation Envoyé par Mickael_Istria Voir le message
Il faut lire les posts detailles et les discussions en lien.
Je n'ai lu que cette news effectivement, je n'ai pas été voir les articles qui y sont liés. C'est juste que je pensais qu'avec leur processus de développement, ils se seraient rendu compte dès le début si ça n'allait pas, et de fait n'auraient pas eu besoin d'attendre d'en être à la dernière phase pour manifester leur refus. M'enfin il semblerait que je me sois trompé ! Merci pour l'explication en tout cas.
Avatar de Michael Guilloux Michael Guilloux - Chroniqueur Actualités https://www.developpez.com
le 06/05/2017 à 3:07
Java 9 : une nouvelle proposition d’Oracle pour résoudre l’un des problèmes évoqués par Red Hat
sur le système de modules Java (Jigsaw)

Comme nous l’avons rapporté récemment, Red Hat et IBM ont décidé de voter contre le projet Jigsaw qui vise à fournir un système de modules standardisé à la plateforme Java. Dans un billet de blog, un ingénieur de Red Hat a exposé les raisons de cette position. Il explique que de nombreux cas de déploiement d'applications largement implémentées aujourd'hui ne sont pas possibles sous Jigsaw, ou nécessiteraient une réarchitecture significative. Il pense également que l’écosystème Java sera perturbé, expliquant que dans certains cas, Jigsaw contredit des années de meilleures pratiques de déploiement d'applications modulaires qui sont déjà couramment utilisées par l'écosystème dans son ensemble. L’un des points également mis en avant par l’ingénieur de Red Hat est la fragmentation de l’écosystème. En raison de capacités d'interopérabilité insuffisantes et d'autres restrictions, il craint qu'il y ait deux mondes de développement de logiciels Java : le monde Jigsaw et le monde « tout le reste » (chargeurs de classes Java SE, OSGi, modules JBoss, Java EE, etc.).

Dans les détails, Red Hat explique encore que les modules automatiques de Jigsaw ne sont pas bien accueillis par la communauté ; un problème qu’Oracle veut résoudre avec une nouvelle proposition. Pour information, les modules automatiques sont considérés comme un mécanisme de compatibilité qui permet de « transformer » les JAR en modules dans un environnement modulaire. L'idée est qu'un module soit généré automatiquement à partir d'un JAR ; le nom du module serait alors un nom dérivé de celui du JAR, après diverses transformations pour le faire s'aligner sur la convention de nommage proposée pour les modules. Le problème est que de nombreux membres de la communauté estiment que les modules automatiques risquent d'apporter plus de mal que de bien, notamment à cause des risques de collision de noms.

Ils ont donc suggéré à Mark Reinhold d'Oracle, Specification Lead du projet Jigsaw, de « réviser l'algorithme qui calcule les noms des modules automatiques pour inclure l'identifiant de groupe Maven, lorsqu'il est disponible dans le fichier 'pom.properties' d'un fichier JAR ». Cela devrait faire « en sorte que les noms des modules soient moins susceptibles d'entrer en collision. » Dans le cas contraire, Mark Reinhold devrait envisager de « supprimer entièrement la fonctionnalité des modules automatiques », étant donné qu’elle peut créer plus de problèmes qu’en résoudre.

Mark Reinhold a donc fait des ajustements à son plan sur les modules Java, mais propose de ne pas supprimer la fonctionnalité de modules automatiques. D’après l’architecte en chef de la plateforme Java chez Oracle, la fonctionnalité de modules automatiques est « une partie critique de toute l’histoire de migration : elle permet aux développeurs d'applications de commencer à modulariser leur propre code sans avoir à attendre que toutes les bibliothèques et les frameworks qu'ils utilisent soient modularisés », dit-il. « Les bibliothèques et les frameworks populaires qui sont activement maintenus seront éventuellement modularisés assez rapidement, mais les projets moins actifs prendront plus de temps – peut-être des années ou même des décennies – et de nombreux projets inactifs ou abandonnés ne seront jamais modularisés. » C’est en cela que les modules automatiques sont importants dans le projet Jigsaw.

Mark Reinhold ne compte toutefois pas non plus réviser l'algorithme qui calcule les noms des modules automatiques, comme cela lui a été suggéré. « La suggestion d'utiliser les coordonnées Maven lorsqu'elles sont disponibles aiderait moins de la moitié des projets les plus populaires en cours d'utilisation aujourd'hui, d'après trois enquêtes différentes », dit-il. Par contre, il propose de ramener l’attribut manifeste de fichier JAR, une option qui avait été suggérée précédemment, mais qu’il avait rejetée. « L'attribut manifeste 'Automatic-Module-Name' est, d'un point de vue technique, esthétiquement désagréable, car il définit une deuxième façon de nommer des modules. Pris seul, cependant, il permet une modularisation non coordonnée en utilisant des noms de modules stables avec peu d'effort, et donc il semble que ce soit la moins mauvaise option sur la table », a-t-il expliqué. Il recommande par ailleurs que tous les modules soient nommés selon la convention de nom de domaine Internet inversé.

La nouvelle proposition de Mark Reinhold ne résout pas complètement le problème, mais semble déjà satisfaire un bon nombre de personnes, y compris les développeurs du projet Apache Maven. « Je pense que c'est un développement formidable qui permettra d’emprunter le chemin vers la modularisation et s’éloigner de la fragmentation potentielle de l'écosystème Java », a répondu Brian Fox, ancien président du projet Apache Maven.

Il est important de noter que la proposition d'Oracle ne vient pas en réponse aux inquiétudes exprimées par Red Hat et IBM. Il s'agit en effet d'un problème sur lequel une discussion a été ouverte il y a des mois déjà.

Sources : Proposition révisée de Mark Reinhold, Réponse de Brian Fox
Avatar de Michael Guilloux Michael Guilloux - Chroniqueur Actualités https://www.developpez.com
le 06/05/2017 à 11:26
Modules Java : Mark Reinhold d’Oracle remet en cause la bonne foi de Red Hat et IBM
et invite le comité exécutif du JCP à soutenir le projet Jigsaw

Red Hat et IBM ont récemment annoncé qu’ils n’apporteront pas leur soutien au système de modules implémenté dans Java 9, dans sa forme actuelle. Ils estiment que le JSR 376 (Java Platform Module System) n'est pas prêt en ce moment pour dépasser l'étape de la révision publique et qu’un délai supplémentaire vaut le coût pour résoudre les problèmes évoqués. En ce qui concerne ces problèmes, on peut les résumer comme suit : le système de modules introduits dans Java 9 apporte une solution qui ne couvre pas tous les cas d'utilisation, mais vient également avec des capacités d'interopérabilité insuffisantes et d'autres restrictions, qui pourraient créer une fragmentation de la communauté Java.

Le problème est qu’il existe d’autres implémentations de modules dans Java, dont les principales sont les modules JBoss de Red Hat, et OSGi qui est pris en charge par un certain nombre de fournisseurs, y compris IBM. Ainsi, les objections de Red Hat et IBM sont-elles de bonne foi ou visent-elles simplement à défendre leurs intérêts personnels ? Pour Mark Reinhold d’Oracle, ces entreprises cherchent simplement à défendre leurs intérêts. L’architecte en chef du JDK chez Oracle a donc sévèrement critiqué les deux fournisseurs, dans une lettre ouverte publiée hier, avant d’inviter les membres du comité exécutif du Java Community Process (JCP) à soutenir le JSR 376.

Mark Reinhold rappelle avant tout que l'objectif de ce JSR (soumis et approuvé par le comité exécutif en décembre 2014) est de concevoir un système de module accessible à tous les développeurs pour leur utilisation dans leur propre code, mais évolutif vers la modularisation de la plateforme Java SE elle-même. Et la spécification actuelle a atteint cet objectif.

Mark Reinhold affirme que Red Hat « a d'abord accepté les objectifs et les exigences du JSR, mais a travaillé de façon constante à les saper. Ils ont tenté de transformer ce JSR en autre chose que ce qui était prévu. Plutôt que de concevoir un système de module à la fois accessible et évolutif, ils ont plutôt voulu concevoir un "méta" système de modules par lequel plusieurs systèmes de modules différents pourraient interagir profondément ». Et de déduire : « Je ne peux supposer qu'ils ont poursuivi cet objectif alternatif afin de préserver et de protéger leur système de modules non standardisé, qui est peu utilisé en dehors de l'écosystème JBoss/Wildfly », dit-il. « La conception d'un "méta" système de modules serait un projet intéressant », poursuit Mark Reinhold, « mais ce serait encore plus large et beaucoup plus difficile que ce JSR. En se concentrant sur un public d'experts de système de modules, cela entraînerait probablement une conception qui n'est pas accessible à tous les développeurs. C'est pourquoi j'ai souligné à maintes reprises à Red Hat Middleware que beaucoup des fonctionnalités qu'ils préconisaient étaient hors de portée, mais ils ont choisi de ne pas accepter ces décisions. »

La décision de Red Hat de ne pas soutenir le système de modules introduit dans Java 9 n’est donc pas une surprise pour Mark Reinhold. Par contre, le « non » d’IBM était vraiment inattendu. « IBM a dit très peu de choses au cours de ce JSR. Après avoir annoncé qu'ils voteraient contre, ils ont ensuite envoyé une liste de problèmes spécifiques au groupe d’experts (EG), mais seulement en réponse à une demande d'un autre membre de l’EG. Aucun de ces problèmes n'est nouveau, beaucoup d'entre eux ont été discutés depuis longtemps, et IBM était silencieux pendant la plupart des discussions », affirme Mark Reinhold. « La position récente d'IBM semble être figée sur un désir vague d’un meilleur consensus parmi les membres de l’EG. Je préférerais davantage de consensus, mais ce n'est pas possible compte tenu de la position de Red Hat Middleware. Je ne peux donc conclure que IBM a décidé que ses intérêts sont mieux servis en retardant ce JSR et aussi le JSR 379 (Java SE 9), ce qui est regrettable ».

Mark Reinhold reconnaît que la spécification actuelle de ce JSR n'est pas parfaite, mais reflète des années de développement, de test et d'amélioration avec des feedbacks actifs de nombreux développeurs. Il est d'accord avec le fait que la spécification pourrait être améliorée s'ils y passent plus de temps. Il estime également que « ce que nous avons maintenant ne résout pas tous les problèmes pratiques liés à la modularité auxquels sont confrontés les développeurs, mais ils répondent aux objectifs et aux exigences convenus et constituent une base solide pour les travaux futurs. Il est temps de livrer ce que nous avons, de voir ce que nous en tirons comme leçon et d'améliorer itérativement », dit-il, avant d’ajouter de ne pas laisser la recherche du parfait empêcher de livrer ce qui est déjà bien : « Ne laissez pas le parfait être l'ennemi du bon ».

Pour conclure, Mark Reinhold réaffirme qu’on ne devrait pas retarder ce JSR (peut-être pendant des années) afin d'obtenir un meilleur consensus, sachant que certains poursuivent un objectif différent ; lequel objectif pourrait aboutir à une plateforme bloatware et complexe qu'aucun développeur n’utiliserait, ce qui n’est pas dans le meilleur intérêt de la communauté Java. Il rappelle également que le JCP « ne prévoit pas de consensus et pour une bonne raison. Il donne délibérément des pouvoirs de décision aux Specification Leads, précisément pour empêcher les membres de l'EG d'obstruer les progrès afin de défendre leurs propres intérêts. » Il appelle les membres du comité exécutif qui se demandent ce que sera leur vote, de juger la spécification sur le fond et non de voter contre le JSR en raison du manque de consensus dans l'EG. Un tel vote sera « un vote contre le JCP lui-même », dit-il, et condamne les futurs JSR « au consensus des "experts" qui se servent ».

Source : Lettre ouverte de Mark Reinhold

Et vous ?

Que pensez-vous des déclarations de Mark Reinhold ?
Red Hat et IBM essaieraient-ils de protéger leurs intérêts au détriment de celui de la communauté ?
Faut-il livrer ce qu’on a déjà ?
Avatar de steel-finger steel-finger - Membre habitué https://www.developpez.com
le 06/05/2017 à 11:42
Quelqu'un sais comment va fonctionné ce système de module ?

Sinon ça ne m'étonne pas de RedHat & IBM, ils protègent leur intérêts et c'est normal n'importe quelle entreprise ferais de même
Avatar de Aurelien.Regat-Barrel Aurelien.Regat-Barrel - Expert éminent https://www.developpez.com
le 06/05/2017 à 12:55
C'est pour gérer / arbitrer ce genre de situation que les processus de standardisation existent.

En C++, il y a en ce moment un peu le même souci : créer un système de modules avec la difficulté de gérer la transition / compatibilité avec l'existant. Microsoft et Google développent chacun leur vision et se sont un peu frittés sur le sujet. Mais le processus ISO protège mieux il me semble contre les intérêts propres à ces groupes car au final leur vote est noyé dans la masse.

Quelqu'un sait comment ça se passe avec Java? Combien de personnes / acteurs ont le droit de voter?
Avatar de Mickael_Istria Mickael_Istria - Membre émérite https://www.developpez.com
le 06/05/2017 à 13:04
Citation Envoyé par steel-finger Voir le message
Sinon ça ne m'étonne pas de RedHat & IBM, ils protègent leur intérêts et c'est normal n'importe quelle entreprise ferais de même
Les inquietudes sont purement techniques et en rien politiques, et les problemes mentionnes sont valables pour tout l'ecosysteme Java. Il ne faut pas voir la critique d'une specification comme un moyen de ralentir le monde, disons qu'il faut plutot le voir comme un coup de frein pour etre sur de ne pas louper le virage...
Contacter le responsable de la rubrique Accueil