Je crois qu'il y a un malentendu. Guix en général ne propose qu'une version de chaque logiciel qu'il propose (sauf par exemple gcc, python et d'autres outils du même genre). En revanche, Guix te permet de créer tes propres paquets (tu me diras, comme n'importe quelle distro, et tu auras raison). Je ne connais pas ta distribution, mais en général, les paquets sont installés dans des répertoires globaux (/usr, /lib, /bin, etc) ce qui fait que tu ne peux pas avoir un libpng.so qui soit en version 1.2 et un autre libpng.so en version 1.6 (tu auras libpng.so et libpng12.so par exemple). Comme guix installe chaque paquet séparément, tu peux avoir plusieurs variantes de libpng.so qui cohabitent.
Pour éviter qu'un logiciel compilé avec libpng 1.6 ne trouve libpng 1.2 (et plante), Guix s'assure que ce logiciel ne pourra trouver que la version 1.6 en lui passant le chemin direct vers la bibliothèque (et pas juste son nom) via le mécanisme de RPath pour les fichiers exécutables ELF par exemple. De cette manière, je peux installer une visionneuse avec libpng 1.6 et un autre logiciel avec libpng 1.2. Les deux vivent ensemble sans problème. Je pourrais aussi avoir un libpng 1.6 avec la prise en charge du format apng, et un autre libpng 1.6 sans cette prise en charge par exemple, utilisés par des logiciels différents (bon là c'est tiré par les cheveux).
Un autre exemple, c'est la mise à jour : si j'ai deux logiciels qui dépendent d'une bibliothèque et qu'il y a un changement d'API dans la nouvelle version de cette bibliothèque. La nouvelle version du premier premier prend ça en compte et n'est plus compatible avec l'ancienne bibliothèque, alors que le deuxième n'a pas sortie de version compatible. Sur une distribution classique, tu as un problème : soit tu ne mets rien à jour (et alors tu ne peux pas profiter des dernière nouveautés du premier logiciel) soit tu mets à jour en cassant le deuxième logiciel. Comme les logiciels pointent vers les bibliothèques exactes avec lesquelles ils ont été compilés, dans Guix tu peux mettre à jour le premier logiciel, et il utilisera la nouvelle version de la bibliothèque, alors que le deuxième logiciel continuera d'utiliser l'ancienne.
C'est ce que j'essaye d'expliquer dans la première partie de cette présentation : https://replay.jres.org/videos/watch/c77b3a44-b75f-4c10-9f39-8fb55ae096d7 (et hop, de l'auto-promotion :p). Je suis pas forcément très doué pour ça, mais avec des images, ça devrait aider un peu à la compréhension :)
[^] # Re: Mal connaître sa distribution
Posté par roptat . En réponse à la dépêche Guix : un outil pour les remplacer tous. Évalué à 6.
Je crois qu'il y a un malentendu. Guix en général ne propose qu'une version de chaque logiciel qu'il propose (sauf par exemple gcc, python et d'autres outils du même genre). En revanche, Guix te permet de créer tes propres paquets (tu me diras, comme n'importe quelle distro, et tu auras raison). Je ne connais pas ta distribution, mais en général, les paquets sont installés dans des répertoires globaux (/usr, /lib, /bin, etc) ce qui fait que tu ne peux pas avoir un libpng.so qui soit en version 1.2 et un autre libpng.so en version 1.6 (tu auras libpng.so et libpng12.so par exemple). Comme guix installe chaque paquet séparément, tu peux avoir plusieurs variantes de libpng.so qui cohabitent.
Pour éviter qu'un logiciel compilé avec libpng 1.6 ne trouve libpng 1.2 (et plante), Guix s'assure que ce logiciel ne pourra trouver que la version 1.6 en lui passant le chemin direct vers la bibliothèque (et pas juste son nom) via le mécanisme de RPath pour les fichiers exécutables ELF par exemple. De cette manière, je peux installer une visionneuse avec libpng 1.6 et un autre logiciel avec libpng 1.2. Les deux vivent ensemble sans problème. Je pourrais aussi avoir un libpng 1.6 avec la prise en charge du format apng, et un autre libpng 1.6 sans cette prise en charge par exemple, utilisés par des logiciels différents (bon là c'est tiré par les cheveux).
Un autre exemple, c'est la mise à jour : si j'ai deux logiciels qui dépendent d'une bibliothèque et qu'il y a un changement d'API dans la nouvelle version de cette bibliothèque. La nouvelle version du premier premier prend ça en compte et n'est plus compatible avec l'ancienne bibliothèque, alors que le deuxième n'a pas sortie de version compatible. Sur une distribution classique, tu as un problème : soit tu ne mets rien à jour (et alors tu ne peux pas profiter des dernière nouveautés du premier logiciel) soit tu mets à jour en cassant le deuxième logiciel. Comme les logiciels pointent vers les bibliothèques exactes avec lesquelles ils ont été compilés, dans Guix tu peux mettre à jour le premier logiciel, et il utilisera la nouvelle version de la bibliothèque, alors que le deuxième logiciel continuera d'utiliser l'ancienne.
C'est ce que j'essaye d'expliquer dans la première partie de cette présentation : https://replay.jres.org/videos/watch/c77b3a44-b75f-4c10-9f39-8fb55ae096d7 (et hop, de l'auto-promotion :p). Je suis pas forcément très doué pour ça, mais avec des images, ça devrait aider un peu à la compréhension :)