Re: Appimage Vs Snap Vs Compilation des sources
Bonjour,
Alex PADOLY a écrit :
> Quelle est l'utilité de SNAP?
> Je trouve que Debian gère très bien les paquets.
Grosso modo, le déploiement d'une application peut s'envisager de deux
manières bien différentes :
* Déploiement intégré (au système hôte) : l'application a été conçue et
compilée pour fonctionner avec les bibliothèques disponibles
nativement sur le système hôte. Dans ce cas, le « paquet » de
l'application ne fournit que l'application et les ressources externes
associées (documentation, fichiers de configuration, icônes et autres
ressources multimédia spécifiques).
* Déploiement autoportant : l'objectif est de rendre le plus possible
l'application indépendante du système hôte, de s'approcher d'un
fonctionnement en vase clos. En plus des ressources précédemment
évoquées, le paquet fournit alors l'ensemble des bibliothèques dont
dépend l'application, dans la version prévue par le développeur de
l'application.
En schématisant un peu, la première approche est l'approche historique
des systèmes Unix, la seconde, est celle de macOS et, dans une moindre
mesure, de MS-Windows. C'est aussi celle des conteneurs plus ou moins
cloisonnés que sont FlatPak, AppImage, Snap et Docker.
Chacune des approches a des avantages et inconvénients, différents (ou
plus ou moins prégnants) selon qu'on est développeur de l'application,
administrateur du système ou utilisateur de l'application.
Pour l'administrateur :
* Le déploiement intégré facilite la maintenance du système et réduit
les ressources requises sur disque et en RAM. En mettant à jour la
bibliothèque lorsqu'un bogue ou une faille de sécurité est identifié,
on patche d'un coup toutes les applications qui l'utilisent. C'est
idéal du point de vue de la sécurité. Une seule copie de la
bibliothèque est stockée sur le disque et une seule copie est chargée
en mémoire. Le déploiement intégré est donc moins couteux en
ressources matérielles, mais les ressources disponibles augmentant
avec le temps, cet argument porte de moins en moins (sauf, sans doute,
dans l'embarqué). Par contre, si l'ABI de la bibliothèque change,
toutes les applications qui l'utilisent doivent être recompilées et un
nouveau paquet doit être publié pour chacune d'entre elles. La
propagation des corrections peut de ce fait être ralentie.
* Le déploiement autoportant fait que la mise à jour du système est sans
effet sur l'application. Celle-ci, ou plutôt son paquet, doit faire
l'objet d'une mise à jour spécifique. La mise à disposition d'une
nouvelle version d'un paquet dépend de la réactivité des mainteneurs
de l'application. La sécurisation du système est donc progressive.
Pour l'administrateur et du point de vue de la sécurité, c'est un
cauchemar. Ce problème est cependant contrebalancé par le
cloisonnement qu'opèrent les conteneurs. S'il est strict et propre,
l'application n'a qu'un accès limité au système. Les failles de
sécurité dont elle souffre ont donc un pouvoir de nuisance limité.
Quelle stratégie l'emporte auprès des administrateurs ? Pour l'instant,
aucune, même si on sent bien que le vent change et que le déploiement
autoportant est en train de gagner des adeptes (pas grâce à Snap,
FlatPak ou AppImage, mais grâce aux véritables conteneurs que sont
Docker et consors).
Pour le développeur :
* Le déploiement intégré est un fardeau qui lui prend une énergie
considérable et l'empêche de se concentrer sur des fonctions utiles et
des tâches plus motivantes. En effet, le développeur n'est pas libre
d'utiliser la version qui lui plait d'une bibliothèque, mais celle
disponible sur l'environnement cible. Lorsque les environnements
cibles se multiplient, les versions aussi. Et ce n'est pas qu'un
problème de plateforme GNU/Linux ou MS-Windows ou macOS. La version de
la bibliothèque mise à disposition diffère selon la distribution
(Debian, Mint, Alma, Manjaro, OpenSuse…), selon la version de cette
distribution (Debian Bullseye, Bookworm ou Trixie), selon que le
système est mis à jour six fois par jour ou une fois par semestre,
selon qu'il est déployé sur une plateforme Intel ou ARM. L'API, les
fonctions offertes, les performances, les bogues ne sont donc pas les
mêmes d'un environnement à l'autre. Et je ne parle même pas des
options de compilation choisies par les mainteneurs. En outre, une
application dépend en général de plusieurs bibliothèques, au point
qu'il devient « impossible » de trouver un socle commun à tous les
environnements.
Le développeur doit s'interdire d'utiliser les versions trop récentes
des bibliothèques, dont les fonctions qui lui font de l'œil et
pourraient résoudre efficacement ses problèmes. C'est frustrant.
Lorsqu'un utilisateur lui signale un bogue, le développeur doit
précisément caractériser son environnement, puis réussir à reproduire
cet environnement s'il ne reproduit pas le bogue dans son
environnement de travail habituel. C'est usant. J'ai eu de nombreux
témoignages directs à ce sujet et je connais plus d'un projet qui
a cessé de supporter certains environnements pour réduire la charge
sur les mainteneurs.
* Il ne faut donc pas s'étonner que de plus en plus de projets décident
de s'émanciper, qu'ils créent dans un conteneur un environnement
parfaitement maitrisé par eux et autoportant, et qu'ils déclarent ne
supporter que les déploiements effectués via ce conteneur (c'est par
exemple le cas de Discourse). Le déploiement autoportant engendre
cependant de nouvelles responsabilités pour les développeurs de
l'application. Puisqu'ils ont créé l'environnement, ils en deviennent
responsables. Il leur incombe d'assurer la veille technologique et
sécuritaire sur les composants qu'ils utilisent, et de fournir dans
les meilleurs délais des versions corrigeant les problèmes.
Un déploiement qui s'abstrait des contraintes du système, c'est aussi
ce que recherchent les développeurs Python avec leurs « virtual
envs », mais c'est aussi ce qu'apprécient les développeurs Rust et Go.
Et là, on ne parle même pas de Snap ou de Docker.
Je pense que de plus en plus de développeurs parmi ceux qui veulent que
leur application fonctionne « partout » vont succomber au charme des
déploiements autoportants.
Pour l'utilisateur :
* Il est bien souvent administrateur de son propre poste ; ce que j'ai
dit pour l'administrateur vaut en partie pour l'utilisateur.
* Mais de manière générale, un simple utilisateur est cependant moins
sensible aux questions de sécurité. Son besoin n'est pas d'assurer
l'intégrité d'un système, mais la production d'un document, la
réalisation d'une tâche, au moyen d'un ou plusieurs logiciels. Cet
utilisateur peut être frustré de ne disposer que d'une version
antédiluvienne de son outil préféré dans les dépôts natifs de sa
distribution. S'il apprend qu'une version bien plus récente de l'outil
est disponible dans un dépôt tiers ou via un paquet Snap ou AppImage,
il hésitera rarement à s'approvisionner par ce biais.
L'utilisateur n'a guère conscience des enjeux et il est seulement
intéressé par la satisfaction de ses besoins, ce qui se comprend (j'ai
moi-même ce comportement dans beaucoup d'autres domaines, par exemple,
avec ma voiture : la seule chose qui m'intéresse est qu'elle fonctionne
et m'emmène à bon port, je prends rendez-vous au garage pour l'entretien
et je paie, le reste, c'est le problème du garagiste, pas le mien).
Au final, quoi qu'on en pense, je suis persuadé que l'approche
déploiement autoportant / conteneur va finir par l'emporter et qu'un
jour où l'autre, notre système d'exploitation se résumera à un socle
minimaliste faisant tourner peu ou prou tous nos outils dans autant de
conteneurs à la porosité minimale. Il me semble que c'est la voie que
proposent déjà les distributions Ubuntu Core et Zorin OS.
Sébastien
--
Sébastien Dinot, sebastien.dinot@free.fr
https://www.palabritudes.net/
Ne goutez pas au logiciel libre, vous ne pourriez plus vous en passer !
Reply to: