Je trouve trois avantages aux fichiers DLL :
- rassembler les fonctions les plus utilisées dans des librairies et ménager l'espace disque ;
- faire que plusieurs programmes fonctionnant en même temps utilisent les mêmes routines pour libérer la mémoire ;
- faciliter la mise à jour des programmes en évitant le recompilation.
En revanche, il faudrait faire la part entre les DLL fournies par le système et celles fournies par les programmes pour éviter les conflits de versions :
- les fonctions récurentes et essentielles à la majorité des programmes seraient protégées dans un répertoire du système ;
- les fonctions récurantes et spécifiques à un logiciel (de l'application personnelle à la suite bureautique) se situeraient dans son répertoire seulement.
En effet, on ne peut tomber dans les deux extrêmes suivants :
- rassembler toutes les DLL dans un répertoire modifiable à souhait ;
- réinventer la roue pour chaque application.
Ainsi, certains Linux sont plus lourds que Windows mais plus fiables.
Les DLL sont importantes pour les systèmes muti-tâches.
Néanmoins, il faudrait que les applications ne mettent à jour que les DLL se trouvant dans leur répertoire respectif.
Les DLL fournies par le systèmes ne devraient être remplacées que lorsque cela est nécessaire par la personne gérant le système.
Pour finir, j'avais évoqué une fois le paradoxe des librairies dynamiques toujours plus nombreuses et des programmes toujours plus gros.
Il existe beaucoup de non sens à mes yeux. Les mises à jour requises par les installations de logiciels et de gestionnaires dénoncent plusieurs mauvaises attitudes :
- le programmeur estime que son logiciel est plus facile à écrire si l'utilisateur possède telle plate-forme de services (à l'instar des anciens programmeurs DOS qui supposaient que que le gestionnaire d'affichage ANSY.SYS était chargé) ;
- quand l'application demande plus de modules supplémantaires, c'est forcément mieux -- pour le commerce ;
- les créateurs de systèmes d'exploitation entretiennent ces mauvaises pratiques (téléchargement de Framework, mises à jour continuelles, conflits de version).
Aux concepteurs de logiciels de changer la donne.
Conclusion personnelle : il est vrai que, malgré tout le bien que je pense de la philosophie des DLL, je préfère travailler sous DOS. Ainsi, le DOS lui-même fournit beaucoup de services de base dont la précieuse gestion de disque et les programmes ne nécessitent généralement que les fichiers les accompagant -- chacun reste à sa place grâce à l'existence des répertoires. De plus, la technique des overlays permet de se contenter de peu de mémoire. Sans parler des possibilités de passage de données entre applications en mono-tâche :
- outils de changement tâches avec copie de texte (TASKMAX de DR DOS 6) ;
- intégration dans suite logicielle (Microsoft Works) ;
- fichiers ASCII.
Qui sait si, un jour, je ne passerai pas à OS/2...
Ça fait longtemps que les conflits de version de DLL n'existent plus (Cf mon poste plus haut WinSxS). En revanche un programmeur ne peut réinventer la roue, donc si une DLL (Microsoft ou non) implémente une fonctionnalité qu'il lui mettrai des jours à coder, je ne vois pas le mal à ce qu'il l'utilise. Ensuite et uniquement dans un second temps, il peut développer un workaround pour apporter plus ou moins la même fonctionnalité sur un OS plus ancien. Maintenant tout cela prend du temps et c'est du temps disponible en moins pour la stabilisation du logiciel et l'ajout de nouvelles fonctionnalités. Il faut mettre en rapport ce coup de développement supplémentaire avec la part de marché de l'OS considéré. Si 1% des utilisateur de votre logiciel utilisent par exemple Windows 98, alors ça n'est plus du tout rentable de redévelopper toutes les fonctionnalité nouvelles utilisé par votre logiciel (.NET 1.1 par exemple). Dans ce cas il vaut bien mieux offrir au client une licence WinXP, il en sera ravi et vous aussi. Fragmenter le code en plein de DLL ayant chacune un but particulier apporte en effet un énorme avantage en terme de consommation mémoire. Si beaucoup d'applications utilisent la même DLL, elle n'est présente qu'une seule fois en mémoire.