La modularisation sera sans doute la principale nouveauté de Java SE 9 (Standard Edition), dont la sortie est prévue fin juillet. Mais Red Hat et IBM, membres du CE, ont fait part de leurs inquiétudes, et se demandent notamment si le projet de module n’entraînera pas des incompatibilités avec les applications et Java Entreprise. Dans un article récent, Scott Stark, le vice-président de l'architecture du groupe JBoss de Red Hat, a listé une série de problèmes que Red Hat et d'autres membres du Comité exécutif de Java ont rencontrés avec la Java Specification Request JSR 376 (Demande de spécification Java), relative au système modulaire de la plateforme Java (Java Platform Modular System), un composant central du projet Jigsaw sur lequel repose la modularité de Java.

« L’implémentation de Jigsaw introduit un nouveau système de modules qui fonctionne bien pour la modularisation de Java lui-même, mais elle n'a pas été suffisamment testée dans des déploiements de production plus larges avec des applications réelles au sommet de la machine virtuelle Java (JVM) », a ainsi déclaré Scott Stark. « L’implémentation de Jigsaw dans un nombre important de déploiements d'applications aujourd'hui très répandues n’est pas possible ou nécessiterait une révision significative de l’architecture ».

L'adoption de la modularisation en question

La Java Specification Request JSR 376 devrait servir de base pour Java Enterprise Édition 9, attendue pour la fin 2018. Mais Scott Stark a quelques doutes. « Il est pratiquement sûr que les limitations de Jigsaw ne permettront pas de baser Java EE 9 sur Jigsaw, car il faudrait que les fournisseurs existants de Java EE renoncent totalement à la compatibilité, à l'interopérabilité et à la parité des fonctionnalités avec les versions antérieures de la spécification Java EE ». Selon le vice-président de l'architecture du groupe JBoss de Red Hat, dans certains cas, la mise en œuvre de Jigsaw va à l’encontre de nombreuses années de bonnes pratiques dans le déploiement d'applications modulaires, devenues courantes dans l'écosystème. « Certains éléments clés dans la conception de Jigsaw sont fondés sur une approche réductrice de la compatibilité descendante », a encore déclaré Scott Stark. Cette approche n’est pas gênante pour la modularisation de Java lui-même, mais elle devient « restrictive pour les situations d’usage impliquant le déploiement d'applications ».

Le Java modulaire avec le système de module basé sur la JSR 376 apparaîtra pour la première fois dans le Java Development Kit 9 (JDK) annoncé pour le 27 juillet et d’après ses concepteurs, il sera plus adapté aux petits systèmes. « En introduisant dans le domaine applicatif des concepts qui font sens pour la modularisation et l'encapsulation de la plate-forme Java elle-même, la spécification limite la capacité des développeurs d'applications à s'adapter facilement à l’implémentation particulière d’un système de module », a encore déclaré Scott Stark. Ce dernier affirme que la mise en œuvre de Jigsaw confrontera des millions d'auteurs et d'utilisateurs de l'écosystème Java à des défis majeurs pour leurs applications et leurs bibliothèques, surtout s’ils travaillent sur les services, le chargement des classes et la réflexion Java. Selon Scott Stark, « en l’état, ce projet introduit une architecture nouvelle, non testée, qui n’a pas fait ses preuves, pour le déploiement d'applications de manière modulaire. Il pourrait entraîner le développement Java dans deux directions : l’un, autour de Jigsaw et l’autre, pour tout le reste, autrement dit, Java SE Classloaders, OSGi, Java EE, et plus ».

IBM s'interroge sur la complexité de Java 9

« Les modèles introduits dans Jigsaw créent des problèmes de compatibilité montante et descendante qui pourraient s’avérer difficiles à résoudre même dans une version ultérieure », a encore déclaré Scott Stark. « L’écosystème Java risque d’être affaibli au moment où l’environnement serveur vit des changements rapides avec l'utilisation croissante de langages comme Go ». Dans sa critique de Jigsaw, Scott Stark soulève également des problèmes avec le chargement de services, y compris l'extensibilité et la personnalisation. « Jigsaw modifie considérablement le comportement de l'API ServiceLoader et pourrait avoir une incidence sur la compatibilité », a-t-il dit. Ce dernier pointe aussi un possible problème de stabilité, du fait que Jigsaw ne précise pas l'ordre dans lequel les services sont retournés. Robert Scholte, le président d'Apache Maven, Neil Bartlett, ingénieur principal et consultant chez Paremus, Brian Fox, CTO de Sonatype et plusieurs employés de Red Hat ont également participé à l’analyse de Jigsaw.

À la fin de la semaine dernière, dans un message posté sur une liste de diffusion openjdk, Tim Ellison d'IBM a déclaré que les inquiétudes formulées par Scott Stark montraient qu’« un travail supplémentaire était nécessaire pour rassembler la communauté autour de la norme proposée ». Ajoutant qu’IBM ne voterait pas en faveur de la JSR 376. À l’origine, la modularité devait être introduite dans Java SE 8, livré en mars 2014. Mais elle a avait été reporté à Java SE 9 à cause de sa complexité. Toujours à cause de cette complexité, Java SE 9 a été lui-même retardé. (Les représentants d'Oracle n’ont pas répondu à la demande adressée en début de semaine par nos confrères d’InfoWorld pour répondre aux problèmes soulevés par Red Hat et IBM)