Snap — это система упаковки и развертывания программного обеспечения , разработанная Canonical для операционных систем , использующих ядро Linux и систему инициализации systemd . Пакеты, называемые snaps , и инструмент для их использования snapd , работают в ряде дистрибутивов Linux [3] и позволяют разработчикам программного обеспечения распространять свои приложения напрямую пользователям. Snap — это автономные приложения, работающие в песочнице с опосредованным доступом к хост-системе. Snap изначально был выпущен для облачных приложений [4], но позже был портирован для работы также с устройствами Интернета вещей [5] [6] и настольными приложениями [7] [8] .
Приложения в Snap запускаются в контейнере с ограниченным доступом к хост-системе. Используя интерфейсы , пользователи могут предоставить приложению опосредованный доступ к дополнительным функциям хоста, таким как запись звука, доступ к USB-устройствам и запись видео. [9] [10] [11] Эти интерфейсы опосредуют обычные API Linux, так что приложения могут функционировать в песочнице без необходимости их переписывания. Настольные приложения также могут использовать XDG Desktop Portals, стандартизированный API, изначально созданный проектом Flatpak для предоставления изолированным настольным приложениям доступа к ресурсам хоста. [12] [13] Эти порталы часто обеспечивают лучший пользовательский опыт по сравнению с собственными API Linux, поскольку они запрашивают у пользователя разрешение на использование ресурсов, таких как веб-камера, в то время, когда приложение их использует. Недостатком является то, что приложения и наборы инструментов необходимо переписывать для использования этих новых API.
Песочница Snap также поддерживает обмен данными и сокетами Unix между Snap. [14] Это часто используется для обмена общими библиотеками и прикладными фреймворками между Snap, чтобы уменьшить размер Snaps, избегая дублирования. [15] [16]
Песочница Snap в значительной степени опирается на модуль безопасности AppArmor Linux из ядра Linux upstream . Поскольку одновременно может быть активен только один «основной» модуль безопасности Linux (LSM), [17] песочница Snap становится гораздо менее безопасной, когда включен другой основной LSM. В результате в таких дистрибутивах, как Fedora , которые по умолчанию включают SELinux , песочница Snap сильно деградирует. Хотя Canonical работает со многими другими разработчиками и компаниями, чтобы сделать возможным одновременный запуск нескольких LSM, это решение еще не скоро появится. [18] [17] [19]
Песочница Snap не позволяет привязанным настольным приложениям получать доступ к темам операционной системы хоста, чтобы предотвратить проблемы совместимости. Чтобы Snaps мог использовать тему, ее также необходимо упаковать в отдельный Snap. Многие популярные темы упаковываются разработчиками Snap [20], но некоторые темы пока не поддерживаются [21] , а необычные темы приходится устанавливать вручную. Если тема недоступна в виде пакета Snap, пользователям приходится выбирать наиболее подходящую из доступных тем. [22] Продолжается работа по упрощению упаковки тем в Snap для третьих сторон и автоматической установки необычных системных тем. [23]
Несколько раз в день snapd проверяет наличие доступных обновлений всех Snaps и устанавливает их в фоновом режиме с помощью атомарной операции . Обновления можно отменить [24] [25] и использовать дельта-кодирование для уменьшения размера загрузки. [26] [27] [28]
Издатели могут выпускать и обновлять несколько версий своего программного обеспечения параллельно с помощью каналов . Каждый канал имеет определенный трек и риск , которые указывают версию и стабильность программного обеспечения, выпущенного на этом канале. При установке приложения Snap по умолчанию использует latest/stable
канал, который будет автоматически обновляться до новых основных выпусков программного обеспечения, когда они станут доступны. Издатели могут создавать дополнительные каналы, чтобы дать пользователям возможность придерживаться определенных основных выпусков своего программного обеспечения. Например, 2.0/stable
канал позволит пользователям придерживаться версии 2.0 программного обеспечения и получать только незначительные обновления без риска обратно несовместимых изменений. Когда издатель выпускает новую основную версию в новом канале, пользователи могут вручную обновиться до следующей версии, когда захотят. [29] [30] [31] [32]
Расписание, частоту и время автоматических обновлений могут настраивать пользователи. Например, эта команда будет проверять наличие обновлений в последнюю пятницу с 23:00 до 01:00.
$ sudo snap set system refresh.timer = fri5,23:00-01:00
Пользователи также могут приостановить автоматические обновления на определенный период времени или на неопределенный срок. [33] [34] [35] Обновления автоматически приостанавливаются при лимитных подключениях. [36] [37]
Snapcraft — это инструмент для разработчиков, позволяющий упаковывать свои программы в формат Snap. [40] Он работает на любом дистрибутиве Linux, поддерживаемом Snap, macOS [41] и Microsoft Windows . [42] Snapcraft собирает пакеты в виртуальной машине с использованием Multipass, [43] чтобы гарантировать, что результат сборки будет одинаковым, независимо от того, на каком дистрибутиве или операционной системе он собран. [44] Snapcraft поддерживает несколько инструментов сборки и языков программирования, таких как Go , Java , JavaScript , Python , C / C++ и Rust . Он также позволяет импортировать метаданные приложения из нескольких источников, таких как AppStream , git , скрипты оболочки и setup.py
файлы. [41] [45]
Snap Store позволяет разработчикам публиковать свои приложения, упакованные в Snap. [46] Все приложения, загруженные в Snap Store, проходят автоматическое тестирование, включая сканирование на наличие вредоносного ПО . Однако сканирование не выявляет все проблемы. В одном случае в мае 2018 года было обнаружено, что два приложения одного и того же разработчика содержали майнер криптовалюты , работавший в фоновом режиме во время выполнения приложения. Когда эта проблема была обнаружена, Canonical удалила приложения из Snap Store и передала право собственности на Snap доверенной третьей стороне, которая повторно опубликовала Snap без присутствия майнера. [47] [48] [49] Хотя песочница Snap снижает влияние вредоносного приложения, Canonical рекомендует пользователям устанавливать Snap только от издателей, которым доверяет пользователь. [50] [51]
Snaps — это автономные пакеты, которые работают в различных дистрибутивах Linux . Это отличается от традиционных подходов к управлению пакетами Linux, которые требуют специально адаптированных пакетов для каждого дистрибутива Linux. [52] [53]
Формат файла snap представляет собой единую сжатую файловую систему, использующую формат SquashFS с расширением .snap
. Эта файловая система содержит приложение, библиотеки, от которых оно зависит, и декларативные метаданные. Эти метаданные интерпретируются snapd для настройки безопасной песочницы соответствующей формы для этого приложения. После установки snap монтируется операционной системой хоста и распаковывается на лету при использовании файлов. [54] [32] Хотя это имеет то преимущество, что snap используют меньше дискового пространства, это также означает, что некоторые большие приложения запускаются медленнее. [55] [56]
Существенное различие между Snap и другими универсальными форматами упаковки Linux, такими как Flatpak , заключается в том, что Snap поддерживает любой класс приложений Linux, таких как настольные приложения, серверные инструменты, приложения IoT и даже системные службы, такие как стек драйверов принтера. [46] [57] [58] Чтобы гарантировать это, Snap использует systemd для таких функций, как запуск системных служб, активируемых сокетом, в Snap. [59] Это приводит к тому, что Snap работает лучше всего только в дистрибутивах, которые могут принять эту систему инициализации . [60]
Snap изначально поддерживал только дистрибутив Ubuntu Core all-Snap , но в июне 2016 года он был портирован на широкий спектр дистрибутивов Linux, чтобы стать форматом для универсальных пакетов Linux. [61] Snap требует Systemd , который доступен в большинстве, но не во всех, дистрибутивах Linux. Другие Unix-подобные системы (например, FreeBSD ) не поддерживаются. [62] ChromeOS не поддерживает Snap напрямую, только через установленные в ней дистрибутивы Linux, которые поддерживают Snap, такие как Gallium OS . [63]
Ubuntu и его официальные производные предустанавливают Snap по умолчанию, как и другие дистрибутивы на основе Ubuntu, такие как KDE Neon и Zorin OS . [64] В настоящее время Solus планирует отказаться от Snap, чтобы уменьшить нагрузку по поддержке исправлений AppArmor, необходимых для строгого ограничения Snap. [65] Zorin OS удалили Snap из пакета по умолчанию в выпуске Zorin OS 17. [66] В то время как другие официальные производные Ubuntu, такие как Kubuntu , Xubuntu и Ubuntu MATE, также поставлялись с конкурирующим Flatpak в качестве дополнения, они больше не будут этого делать, начиная с Ubuntu 23.04, что означает, что он должен быть установлен вручную пользователем. [67]
Ряд известных компаний по разработке программного обеспечения для настольных компьютеров публикуют свое программное обеспечение в Snap Store, включая Google , [68] JetBrains , [69] KDE , [70] Microsoft (для версий Linux, например, .NET Core 3.1, [71] Visual Studio Code , Skype , [72] и PowerShell ), Mozilla [73] и Spotify . [74] Snap также используются в средах Интернета вещей , начиная от потребительских продуктов [75] до шлюзов управления корпоративными устройствами [76] и сетей спутниковой связи . [77] [78] Наконец, Snap также используется разработчиками серверных приложений, таких как InfluxDB , [79] Kata Containers, [80] Nextcloud [81] и Travis CI . [82]
Snap получил неоднозначную реакцию от сообщества разработчиков. На рекламном сайте Snap Heroku похвалил автоматическое обновление Snap, так как оно хорошо вписывается в их быстрый график выпуска. Microsoft упоминает простоту использования и то, что Snap основан на YAML , а также то, что он не зависит от дистрибутивов. JetBrains утверждает, что Snap Store дает их инструментам больше возможностей, [83] [ нужен лучший источник ], хотя некоторые пользователи утверждают, что запуск инструментов занимает гораздо больше времени, если они установлены из Snap Store, чем если они установлены другим способом. [84]
Другие возражали против закрытого исходного кода Snap Store. Клеман Лефевр ( основатель и руководитель проекта Linux Mint [85] [86] ) написал, что Snap предвзят и имеет конфликт интересов. Причины, которые он привел, включают в себя то, что он управляется Canonical и привязан к их магазину, а также то, что Snap работает лучше в Ubuntu, чем в других дистрибутивах. [87] Позже он объявил, что установка Snap будет заблокирована APT в Linux Mint, [88] [89] хотя способ отключить это ограничение будет задокументирован. [90]
В последних версиях Ubuntu Canonical перенесла некоторые пакеты исключительно в Snap, например, веб-браузеры Chromium и Firefox [91] . [92] [46] Замена Firefox вызвала неоднозначную реакцию пользователей из-за проблем с производительностью версии Snap, особенно при запуске. [91]