octobre
2011
L’enfer de la distribution, un problème bien connu des développeurs de tous bords. Microsoft y a longtemps été confronté au travers de ce qu’on appelait alors le DLL Hell, l’écosystème Java s’y frotte encore avec son Jar Hell.
DLL Hell :
Problème survenant au fil des installations, mises à jour, et désinstallations de produit d’éditeurs multiples manipulant des DLLs communes, ce qui aboutit à la mise en place de versions incompatibles, de sorte qu’il n’est pas rare que l’installation d’une application ou sa mise à jour cause la perte de fonctionnement d’une autre application, notamment d’un autre éditeur.
Jar Hell :
Le format Jar est difficile à gérer, à packager et à distribuer. Des dépendances incompatibles, des versions en conflits sont autant de problèmes connus et identifiés dans le monde Java sous le nom de Jar Hell.
Solutions
Avec .NET, Microsoft a pallié au problème du DLL Hell en refondant en profondeur les mécanismes des DLL. Le packaging et la distribution sont un des points forts de .NET : plusieurs modules peuvent cohabiter sous des versions différentes. La solution mise en oeuvre prend en compte des métadonnées d’assembly (numéro de version, clé publique, langue, …) pour créer un nom fort unique pour une DLL.
Java, de son côté, a commencé à parler de Java Module System en 2005 via la JSR 277 qui devrait permettre de modulariser Java et de résoudre le Jar Hell. Ainsi, plusieurs versions d’un module pourront cohabiter et les dépendances à une version seront indiquées dans les métadonnées du module. On pourra ainsi dire que le module A utilise les version 3 et + du module B par exemple.
Pour conclure…
Les technologies concurrentes Java et .NET ont dû faire face au problème du packaging et de la gestion des versions. Chacune à sa manière a dû trouver une solution. Je regrette seulement que la solution de Java ait été aussi longue à apparaitre sur la RoadMap alors que .NET a pris le problème à bras le corps assez tôt (2000).
Non pas de grande explication sur la façon dont sera implémenté Java Module System dans Java 8. Pour cela je vous invite à jeter un oeil sur le projet Jigsaw et à lire les excellents articles sur les blogs de Xebia et d’Ippon Technology. L’article suivant explique la solution mise en oeuvre par Microsoft avec .NET : http://msdn.microsoft.com/fr-fr/library/ms973843.aspx