Linux flatpack vs snap

Техническое сравнение 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, поэтому во время установки также необходимо указывать ресурс.

Читайте также:  Media tech mt4016 драйвер windows 10

flatpak install flathub org.gimp.GIMP

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

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 только начинается и в ближайшее время мы увидим множество изменений и интересных идей.

Источник

Snap vs Flatpak.

Заголовок горячий, как знойный день в Африке, но постараюсь с холодной головой выдать вам что известно на сегодняшний день про две конкурирующие технологии по предоставлению самодостаточных приложений.

Сначала должен искренне признаться что с Flatpak активно не работал, только читал официальные инструкции. Для понимания упаковки ПО в snap и заливки в Ubuntu Store, корпел над LanguageTool и сейчас занят упаковкой русского проекта, который никогда не был представлен в репозиториях, как и LT.

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

Общее

  • Обе технологии пытаются упаковать программу со всеми её зависимостями, чтобы в любом линукс дистрибутиве работать, не требуя ничего.
  • В операционной системе пакет snap и flatpak обновляется атомарно, с возможностью откатиться к старой версии при проблемах.
  • Внутри пакета частичное обновление компонентов невозможно, вы должны установить целиком новый пакет от его создателя.
  • Для организации песочницы для программы используется мощь мандатного доступа, но различные их представители. Об этом ниже в разделе Различия.
  • Не сильная зависимость, но она есть от системы инициализации systemd. Flatpak использует systemd —user для настройки cgroups песочницы. Snap юзает systemd для монтирования сжатого пакета snap.
  • Невозможность предоставить гарантированную безопасность и изоляцию ПО друг от друга при использовании в системе старого дисплейного сервера X11 (Xorg).

Flatpak

Snap

Различия

Snap Flatpak
Изоляция фильтры системных вызовов seccomp и система мандатного доступа AppArmor. фильтры системных вызовов seccomp и система мандатного доступа SELinux.
Разработка и поддержка Canonical Разработчик из RedHat Alexander Larsson и разработчики из проекта Gnome.
Реализация вывода графики упор на Mir упор на Wayland
Безопасность Упор сделан на песочницу для программы в виде профиля AppArmor, который создаётся из файла snap.yaml, описанного в декларативном стиле. Для соединений между пакетами или с пакетом-система используются plugs-slots. Возведена в абсолют. Очень сильная изоляция от системы с доступом к ограниченному числу библиотек. Общение со внешней средой через DBus.
Стратегия инкапсуляции В пакете должно быть всё нужное данной программе. Если в системе есть готовое для программы, то можно сделать коннект к нужному. Тяжёлые runtime будут оформлены в отдельные snap пакеты. Упор на понятия runtime (GNOME, KDE) и bundle, связанное с программой. Может быть несколько runtime (GNOME 3.18, GNOME 3.20) для удовлетворения требований программ.
Размеры пакетов Snap гипотетически должен быть крупнее flatpak из-за своей стратегии. Flatpak гипотетически должен быть меньше snap.
Использование на серверах Да, даже есть Snappy Ubuntu Core. Flatpak упор делает на десктоп. Теоретически никто не мешает создать пакет серверам.
Хранилище Уже точно есть Ubuntu Store и могут быть свои хранилища других дистрибутивов linux. Планов нет и нет единого хранилища. Пока рассматривается вариант с GitHub.

Выводы и мысли

Хотел бы с вами поделиться следующими наблюдениями:

  • Возможно это совпадение и мне просто многое мерещется, но ситуация Snap vs Flatpak напоминает мне ситуацию Mir vs Wayland. Есть некий вяло разрабатываемый проект, типа если в рамках его что-то получится, то потом можно начать его использовать. Но стоит Canonical заявить о чём-то конкурирующем, как резко все активизируются. У Canonical масса недоброжелателей в среде разработчиков и многие демонстративно (в пику) оказывают внимание конкуренту. Так было с Wayland и так происходит с Flatpak. Шучу, но мы должны быть благодарны Canonical за активизацию деятельности других проектов.
  • Мои бодания с упаковкой в snap пакеты программ LanguageTool и ещё-одна-gtk3-программа-пока-не-скажу с помощью инструмента snapcraft развеяли мои страхи по поводу жирности самодостаточных пакетов. Личный пример c LanguageTool показал разницу в жалкие пару мегабайт между версией с официального сайта и ею же упакованной с OpenJava 8. Возможно выручает Squashfs, сильно сжимающий snap. Есть парадоксы в лице Krita и LibreOffice 5.2 Beta, которые в snap меньше, чем в deb пакетах.
  • Если образно представить ваш пакет snap с вилками (plugs), то пока их можно воткнуть в гнезда (slot), представляемые самой системой через ubuntu-core. Разработчики обещают, но пока это не реализовано, другие snap пакеты тяжёлых runtime enviroment и можно будет не упаковывать к примеру gtk3 в пакет, а просто попросить соединить со слотом snap пакета gtk3. Не путайте только зависимости в мире deb и коннекты в мире snap.
  • Очень рад что flatpak и snap идут на десктопы, так как считаю что сопровождающие просто технически не успевают за ростом ПО и являются, по моему мнению, лишней сущностью между автором ПО и пользователем. Подробнее.
  • Разработчики snap проговорились в почтовой рассылке, когда запрашивал у них помощи по разным вопросам, что сейчас создаётся утилита, которая графически покажет текущие коннекты и позволит удобно манипулировать ими — коннект/дисконнект. Напомню, что в момент создания пакета snap её автор запрашивает нужное через plugs: [network, network-bind, . ]. Но сам пользователь может разорвать конкретное соединение, если отдаёт себе отчёт. В данный момент такое возможно только в консоли. Ещё они сказали, что слот home, дающий доступ к домашней папке, настолько важен, что ведутся дебаты как быть с такой важной сущностью. Ведь есть софт, чей функционал не подразумевает доступа к домашней папке, но автор пакета его затребовал.

Главное помните, что snap и flatpak только в начале своего пути и им нужно дать, как минимум, время расцвести.

Источник

Сравнение самодостаточных пакетов

В данной статье мы попытаемся в полной мере оценить достоинства и недостатки самых распространённых форматов самодостаточных пакетов Flatpak, Snap.

Введение

Самодостаточные пакеты набирают всё большую популярность ибо не зависят от конкретного дистрибутива. Ранее мы уже вскользь затрагивали эту тему, но сейчас решили разобраться в этом подробнее.

Критерий Flatpak Snap
Формат на диске OSTree Образы в формате squashfs
Изоляция Пространства имён Linux AppArmor
Управление Библиотека или утилита Привилегированный сервис snapd
Источники Репозитории OSTree Проприетарный Snap Store
Среда выполнения Собирается из исходных кодов На основе пакетов Ubuntu
Польз. установка Поддерживается Не поддерживается

Репозитории

Flatpak

Способен работать с любым количеством подключённых OSTree-репозиториев. Данные репозитории не требуют наличия какого-либо специализированного ПО на сервере, т.к. представляют собой совокупность обычных статических файлов, которые могут раздаваться любым веб-сервером, либо при помощи CDN.

В то же время, это накладывает некоторые ограничения. Например нет возможности проводить аутентификацию клиентов по учётным данным для распространения проприетарных приложений с платной подпиской.

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

Привязан к единственному репозиторию и магазину приложений — Snap Store, поддерживаемому компанией Canonical. Исходный код эталонной реализации закрыт, поэтому развёртывание собственного репозитория в настоящее время не представляется возможным.

Использование Магазина требует обязательной аутентификации посредством учётной записи Canonical. Это позволяет легко распространять платные проприетарные приложения с подпиской, но посягает на приватность пользователей особенно в дистрибутивах, отличных от Ubuntu.

Общее

Оба формата позволяют создавать и распространять сборки приложений в виде самодостаточных файлов, которые могут устанавливаться без доступа к соответствующим репозиториям. Для Snap этот файл представляет собой непосредственно образ с приложением, а для Flatpak — срез репозитория OSTree.

Формат пакетов

Flatpak

Использует OSTree — Git-подобное хранилище для двоичных файлов. Загрузка выполняется из удалённого репозитория, а извлечение посредством жёстких ссылок.

Таким образом, флатпаки работают напрямую с файловой системой без использования каких-либо прослоек.

Snap использует образы в формате squashfs (специальный неизменяемый формат сжатой файловой системы). Образ подключается к хостовой системе в качестве loopback устройства, после чего монтируется находящаяся внутри образа файловая система.

Подобный механизм создаёт определённые накладные расходы, хотя для современных ЭВМ они совсем не слишком значительны и зачастую ими можно пренебречь.

Установка приложений

Flatpak

За все операции отвечает либо само приложение flatpak, либо библиотека libflatpak при использовании внешних графических оболочек (Gnome Software, Discover и т.д.).

Приложение выполняется либо с правами текущего пользователя, либо запрашивает повышение прав посредством Polkit при необходимости глобальной установки.

Большинство операций выполняет работающий с привилегиями суперпользователя системный сервис snapd. Он устанавливает, обновляет и удаляет приложения, взаимодействует с Магазином, а также управляет профилями AppArmor.

Среда выполнения

Flatpak

Файловая система песочницы состоит из следующих составных частей:

  1. корень — tmpfs, невидимый из хостовой ОС;
  2. среда выполнения (runtime) — монтируется как /usr внутри пространства имён;
  3. приложение — монтируется как /app внутри пространства имён.

Среда выполнения, а также её SDK (software development kit) — это отдельный набор динамических библиотек, которые могут быть использованы приложениями.

Существует несколько популярных и широко используемых при создании флатпаков SDK:

  • Freedesktop.org (содержит базовый набор библиотек, используемых большинством приложений с графическим интерфейсом пользователя);
  • KDE (содержит фреймворки Qt и KDE);
  • Gnome (содержит фреймворк GTK, а также модули, необходимые для Gnome-приложений).

Возможна также и сборка своих собственных SDK, но в этом случае потребуется их распространять вместе с приложением в репозитории, либо составе бандла.

Поддерживаются Core Snap. По функциональности они практически полностью идентичны рантаймам, но представляют собой минимальное окружение дистрибутива Ubuntu.

Core snap монтируется в качестве корневой файловой системы внутри песочницы, а само приложение доступно по тому же пути, что и на хосте.

Технически возможно создание не связанных с Ubuntu core snap’ов, однако на момент публикации данной статьи таковые не применялись.

Изоляция приложений

Flatpak

Для изоляции используются пространства имён ядра Linux, поэтому приложение имеет доступ лишь к своим собственным процессам, файлам и прочим объектам ядра. Для фильтрации системных вызовов применяется Seccomp.

Управление песочницами осуществляется посредством bubblewrap, а для работы с процессами внутри опционально может применяться systemd.

В дистрибутивах, на которых создание пространства имён запрещено для пользователя, для исполняемого файла bwrap применяется SUID-бит.

В случае использования таких глобальных разрешений, как —filesystem=host, —filesystem=home или —talk-name=org.freedesktop.Flatpak, фактически приложение не имеет изоляции, что позволяет ему общаться с хостом и даёт возможность покинуть собственную песочницу.

Для изоляции от основной системы применяется система мандатного ограничения доступа AppArmor. Профили AppArmor генерируются автоматически и загружаются для каждого Snap приложения при помощи системного сервиса snapd.

В системах без поддержки AppArmor, все снапы работают без какой-либо изоляции вообще.

Более того, система изоляция полагается на ряд специфичных системных вызовов ядра Linux, которые присутствуют лишь в Ubuntu и реализуются при помощи downstream-патчей, не принятых в ядро Linux, поэтому полная изоляция в настоящее время не функционирует в отличных от Ubuntu дистрибутивов, использующих систему мандатного доступа AppArmor.

Снапы с активным classic confinement также не изолированы.

Межпроцессное взаимодействие

Общее

Обе системы могут применять xdg-dbus-proxy для взаимодействия при помощи D-Bus — особый фильтрующий прокси, который пропускает лишь разрешённые вызовы.

Для предоставления доступа к файлам, принтерам и прочим объектам хостовой системы может использоваться xdg-desktop-portal.

Литература и благодарности

Редакция выражает большую благодарность участнику чата Russian Fedora Filippe LeMarchand за написание данной статьи.

При написании использовалась литература из следующих источников:

Источник

Читайте также:  Где посмотреть все драйвера windows
Оцените статью