Авторские статьи об OpenSource

Техническое сравнение Snap и Flatpak.


Внедрение новых технологий всегда не просто. Обычно требуется время, чтобы все освоились с основными концепциями и моделями использования. Хорошее описание архитектуры может сократить время и помочь преодолеть разрыв.

Сравнение Snap, как систему с мандатным доступом (MAC), с традиционным миром Deb, как систему с избирательным доступом (DAC), вы можете прочесть Snap vs Deb.

Flatpak с первого взгляда

Пакет Flatpak, подобно snap, поставляется с необходимыми компонентами внутри самодостаточного архива, поэтому его легко и просто можно развернуть на различных дистрибутивах Linux. Компоненты и среда выполнения (Runtime) объединены в один файл в формате Open Container Initiative (OCI).

В общем случае, приложение в формате flatpak собрано вместе с runtime + дополнительные библиотеки. На сегодняшний день 21 дистрибутив Linux заявляет о поддержке и запуске программ в flatpak. Кроме того, приложения помещаются в песочницу с помощью Bubblewrap, который использует механизмы безопасности ядра linux и пространства имён (namespace) для создания непривилегированных контейнеров. Связь программы вне песочницы с системой возможна через механизм порталов (portals), которые дают дозированный доступ к конкретному системному ресурсу.

Для конечных пользователей пакеты flatpak доступны в основном через Flathub, который является одновременно и магазином приложений и местом сборки, будучи частично связанным с проектом Flatpak. Отправка на Flathub выполняется в виде запросов на GitHub (pull requests) и требует одобрения администраторов. Аналогичным образом, издатели проприетарного программного обеспечения вынуждены вручную запрашивать включение своих приложений. Приложения Flatpak также иногда доступны в виде ссылок для скачивания вручную. Механизм автоматического обновления не доступен по умолчанию.

В целом Flatpak спроектирован в первую очередь для поддержки десктопных приложений с графическим интерфейсом, в то время как snap был разработан для работы с демонами на серверах, с облачной инфраструктурой и устройствами Интернета вещей (IoT) в дополнение к работе с десктоп программами.

Предыдущая моя статья Snap vs Flatpak.

Snap с первого взгляда

Snap - это сжатый с помощью SquashFS файл. Обычно внутри snap файла находятся все ресурсы что необходимы программе для её работы. Так как это может увеличить размер snap файла, используется механизм называемый базой (base), snap пакет олицетворяющий систему с минимальным набором библиотек, общих для большинства программ. Так же разработчикам доступен интерфейс content, который помогает повторно использовать код и делить данные между различными snap.

Управление snap осуществляется через сервис snapd. Таким образом, если в системе есть snapd, то можете запускать программы в snap формате. На сегодняшний день 41 дистрибутив Linux заявляет о поддержке.

С точки зрения безопасности, snap изолирован от системы комбинацией из нескольких механизмов: AppArmor, SecComp, cgroups и другие. По умолчанию snap не могут получить доступ к системных ресурсам за пределами своей песочницы. Дозированный доступ предоставляется пользователем через интерфейсы.

Snap идёт вместе с надёжной инфраструктурой разработки и развёртывания, включая инструмент командной строки snapcraft для создания пакетов, а так же онлайн сервис build.snapcraft.io, который собирает ваш софт под 6 различных аппаратных архитектур (если вам нужно) и отправляет в официальный Snap Store. Компании и энтузиасты могут создать свои собственные учётные записи и публиковать свои пакеты snap напрямую со своих сборочных серверов. Чтобы пользователь смог легко и просто увидеть и установить программу:

  • созданы плагины для установщиков софта GNOME Software и KDE Discover
  • программа Snaptastic для Elementary OS
  • возможность через веб интерфейс Snap Store вызвать в системе механизм скачивания и установки
  • через утилиту командной строки snap

Типичное использование

Для конечного пользователя использование snap и flatpak очень схоже. В обоих случаях, пользователь может найти и установить ПО через GUI или CLI.

Однако есть отличия при работе в консоли. В случае с snap поиск (search) и установка (install) интуитивно понятнее и легче из-за использования имени приложения и классического автодополнения (BASH autocompletion). Flatpak использует трёхкомпонентный идентификатор для каждой программы в виде tld.company.application. Для примера GIMP идёт как org.gimp.GIMP, а в snap просто gimp. Это означает, что в случае с flatpak, поиск в графических инструментах KDE Discover или Ubuntu Software Center (GNOME Software) может отличаться от поиска в терминале. Flatpak предназначен для работы с несколькими удалёнными источниками софта, одним из которых является Flathub, поэтому во время установки также необходимо указывать ресурс.

flatpak install flathub org.gimp.GIMP

Оба формата позволяют пользователям установку различных версий софта. Snap использует понятие каналов (channels), а flatpak - ветвей (branches). Snap позволяет установить параллельно несколько версий одного и того же софта. С flatpak этого можно достичь, предлагая этот же пакет с отдельным именем, типа Nightly build 3.

Обновление софта обрабатываются по-разному. Snap идёт с автоматическим обновлением, включённым по умолчанию. Можно управлять и настраивать интервалы проверок, но нельзя отключать полностью. Пользователь может форсированно обновиться здесь и сейчас - snap refresh

Flatpak можно обновить вручную - flatpak update

Краткое изложение отличий

Тип пакета Flatpak Snap
Формат OCI SquashFS
Поддержка Flatpak (21 дистрибутив) Snap (41 дистрибутив)
Архитектуры AMD64, AArch64, ARMv7-A, i586 AMD64, ARM64, armhf (ARMv7), i386, ppc64el, S390X
Поддержка десктопа Да Да
Интеграция с десктопом Да Да
Поддержка серверов Нет Да
IoT Нет Да
Хранилище Flathub Snap Store
Поддержка нескольких хранилищ Да Нет
Интеграция с графическими утилитами Да Да
Количество софта на дату публикации 679 2632 (вкл дубликаты + тестовые)
Кто-нибудь может внести свой вклад? Да (с ручной проверкой админом) Да
Лицензия Любая Любая
Автоматические обновления Нет Да

Заключение

Есть много общего как flatpak и snap решают задачи упаковки и доставки софта пользователям Linux. В некотором смысле, их можно воспринимать как конвергентную эволюцию в экосистеме Linux. Есть отличия в обновлении, параллельной установке и поддерживаемых дистрибутивах. Snap, помимо классического десктопа, ещё трудятся на серверах и доменах IoT, в то время как Flatpak позволяют пользователям указывать дополнительные хранилища.

Обилие возможностей может пугать обычного пользователя, но необходимо понимать, что это новое измерение свободы позволяет людям выбирать подходящую технологию для своих конкретных потребностей. В любом случае, мир автономных и самодостаточных программ в Linux только начинается и в ближайшее время мы увидим множество изменений и интересных идей.

Оригинал A technical comparison between the snap and the Flatpak formats
Значительное улучшение первого старта программ в snap.
Snap vs AppImage.
Мои snap пакеты.

    Twitter   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта