Paquets : Snap, Flatpak, AppImage et les autres

Il faut savoir que le système Linux est précurseur dans ce qui se fait aujourd’hui, la gestion des dépôts et des paquets. C’est un système équivalent sous Android ou sous iOS, un système qu’a voulu imposer Microsoft sans succès. Nous allons partir du système Windows pour comprendre.

Principe des exécutables et des paquets

Sous Windows, si vous désirez installer un logiciel, nous allons prendre le cas de LibreOffice, vous allez sur le site internet, vous téléchargez l’exécutable et vous l’installez sur le PC. Le système présente un avantage évident, vous téléchargez ce que vous voulez sur votre ordinateur, et vous l’installez facilement. Le pendant nécessairement, c’est que si vous pouvez installer ce que vous voulez, vous pouvez avec autant de facilité installer un virus. C’est le gros point noir d’un point de vue sécuritaire pour Windows. Microsoft essaie depuis des années d’installer le Microsoft Store, mais comme évoqué plus haut, sans succès.

Le Microsoft Store

Ici tous les logiciels sont sécurisés, fiables, puisque vous le téléchargez non pas d’un site tiers, mais depuis le site de Microsoft. On va dire que vous téléchargez des paquets depuis les dépôts de Microsoft. L’intérêt est immédiat, les logiciels sont mis à jour de façon sécurisée et régulière. Pour LibreOffice par exemple, si vous voulez mettre le logiciel à jour vous devez le faire manuellement. Dans le cas d’un logiciel présent dans le dépôt, la mise à jour est automatique. Le problème, c’est que tous les logiciels ne sont pas disponibles et parfois ils sont mêmes payants comme c’est le cas pour LibreOffice.

On comprend alors l’échec. Les gens sont habitués sous Windows à télécharger ce qu’ils veulent où ils veulent. Si vous n’avez pas tous les logiciels présents, et que vous devez payer certains logiciels gratuits, c’est sans intérêt.

Le fonctionnement par paquets pour Android

Sous Microsoft cela ne fonctionne pas, car ce n’est pas une habitude chez les utilisateurs. Quand le système est fait de cette façon par défaut, c’est une logique d’utilisation. Par exemple sous Android, si vous voulez télécharger une application, vous le faites depuis le play store de Google. Nous sommes dans une logique inverse à celle de Windows, vous n’avez pas le choix d’installer ce que vous voulez. Il est toutefois possible de contourner le système en autorisant les sources extérieures.

Autoriser les sources inconnues

On est donc dans une situation presque à l’opposée de celle de Windows, pour installer un programme extérieur, il faut l’autoriser. Bien évidemment, Android vous informe que vous prenez des risques, il faut toutefois modérer le propos. D’une part le Google Play Store est truffé de logiciels dangereux qui ne sont pas retirés par Google. D’autre part, cette possibilité vous permet par exemple d’installer F-Droid qui est un magasin « sain » d’applications.

Il faut savoir que qu’Android est une base Linux et que ce système n’a pas été inventé par Google, mais c’est le principe de base de fonctionnement de Linux.

Le paquet selon la distribution Linux

Dans un article j’avais expliqué le principe de construction des distributions Linux. Une série de briques qui s’assemblent pour former un ensemble.

J’utilise la distribution Xubuntu qui est une distribution dérivée d’Ubuntu. La distribution Ubuntu est elle-même une distribution dérivée de Debian. Pour se rendre compte de l’importance de Debian dans l’univers Linux, voici son arbre et ses descendances.

L’arbre de Debian

Toutes les distributions Linux basées sur Debian sont construites avec des paquets deb. Parallèlement à cela il existe d’autres distributions comme OpenSuse ou encore la française Mandriva. Ces distributions sont basées sur des briques en rpm. Bien sûr, les deb et les rpm, c’est comme les Duplo et les Lego, ça ne se mélange pas.

Va se poser un problème évident pour tous les développeurs. La segmentation est très importante, chaque développeur va devoir faire un paquet par type de distribution. La compatibilité ne s’arrête pas à ce problème de rpm ou de deb mais va plus loin. Par exemple la différence entre Debian et Ubuntu, c’est que Debian est en retard dans ses versions de paquets par rapport à Ubuntu. Ubuntu s’appuie sur une version instable de Debian. Ainsi, une même application devra se décliner pour Ubuntu et pour Debian. En effet, les versions de paquets présentes sur les deux distributions ne sont pas les mêmes, celles de Debian sont plus vieilles que sur Ubuntu ce qui peut créer des soucis de compatibilité.

Pour un développeur, c’est donc très compliqué de faire fonctionner son programme qu’il doit décliner en plusieurs versions. Sur Windows, c’est un exécutable unique. On comprend que le travail à mener est important, et qu’il faut tenir compte de chaque spécificité y compris pour les rapports d’anomalies.

Un besoin de paquet universel

Cette segmentation est donc problématique, car elle consomme de nombreuses ressources. Le temps employé à multiplier les paquets à corriger des bugs propres à chaque distribution pourrait être utilisé pour améliorer le programme. Ce problème fait partie des soucis bien connus chez Linux, si bien qu’on a prévu de faire des paquets universels.

Le principe de brique a un gros avantage par rapport au système Windows, cette force est aussi à l’origine de sa faiblesse. Pour Windows, les programmes sont lourds, car ils emportent avec eux un ensemble de bibliothèques, des tas de briques. Dans le système de briques Linux, la brique du programme que vous installez, utilise les briques déjà présentes.

Avantages et désavantages inhérents à ce système : Les briques présentes sur le système sont les mêmes pour tout le monde. Elles sont contrôlées, sécurisées, par des personnes responsables de ces briques. Le problème, c’est que forcément, il faut que le programme que vous installez soit compatible avec ces briques, ce qui nous amène à la situation évoquée plus haut. Pour Microsoft par exemple, vous pouvez avoir plusieurs versions de la même bibliothèque et donc les problèmes qui vont avec, notamment en matière de sécurité. La brique programme que vous installez est nécessairement plus légère puisqu’elle n’embarque pas avec elle toutes les briques.

Pour répondre à cette universalité, la seule façon de s’en sortir c’est de faire comme dans le système de Microsoft et d’embarquer toutes les briques avec le programme.

Encore un manque d’union chez les développeurs.

Le principe de l’universalité, c’est d’être universel, sauf qu’ici encore les développeurs Linux reproduisent les mêmes erreurs. Alors qu’on devrait s’attendre à un système de paquet unique, on en récupère trois différents.

  • Le snap. Il s’agit d’un système développé par Canonical, la société qui est à l’origine de la distribution Ubuntu. Ubuntu fait partie des distributions les plus utilisées, on comprend donc l’importance du système. Ubuntu par exemple est la distribution qui est installée sur les serveurs qui hébergent WikiPédia
  • Le Flatpak développé par la société Red Hat.
  • L’AppImage

Pour avoir des détails techniques, je vous invite à lire ces deux articles : Paquets AppImage, Snap et Flatpak : quels avantages, inconvénients et différences ? et AppImage, FlatPak et Snap – Systèmes de virtualisation d’Applications pour GNU/Linux

Plutôt que de rentrer dans les détails techniques, voici mon problème en tant qu’utilisateur final.

Trois LibreOffice

Si vous regardez bien, vous avez deux LibreOffice non installés sur mon PC. Il s’agit de la version Flatpak et de la version Snap. J’ai installé sur mon PC la version deb disponible. Pourquoi ce choix ? Les paquets installés sont plus vieux, 7.2.3.2. La version Snap c’est 7.2.4.1. C’est le « problème » des deb ou des rpm, ils sont mis à jour uniquement quand la distribution est mise à jour ou en cas de faille de sécurité. Ubuntu est mise à jour tous les six mois. Pourquoi utiliser une version plus ancienne dès lors ?

Les Snap, les Flatpak ou les AppImage sont beaucoup plus lents et beaucoup plus lourds. C’est une logique, comme ils embarquent toutes les briques, et n’utilisent pas celles du système, c’est plus lent. Dans le cas particulier de LibreOffice, j’ai une extension dmaths qui n’est pas gratuite et disponible dans les paquets deb gratuitement. J’utilise donc les paquets de ma distribution principalement parce que c’est plus rapide

Un problème de Lisibilité qui doit se résoudre… un jour

Comme on l’a compris, le problème de segmentation n’est pas près d’être résolu néanmoins on voit des positionnements dans le monde Linux. Par exemple, la distribution Ubuntu fait le choix de Snap et troque de plus en plus de paquets deb contre des paquets Snap. On peut citer VLC le player vidéo. Sur le site américain It’s FOSS, on explique comment installer le deb en modifiant le système, car le Snap est considéré comme trop lent. La distribution Linux Mint très connue et basée elle-même sur Ubuntu a fait le choix de supprimer Snap.

Il est à noter que quelle que soit la distribution, vous avez la possibilité d’installer Snap ou Flatpak, il y a un intérêt. En effet, certains programmes ne sont disponibles qu’en Flatpak ou en Snap. Finalement ce qui pourrait apparaître comme un choix, ne l’est pas vraiment.

Pour ma part, je suis de retour sous Linux depuis quelques mois. En prenant Xubuntu, j’ai fait le choix de la facilité, une distribution que j’ai utilisée pendant longtemps. Toutefois, il apparaît que le système d’empaquetage Snap ne m’apporte rien et qu’il est au contraire, plus une source de problème (lenteur) que de bonus. Les distributions Linux ne manquent pas, je pourrais me tourner vers une autre qui n’utiliserait pas ce système.

On peut considérer cet écosystème comme trop important, trop large, notamment quand on voit le diagramme ci-dessus. Néanmoins, c’est cette variété qui permet de pouvoir changer sans subir. Si vous prenez Windows 11 vous n’avez pas d’autre possibilité, chez Linux, vous en avez par dizaines.