Snap (gestionnaire de paquet)

Un article de Wikipédia, l'encyclopédie libre.

Snap est un système d'empaquetage et de déploiement de logiciels développé par Canonical pour les systèmes d'exploitation utilisant le noyau Linux. Les paquets, appelés snaps, et l'outil pour les utiliser, snapd, fonctionnent sur une gamme de distributions Linux[réf. nécessaire] et permettent aux développeurs de logiciels de distribuer leurs applications directement aux utilisateurs. Les snaps sont des applications autonomes qui s'exécutent dans un bac à sable avec un accès modéré au système hôte. Snap a été initialement publié pour les applications cloud, mais a ensuite été porté afin de fonctionner pour les périphériques Internet des objets ainsi que les applications de bureau[1],[2],[3],[4],[5].

Fonctionnalités[modifier | modifier le code]

Snap Store[modifier | modifier le code]

Le Snap Store permet aux développeurs de publier leurs applications directement auprès des utilisateurs[6]. Avec les approches traditionnelles de gestion des packages Linux comme APT ou YUM, les applications sont empaquetées et distribuées dans le cadre du système d'exploitation. Cela crée un délai entre le développement de l'application et son déploiement pour les utilisateurs finaux[7],[8]. En revanche, les développeurs d'applications peuvent publier leurs applications dans le Snap Store et les transmettre directement aux utilisateurs sans aucune intervention des responsables de la distribution.

Toutes les applications téléchargées sur le Snap Store subissent des tests automatiques, y compris une analyse des logiciels malveillants. Cependant, les applications Snap ne reçoivent pas le même niveau de vérification que les logiciels dans les archives Ubuntu normales. Dans un cas, en mai 2018, deux applications du même développeur se sont avérées contenir un mineur de crypto-monnaie qui s'exécutait en arrière-plan pendant l'exécution de l'application. Lorsque ce problème a été détecté, Canonical a supprimé les applications du Snap Store et transféré la propriété des Snaps à un tiers de confiance qui a republié les Snaps sans la présence du mineur[9],[10],[11]. Bien que le bac à sable Snap réduise l'impact d'une application malveillante, Canonical recommande aux utilisateurs d'installer uniquement des Snaps provenant d'éditeurs approuvés par l'utilisateur[12],[13].

Étant donné que les packages du Snap Store sont gérés par les développeurs eux-mêmes, les responsables de la distribution ne peuvent pas garantir que les packages répondent aux normes de qualité et sont mis à jour en temps opportun. Dans un cas, Microsoft a laissé une version obsolète de Skype dans le magasin Snapcraft pendant plus d'un an[14].

Bien que le Snap Store de Canonical soit actuellement le seul magasin existant pour les snaps, Snap lui-même peut être utilisé sans magasin. Les packages Snap peuvent être obtenus à partir de n'importe quelle source, y compris le site Web d'un développeur. L'employé de Red Hat, Adam Williamson, et le chef de projet Linux Mint, Clement Lefebre, ont critiqué Canonical pour avoir gardé certaines parties côté serveur du Snap Store fermées[15]. Clement déclare que cela crée un conflit d'intérêts qui nuit à la neutralité de Snap étant donné que Canonical développe Ubuntu[16].

Paquets Linux universels[modifier | modifier le code]

Les Snaps sont des paquets autonomes qui fonctionnent sur une gamme de distributions Linux . Ceci est différent des approches traditionnelles de gestion de packages Linux, qui nécessitent des packages spécifiquement adaptés pour chaque distribution Linux[17],[18].

Le format de fichier snap est un système de fichiers compressé unique utilisant le format SquashFS avec l'extension .snap . Ce système de fichiers contient l'application, les bibliothèques dont elle dépend et les métadonnées déclaratives. Ces métadonnées sont interprétées par snapd pour configurer un bac à sable sécurisé adapté au fonctionnement de l'application. Après l'installation, le snap est monté par le système d'exploitation hôte et décompressé à la volée lorsque les fichiers sont utilisés. [19],[20] Bien que cela présente l'avantage que les snaps utilisent moins d'espace disque, cela signifie également que certaines applications volumineuses démarrent plus lentement[21].

Une différence significative entre Snap et d'autres formats d'empaquetage Linux universels tels que Flatpak est que Snap prend en charge toutes les classes d'applications Linux telles que les applications de bureau, les outils serveur, les applications IoT et même les services système tels que la pile de pilotes d'imprimante[6],[22],[23]. Pour s'en assurer, Snap s'appuie sur systemd pour des fonctionnalités telles que l'exécution de services système activés par socket dans un Snap. [24] Cela fait que Snap ne fonctionne mieux que sur les distributions qui peuvent adopter ce système d'initialisation[25].

Bac à sable configurable[modifier | modifier le code]

Les applications dans un Snap s'exécutent dans un conteneur avec un accès limité au système hôte. À l'aide d'interfaces, les utilisateurs peuvent donner à une application un accès modéré à des fonctionnalités supplémentaires de l'hôte, telles que l'enregistrement audio, l'accès aux périphériques USB et l'enregistrement vidéo[26],[27],[28]. Ces interfaces servent de médiateur pour les API Linux habituelles afin que les applications puissent fonctionner dans le bac à sable sans avoir besoin d'être réécrites. Les applications de bureau peuvent également utiliser les portails de bureau XDG, une API standardisée créée à l'origine par le projet Flatpak pour permettre aux applications de bureau en bac à sable d'accéder aux ressources de l'hôte[29],[30]. Ces portails offrent souvent une meilleure expérience utilisateur par rapport aux API Linux natives, car ils demandent à l'utilisateur l'autorisation d'accéder à des ressources telles qu'une webcam au moment où l'application les utilise. L'inconvénient est que les applications et les boîtes à outils doivent être réécrites afin d'utiliser ces nouvelles API.

Le bac à sable Snap prend également en charge le partage de données et de sockets Unix entre Snaps. [31] Ceci est souvent utilisé pour partager des bibliothèques communes et des frameworks d'applications entre Snaps afin de réduire la taille des Snaps en évitant la duplication[32],[33].

Le bac à sable Snap s'appuie fortement sur le module de sécurité AppArmor du noyau Linux. Étant donné qu'un seul module de sécurité Linux (LSM) « majeur » peut être actif en même temps, le bac à sable Snap est beaucoup moins sécurisé lorsqu'un autre LSM majeur est activé. Par conséquent, sur des distributions telles que Fedora qui activent SELinux par défaut, le bac à sable Snap est fortement dégradé. Bien que Canonical travaille avec de nombreux autres développeurs et entreprises pour permettre l'exécution simultanée de plusieurs LSM, cette solution n'est pas encore opérationnelle[34],[35],[36].

Le bac à sable Snap empêche les applications de bureau d'accéder aux thèmes du système d'exploitation hôte pour éviter les problèmes de compatibilité. Pour que les Snaps utilisent un thème, ils doivent également être emballés dans un Snap séparé. De nombreux thèmes populaires sont emballés par les développeurs de Snap [37] mais certains thèmes ne sont pas encore pris en charge [38] et les thèmes peu communs doivent être installés manuellement. Si un thème n'est pas disponible en tant que package Snap, les utilisateurs doivent choisir le meilleur thème correspondant disponible[39]. Des travaux sont en cours pour permettre à des tiers de regrouper plus facilement des thèmes dans un Snap et d'installer automatiquement des thèmes système inhabituels[40].

Mises à jour automatiques et atomiques[modifier | modifier le code]

Plusieurs fois par jour, snapd vérifie les mises à jour disponibles de tous les Snaps et les installe en arrière-plan à l'aide d'une opération atomique . Les mises à jour peuvent être annulées [41],[42] et utilisent l'encodage delta pour réduire leur taille de téléchargement[43],[44],[45].

Les éditeurs peuvent publier et mettre à jour plusieurs versions de leur logiciel en parallèle à l'aide de canaux (channels). Chaque canal a une piste (track) et un risque (risk) spécifiques, qui indiquent la version et la stabilité du logiciel publié sur ce canal. Lors de l'installation d'une application, Snap utilise par défaut le canal latest/stable, qui se mettra automatiquement à jour vers les nouvelles versions majeures du logiciel lorsqu'elles seront disponibles. Les éditeurs peuvent créer des canaux supplémentaires pour donner aux utilisateurs la possibilité de se fixer sur des versions majeures spécifiques de leur logiciel. Par exemple, un 2.0/stable permettrait aux utilisateurs de s'en tenir à la version 2.0 du logiciel et d'obtenir uniquement des mises à jour mineures sans risque de modifications rétrocompatibles. Lorsque l'éditeur publie une nouvelle version majeure dans un nouveau canal, les utilisateurs peuvent passer manuellement à la version suivante lorsqu'ils le souhaitent[46],[47],[48],[20].

Bien que les mises à jour automatiques ne puissent pas être désactivées, il existe de nombreuses façons de configurer les mises à jour pour répondre à des besoins particuliers. L'utilisateur peut choisir de rester sur une version majeure spécifique du logiciel en spécifiant le canal, il peut configurer l'intervalle de mise à jour pour avoir le temps de vérifier manuellement les mises à jour, et il peut suspendre les mises à jour jusqu'à 60 jours. De plus, les mises à jour sont également automatiquement désactivées sur les connexions limitées[49],[50]. Même avec ces contrôles, un certain nombre d'utilisateurs se sont plaints de l'absence d'option permettant de désactiver complètement les mises à jour automatiques[51].

Snapcraft[modifier | modifier le code]

Snapcraft est un outil permettant aux développeurs d'empaqueter leurs programmes au format Snap[52]. Il fonctionne sur n'importe quelle distribution Linux prise en charge par Snap, macOS et Microsoft Windows[53]. Snapcraft construit les packages dans une machine virtuelle en utilisant Multipass[54], afin de s'assurer que le résultat d'une construction est le même, quel que soit la distribution ou le système d'exploitation sur lequel il est construit[55]. Snapcraft prend en charge un grand nombre d'outils de construction et de langages de programmation tels que Go, Java, JavaScript, Python, C / C++ et Rust . Il permet également d'importer des métadonnées d'application à partir de plusieurs sources telles qu'AppStream, git, des scripts shell et des fichiers setup.py [56],[57].

Adoption[modifier | modifier le code]

Au départ, Snap ne prenait en charge que la distribution all-Snap Ubuntu Core, mais en juin 2016, il a été porté sur un large éventail de distributions Linux pour devenir un format pour les packages Linux universels[58]. Snap nécessite une fonctionnalité (systemd), disponible sous Linux, certains autres systèmes de type Unix n'en ont pas, donc par exemple FreeBSD n'a pas Snap. Chrome OS ne prend pas en charge Snap directement, uniquement via les distributions Linux installées qui prennent en charge Snap, telles que Gallium OS[59] .

Un certain nombre de distributions Linux prennent en charge Snap nativement, comme Ubuntu (et par exemple Kubuntu)[60], Manjaro[61], Zorin OS[62], KDE Neon[63], Solus [64] et Li-fe[65]. Snap est également disponible pour de nombreuses autres distributions telles que CentOS, Debian, Elementary OS, Fedora, GalliumOS, Kali Linux, Linux Mint, OpenEmbedded, Parrot Security OS, Pop! OS, Raspbian, Red Hat Enterprise Linux et openSUSE[66] .

Un certain nombre de sociétés de développement de logiciels de bureau publient leurs logiciels dans le Snap Store, notamment Google[67], JetBrains[68], KDE[69], Microsoft (pour les versions Linux de par exemple .NET Core 3.1, Visual Studio Code, Skype[70], et PowerShell), Mozilla [71] et Spotify[72]. Les Snaps sont également utilisés dans les environnements Internet des objets, allant des produits destinés aux consommateurs[73] aux passerelles de gestion des appareils d'entreprise [74] et aux réseaux de communication par satellite[75],[76]. Enfin, Snap est également utilisé par les développeurs d'applications serveur telles que InfluxDB[77], Kata Containers[78], Nextcloud [79] et Travis CI[80] .

En 2019, Canonical a décidé de faire passer le navigateur Web Chromium dans les futures versions d'Ubuntu d'un package APT à un Snap. Ils ont expliqué que Snap rendait beaucoup plus facile la prise en charge de Chromium sur toutes les versions d'Ubuntu prises en charge. Cela leur a permis de concentrer les ressources d'ingénierie sur d'autres parties d'Ubuntu[81],[6]. À la suite de cette décision, les dérivés d'Ubuntu tels que Linux Mint ont dû choisir entre conserver leur propre version du package Chromium ou passer à la version snappée de Chromium maintenue par Canonical. Clement Lefebre, fondateur et chef de projet de Linux Mint[82] a mentionné cela comme la raison pour laquelle Linux Mint 20 empêche les utilisateurs d'installer Snap[83]. Étant donné que Snap est toujours disponible dans les référentiels Linux Mint, les utilisateurs peuvent toujours l'installer après avoir supprimé manuellement les restrictions[84].

Notes et références[modifier | modifier le code]

(en) Cet article est partiellement ou en totalité issu de la page de Wikipédia en anglais intitulée « Snap (package manager) » (voir la liste des auteurs).

  1. Shuttleworth, « Announcing Ubuntu Core, with snappy transactional updates! », (consulté le )
  2. « Ubuntu Core and Snappy [LWN.net] », lwn.net (consulté le )
  3. « Canonical unveils Snappy Ubuntu Core, a lightweight operating system for your home - ExtremeTech », www.extremetech.com (consulté le )
  4. (en) Bhartiya, « Is Ubuntu moving away from .deb packages? Here is the complete story », CIO, (consulté le )
  5. (en) Vaughan-Nichols, « The future of Linux desktop application delivery is Flatpak and Snap », ZDNet (consulté le )
  6. a b et c (en) S, August 6, 2019 et Pst, « Why Canonical views the Snap ecosystem as a compelling distribution-agnostic solution », TechRepublic (consulté le )
  7. Upgrading packaged Ubuntu application unreasonably involves upgrading entire OS Bug #578045 on bugs.launchpad.net/ubuntu by John King (2010-05-10)
  8. Linus Torvalds on the problems of distro packaging Linus Torvalds on DebConf 2014
  9. « How Canonical Is Improving Ubuntu Linux Security », eWEEK (consulté le )
  10. (en-GB) « Malware Found on the Ubuntu Snap Store », OMG! Ubuntu!, (consulté le )
  11. (en) Canonical, « Trust and security in the Snap Store », Snapcraft, (consulté le )
  12. (en) « Packages for Ubuntu », Ubuntu (consulté le )
  13. (en-US) « Bogus apps in store », snapcraft.io, (consulté le )
  14. (en-GB) « Hey Microsoft, why is the Skype Snap app hopelessly outdated? », OMG! Ubuntu!, (consulté le )
  15. « On Snappy and Flatpak: business as usual in the Canonical propaganda department », Happyassassin (consulté le )
  16. « Monthly News – June 2019 », blog.linuxmint.com (consulté le )
  17. (en) June 21, 2016 et Pst, « Canonical changes the game by announcing universal snap packages », TechRepublic (consulté le )
  18. (en) Kepes, « Snap! Do the Linux distros finally agree on something? », Computerworld, (consulté le )
  19. (en-US) ReadySpace, « A technical comparison between the snap and the Flatpak formats », ReadySpace Indonesia, (consulté le )
  20. a et b (en-US) McKay, « How to Work with Snap Packages on Linux », How-To Geek (consulté le )
  21. (en-US) « Squashfs performance effect on snap startup time », snapcraft.io, (consulté le )
  22. (en-US) « Call for testing: OpenPrinting's printing-stack-snap (Printing in a Snap) », snapcraft.io, (consulté le )
  23. « Canonical unveils 6th LTS release of Ubuntu with 16.04 », Ubuntu Insights, Canonical Ltd. (consulté le )
  24. « Services and daemons »
  25. (en) « WSL2- Ubuntu 20.04 Snap store doesn't work due to systemd dependency · Issue #5126 · microsoft/WSL », GitHub (consulté le )
  26. (en) « Supported interfaces | Snapcraft documentation », Snapcraft (consulté le )
  27. (zh-Hans) ReadySpace, « Snapcraft confinement & interfaces », ReadySpace China, (consulté le )
  28. (en-US) ReadySpace, « A guide to snap permissions and interfaces », ReadySpace Hong Kong, (consulté le )
  29. « Flatpak's XDG-Desktop-Portal Adds Initial Support For Snaps - Phoronix », www.phoronix.com (consulté le )
  30. « Desktop Integration — Flatpak documentation », docs.flatpak.org (consulté le )
  31. (en) « The content interface », Snapcraft (consulté le )
  32. (en-GB) « Snappy Is Finally Doing Something About Super Large App Sizes », OMG! Ubuntu!, (consulté le )
  33. (en) « Bundling KDE », archive.fosdem.org (consulté le )
  34. (en-US) « How Are SNAPS claiming to have no internet plug regulated? », snapcraft.io, (consulté le )
  35. « LSM stacking and the future [LWN.net] », lwn.net (consulté le )
  36. Johansen, « Containers with Different Security Modules »,
  37. (en-US) « How to use the system GTK theme via the gtk-common-themes snap », snapcraft.io, (consulté le )
  38. « Kubuntu 20.04 LTS Review | ORDINATECHNIC », www.ordinatechnic.com (consulté le )
  39. (en-GB) « How to Change Snap App Theme on Ubuntu (With Examples) », OMG! Ubuntu!, (consulté le )
  40. (en-US) « Automatic theme snap installation notes », snapcraft.io, (consulté le )
  41. (en-US) « How to revert to a previous version of a snap package? wekan in this case », costales.github.io, (consulté le )
  42. (en-US) « A Beginners Guide to Snaps in Linux - Part 1 », www.tecmint.com (consulté le )
  43. « Snapcraft - Snaps are universal Linux packages », Snapcraft
  44. « Ubuntu Core and Snappy [LWN.net] », sur lwn.net (consulté le )
  45. Vaughan-Nichols, « Ubuntu Snap takes charge of Linux desktop and IoT software distribution », ZDNet
  46. (en) « Controlling snap releases with channels, tracks and branches – Part 1 », Ubuntu (consulté le )
  47. (en) « Controlling snap releases with channels, tracks and branches – Part 2 », Ubuntu (consulté le )
  48. (en-US) Prakash, « Using Snap Packages In Ubuntu & Other Linux [Complete Guide] » (consulté le )
  49. (en-US) Logix, « How To Change Snap Refresh (Update) Schedule », Linux Uprising Blog (consulté le )
  50. Pope, « Controlling Snap Updates »,
  51. « Disabling automatic refresh for snap from store » (consulté le )
  52. (en-US) Jon Brodkin, « Adios apt and yum? Ubuntu’s snap apps are coming to distros everywhere », sur Ars Technica, (consulté le )
  53. (en) Nestor, « Ubuntu's Snapcraft Snap Creator Tool Will Soon Get a Windows Installer », softpedia (consulté le )
  54. https://snapcraft.io/docs/build-options
  55. (zh-Hans) ReadySpace, « Make your snap development faster », ReadySpace China, (consulté le )
  56. (en) Nestor, « Canonical Releases Snapcraft 3.1 Snap Creator Tool with Various Improvements », softpedia (consulté le )
  57. (en) « Using external metadata | Snapcraft documentation », Snapcraft (consulté le )
  58. (en-US) « Ubuntu’s container-style Snap app packages now work on other Linux distributions », TechCrunch (consulté le )
  59. (en) « Installing snap on GalliumOS | Snapcraft documentation », Snapcraft (consulté le )
  60. (en) Hoffman et PCWorld |, « Ubuntu 16.04 will support 'Snaps' alongside Deb packages for improved software installation », PCWorld, (consulté le )
  61. (en) Evangelho, « Manjaro Linux 18.1 Is Officially Released, And You Have A New Choice To Make », Forbes (consulté le )
  62. (en-US) « And the next version of Zorin OS is… | The official Zorin Blog » (consulté le )
  63. (en-GB) « KDE Neon to Support Snap Apps in Plasma Discover », OMG! Ubuntu!, (consulté le )
  64. (en) Strobl, « Solus 3 Released », Solus (consulté le )
  65. (en) cyberorg, « Li-f-e: Installing more applications », Li-f-e: Linux for Education | Enterprise, (consulté le )
  66. (en) « Installing snapd | Snapcraft documentation », Snapcraft (consulté le )
  67. (en-US) « Google and Canonical bring Flutter apps to Linux and the Snap Store », VentureBeat, (consulté le )
  68. (en-US) « Install IntelliJ IDEA on Ubuntu with Snaps – IntelliJ IDEA Blog | JetBrains », JetBrains Blog (consulté le )
  69. (en-US) « Month of KDE Applications Snaps – KDE neon Developers' Blog » (consulté le )
  70. (en) Vaughan-Nichols, « Use Ubuntu's snap to install Skype on any Linux desktop », ZDNet (consulté le )
  71. (en) Hoffman et PCWorld |, « Mozilla will provide Firefox as a Snap package for Ubuntu, cutting out the middleman », PCWorld, (consulté le )
  72. (en-GB) « Spotify Now Available as a Snap App on Ubuntu », OMG! Ubuntu!, (consulté le )
  73. (en) Steven J. Vaughan-Nichols, « Ubuntu jumps into Internet of Things with Acer, GE, and Microsoft », sur ZDNet (consulté le )
  74. Sherman, « Snappy Core unlocks IoT value within the Dell Edge Gateway 5000 Series », Ubuntu Insights, Canonical Ltd. (consulté le )
  75. « LimeSDR Mini takes off in satellites », LinuxGizmos.com, (consulté le )
  76. (en) « Ubuntu Core 18 released for secure, reliable IoT devices », Ubuntu (consulté le )
  77. (en) « Install influxdb for Linux using the Snap Store », Snapcraft (consulté le )
  78. (en) Nestor, « You Can Now Install Kata Containers VM as a Snap on Ubuntu, Other Linux Distros », softpedia (consulté le )
  79. (en) April 27, 2020 et Pst, « How to install Nextcloud with SSL using snap », TechRepublic (consulté le )
  80. (en) « Install travis-worker for Linux using the Snap Store », Snapcraft (consulté le )
  81. (en) Vaughan-Nichols, « Ubuntu opens the door to talking with Linux Mint about Snap », ZDNet (consulté le )
  82. « Q&A: Clement Lefebvre: The man behind Linux Mint », techworld.com.au (consulté le )
  83. (en) Vaughan-Nichols, « Linux Mint dumps Ubuntu Snap », ZDNet (consulté le )
  84. (en-US) Kumar, « How To Enable Snap And Install Snap Packages On Linux Mint 20? », Fossbytes, (consulté le )

Voir aussi[modifier | modifier le code]

Liens externes[modifier | modifier le code]