Главная >> Обзоры >> Сравнение Snap vs Flatpak

Сравнение Snap vs Flatpak

Snap и Flatpak - системы развертывания программного обеспечения и управления пакетами для Linux, ставшие очень популярными в последнее время. На первый взгляд обе системы довольно похожи. Обе имеют определенный уровень изоляции, содержат все зависимости приложения, после упаковки приложение может быть установлено в любой дистрибутив, поддерживающий данный формат пакетов, И для Snap и для Flatpak было создано уже более 1000 приложений. Но чем же они отличаются? И что выбрать?

В этой статье я хочу провести подробное сравнение Snap vs Flatpak. Я расскажу о некоторых технических деталях их работы, назначении, преимуществах и недостатках. Но я хочу больше сосредоточится на использовании этих пакетов с точки зрения пользовтеля и пропущу все, что связано с разработкой. Я не связан с разработчиками Snap или Flatpak, просто провел небольшое исследование в Интернете, изучил, как Snap и Flatpak работают в моей системе, и вот результат.


Содержание статьи

Для чего был создан Snap?

Прежде чем мы начнем сравнивать форматы, давайте посмотрим, зачем они были созданы. Canonical на протяжении многих лет пыталась улучшить доставку свежего программного обеспечения для пользователей Ubuntu. Основная проблема заключалась в том, новые версии Ubuntu выходят фиксированными релизами два раза в год, и пользователям приходится ждать полгода, чтобы получить новые версии программ, или даже два года если они хотят использовать только LTS-релизы. Некоторые приложения, например, браузеры, развиваются очень быстро, и быстрая доставка новых версий таких приложений конечному пользователю просто необходима. Даже шесть месяцев - слишком большой срок.

Сначала, Canonical запускает PPA, затем экспериментирует с точечными выпусками, такими как 22.04.1, 22.04.2, в которые входят новые версии браузера и графических драйверов для старых LTS-дистрибутивов, затем запускает Software Center поверх PPA. Все эти попытки имеют свои недостатки. PPA считается небезопасным, потому что каждый может создать PPA и обновлять пакеты без проверки Canonical. Кроме того, разработчикм нужно создать пакет для каждого выпуска Ubuntu, который они хотят поддерживать что требует много работы и затрат времени. Точечные релизы также требуют много времени от мейнтейнеров. Software Center решает некоторые проблемы, потому что там пакеты проходили проверку Canonical перед добавлением. Однако для каждого выпуска Ubuntu все равно необходимо заново отрправлять приложение на проверку.

Приблизительно в 2013 году Canonical начала разрабатывать Ubuntu Touch и Ubuntu для IoT-устройств. Эта область имела свои особенности и требования к программному обеспечению, такие как регулярные обновления и высокий уровень безопасности для уменьшения количества уязвимых IoT-устройств в интернете, а также упрощение разработки и поддержки приложений для разных версий Ubuntu Touch. Поэтому были созданы пакеты Click, а затем и Snap.

Пакеты Snap решили большинство проблем, рассмотренных выше. Перед добавлением в магазин они проверяются Canonical или сообществом, чтобы убедиться в их безопасности. Snap имеет регулярные автоматические обновления, так что вы не сможете забыть обновить его. А также, созданный один раз пакет может работать во всех дистрибутивах с установленным snapd. Немного позже Canonical добавили поддержку Snap в Ubuntu Desktop. Это случилось в Ubuntu 16.04.

Для чего был создан Flatpak?

Не только Canonical предпринимала попытки придумать лучший способ поставки приложений и сделать их более безопасными. Разработчик GNOME Александр Ларссон экспериментировал с созданием универсальных пакетов приложений с помощью API контейнеризации ядра и пространств имен ядра с 2007 года. У разработчиков приложений для Linux были те же проблемы, что и у мейнтейнеров Ubuntu. Им нужно было не только разработать и выпустить приложение, но и протестировать его работоспособность хотя бы на самых популярных дистрибутивах. Многие дистрибутивы имели разные версии библиотек или даже разные системы пакетов, такие как rpm и deb.

Примерно в 2015 году Александр Ларссон представил xdg-app для решения этих проблем. Этот инструмент предоставлял разработчикам приложений среды выполнения, называемые Runtime, которые использовались приложением для взаимодействия с окружением рабочего стола и являлись промежуточным звеном между приложением и операционной системой. Таким образом, приложение можно было установить на каждый дистрибутив, в котором есть xdg-app и необходимая среда выполнения. Преимущество такого подхода заключалось в том, что можно было иметь несколько сред выполнения с разными версиями библиотек. Кроме того, каждое приложение запускалось в песочнице для повышения безопасности. Идея заключалась в том, чтобы предотвратить доступ приложения к пользовательским файлам, если он не нужен.

Через несколько лет xdg-app эволюционировал в Flatpak, но в нем по-прежнему используется концепция сред выполнения и песочницы. Для упрощения установки и поиска приложений новыми пользователями был создан репозиторий FlatHub. Однако технология полностью открыта, и каждый может создать свой собственный репозиторий.

Как работает Snap?

Canonical стремится сделать Ubuntu максимально безопасной, поэтому у них есть только один Snap Store, где все пакеты проверяются перед добавлением. Реализация snap-репозитория проприетарная, поэтому никто не может создавать альтернативные хранилища. Все, что вам нужно знать, это то, что вы как пользователь можете искать пакеты в этом хранилище, устанавливать последнюю доступную версию, выбирать канал (стабильный/последний) и проверять наличие обновлений.

Приложения Snap упаковываются в самодостаточный файл-образ с помощью SquashFS. Этот файл имеет расширение .snap. Все файлы *.snap, установленные в вашей системе, находятся в папке /var/lib/snapd/snaps/. Существует два типа пакетов: приложения и библиотеки snap core. Приложениям необходим интерфейс для взаимодействия с операционной системой и snapd. Такой интерфейс предоставляют библиотеки snap core. В одной системе может быть установлено несколько версий core, чтобы поддерживать пакеты, разработанные для разных версий Ubuntu.

Snap пакеты обновляются автоматически, и snapd проверяет наличие обновлений четыре раза в день. Его нельзя полностью отключить, но обновления можно отложить или же можно настроить периодичность обновлений. Когда пакет snap обновляется, он также сохраняет предыдущие версии в вашей файловой системе. По умолчанию хранятся две предыдущие версии. Эти версии называются ревизиями. И вы можете использовать эти сохраненные версии позже, чтобы вернуть предыдущую версию пакета, если что-то пойдет не так. Кроме того, 2017 года snapd поддерживает дельта-обновления, когда загружается не полный пакет, а только измененные данные.

Каждый пакет snapd должен быть смонтирован в файловую систему перед использованием. Поэтому обычно в выводе lsblk вы видите много точек монтирования snap:

lsblk

По умолчанию в каталоге /snap есть папка для каждого пакета и каждой ревизии. Например, здесь transmission - это имя пакета, а 67 - ревизия:

ls /snap/transmission/

Но Firefox обновляется чаще, поэтому в моей системе уже есть не только последняя версия, но и две предыдущие:

Пакет монтируется в папку ревизии, а затем туда же монтируются все зависимости пакета, интерфейсы и так далее. Но на хост-системе вы увидите только содержимое файла snap:

ls /snap/transmission/67

Snapd использует технологию mount namespaces, чтобы сделать эти точки монтирования доступными только процессам внутри пакета snap. Однако вы можете изучить их, войдя в оболочку пакета с помощью следующей команды:

snap run --shell transmission

Путь к каталогу с данными snap пакета помещается в переменную окружения $SNAP. Например:

echo $SNAP ls /snap/transmission/67

Сюда могут быть смонтированы каталоги хоста или каталоги из других snap-пакетов. Это монтирование настраивается с помощью слотов и интерфейсов при создании snap пакета.

Также здесь вы можете попробовать получить доступ к некоторым папкам в вашей файловой системе. Например, к документам в домашнем каталоге или к конфигам из /etc/. И, скорее всего, вы получите ошибку permission denied:

ls /etc/

Приложения Snap могут находиться в одном из двух режимов ограничения: strict и classic. В режиме strict используются профили AppArrmor для ограничения доступа ко всем файлам, к которым приложение не должно иметь доступа. А также исплоьзуются профили seccmap для ограничения доступа к системным вызовам ядра. В классическом режиме пакеты могут получить доступ ко всем файлам в файловой системе.

Настройка разрешений Snap осуществляется с помощью слотов и интерфейсов. Это просто абстракция, позволяющая указать, какие функции будут разрешены для использования. Их можно посмотреть с помощью следующей команды:

snap connections transmission

Дополнительно настроить разрешения Snap можно в приложении System Settings на вкладке Apps:

Там перечислены все приложения, но только для Snap вы увидите подробную настройку разрешений. Приложениям нужно где-то хранить свои данные. Поэтому Snap предоставляет две папки для данных: /var/snap/ и ~/snap в домашней директории пользователя. Ссылки на эти каталоги размещаются в следующих переменных окружения:

  • SNAP_DATA - общиесистемные данные пакета snap для конкретной ревизии
  • SNAP_USER_DATA - пользовательские данные пакета snap для конкретной ревизии
  • SNAP_COMMON. общесистемные данные пакета, общие для всех ревизий
  • SNAP_USER_COMMON - пользовательские данные пакета общие для всех ревизий
echo $SNAP_DATA

При удалении snap пакета все эти данные сохраняются в виде снапшота в /var/lib/snapd/snapshots/.

Для запуска приложения из Snap можно использовать следующую команду:

snap run transmission

Но вы также можете запустить его, набрав имя приложения, как и для обычных приложений. Это работает, потому что snapd создает символические ссылки для всех доступных исполняемых файлов snap в /snap/bin на /usr/bin/snap.

ls -l /snap/bin/transmission

Когда вы запускаете любую ссылку, команда snap смотрит на первый аргумент, чтобы определить имя приложения, а затем просто запускает запрошенный snap. Поэтому вы не увидите разницы. Также иконки и файлы ярлыков экспортируются в /var/lib/snapd/desktop/icons/ и /var/lib/snapd/desktop/applications/. Таким образом, вы можете запускать эти приложения и из главного меню.

Как работает Flatpak?

Исходный код Flatpak полностью открыт. Каждый может создать свой собственный репозиторий, и пользователи могут использовать его для установки приложений. Однако для упрощения поиска приложений существует один наиболее популярный репозиторий, который носит название Flathub. Каждое приложение в нем утверждается администраторами Flathub на предмет соответствия требованиям репозитория. Кроме того, приложения могут публиковать как их разработчики, так и пользователи. Приложения, опубликованные разработчиками, имеют галочку на своей странице и считаются проверенными:

Технически каждый репозиторий Flatpak очень похож на git-репозиторий, но для бинарных файлов. Технология, которая используется для организации работы репозитория называется ostree. Каждое приложение в репозитории - это ветка, а каждая версия - это коммит. Таким образом, вы можете свободно просматривать информацию обо всех предыдущих версиях приложения и устанавливать любую из них. Например, вот так можно посмотреть журнал истории версий для Transmission:

flatpak remote-info --log flathub com.transmissionbt.Transmission

Также вы можете обновить или понизить версию приложения до определенного коммита:

flatpak update --commit=1d4ddca72967f38c0339ab80dda38eb173e048800bfd11d635d21ec24781d477 com.transmissionbt.Transmission

В графическом интерфейсе можно управлять версиями установленных Flatpak приложений с помощью Warehouse. При обновлении пакетов Flatpak загружаются только измененные данные, а не весь пакет. После выполнения обновления в командной строке вы увидите два размера в колонке Загрузка, первый - дельта - это фактически загруженный размер, а второй - полный размер загрузки:

flatpak update

Приложения Flatpak размещаются в /var/lib/flatpak/ в файловой системе. Поскольку приложения могут работать в каждом дистрибутиве, где установлен Flatpak, необходимы универсальные библиотеки, которые будут работать как промежуточное звено между операционной системой и приложением. Как я уже говорил, эти библиотеки называются Runtime. Эта концепция была представлена на GNOME Developer Hackfest в 2013 году. В отличие от Snap, существуют разные Runtime с разным набором инструментов, например, GNOME Platform, Freedesktop, KDE platform и так далее. Приложения и библиотеки разделены по разным папкам: /var/lib/flatpak/app для приложений и /var/lib/flatpak/runtime для библиотек:

ls /var/lib/flatpak/app

Само приложение Flatpak - это просто каталог в файловой системе. Например, файлы из пакета Transmission помещаются в /var/lib/flatpak/app/com.transmissionbt.Transmission/current/active/. Для того чтобы приложения можно было запускать из главного меню, их ярлыки и иконки экспортируются в папку /var/lib/flatpak/exports/share/. Кстати, в вашей файловой системе хранится только текущая версия пакета:

ls /var/lib/flatpak/app/com.transmissionbt.Transmission/current/active/

Если вы хотите посмотреть, к чему приложение может получить доступ, вам нужно войти в оболочку приложения. Например, используйте эту команду, чтобы запустить оболочку для GNOME Clocks:

flatpak run --command=sh org.gnome.clocks

Здесь вы можете увидеть, как выглядит внутреннее окружение приложения. Приложение находится в песочнице, но для меня это больше похоже на контейнер. Здесь есть своя корневая файловая система, а файлы приложения монтируются в папку /app:

По умолчанию это не корневая файловая система Linux, а специальная файловая система со всеми необходимыми библиотеками, сокетами, устройствами и так далее. Например, в каталоге /etc/ много пустых папок, и каталог /home тоже пуст:

Важно отметить, что в каталоге /proc, который содержит всю информацию о процессах, есть информация только о процессах, запущенных в песочнице:

Я выбрал Clocks, потому что он не требует специального доступа к файлам. Конечно, если приложению нужен доступ к корневой файловой системе или пользовательским файлам, оно может запросить это разрешение, и реальная файловая система будет смонтирована в песочницу. Это широко используется для преодоления проблем с разрешениями, но даже в этом случае приложение в песочнице не может монтировать некоторые каталоги из корневой файловой системы, например: /root, и /proc. Некоторые другие каталоги могут быть смонтированы, но в /run/host, а не в root. И если приложение захочет смонтировать домашний каталог пользователя, оно все равно не сможет увидеть в файловой системе данные других приложений Flatpak.

Для повышения безопасности и обеспечения большего контроля над доступом приложений к ресурсам разработчики Flatpak создали технологию Portals, которая позволяет взаимодействовать с окружением рабочего стола и файлами без прямого доступа к файловой системе. Например, Portals позволяет делать скриншоты, записывать экран, выбирать файл и т.д. Теперь Portals принадлежит Freedesktop и может использоваться всеми приложениями. Поскольку разработчики GNOME сделали внутренний API GNOME приватным, Portals - единственный способ получить доступ к определённым функциям окружения рабочего стола.

Технически, Portal - это DBus-адрес с некоторым API, который приложение может использовать для выполнения действий или сбора данных без прямого доступа к сокетам или файловой системе. При этом для доступа к каждому порталу приложение должно запросить разрешение у пользователя. В командной строке песочницы пакета можно выполнить следующую команду, чтобы увидеть доступные порталы и другие адреса DBus:

dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames

Проверить разрешения для пакета Flatpak можно с помощью команды info с опцией --show-permissions:

flatpak info --show-permissions io.missioncenter.MissionCenter

Кроме того, можно проверить и даже изменить разрешения приложений Flatpak с помощью приложения Flatseal. Оно показывает все доступные сокеты, ресурсы, папки, интерфейсы DBus, порталы и так далее в графическом интерфейсе:

Если приложению Flatpak нужен доступ, который не предоставляется порталами и не может быть предоставлен монтированием файловых систем, оно может использовать flatpak-spawn для запуска произвольного процесса в хостовой системе. Ему требуется разрешение на обращение к DBus по адресу org.freedesktop.Flatpak. Во время установки Flatpak показывает разрешения, которые необходимы приложению, так что вы будете знать, к чему приложение может получить доступ ещё до установки:

Данные для приложений Flatpak находятся в ~/.var/app/. Глобальных директорий нет, и все данные, связанные с пользователем, хранятся в его домашней папке. Например, для Transmission:

Ещё вы можете посмотреть пути к папкам с данными приложения, которые хранятся в переменных окружения:

  • XDG_STATE_HOME - состояние приложения (например, /var/lib)
  • XDG_CACHE_HOME - кэш приложения
  • XDG_CONFIG_HOME. файлы конфигурации приложения
  • XDG_DATA_HOME - ресурсы приложения (например, /usr/share)

При удалении приложения по умолчанию все эти данные остаются в вашей файловой системе. Для запуска приложений используется flatpak с опцией run:

Snap vs Flatpak. В чем разница?

Теперь вы знаете, для чего были созданы эти форматы пакетов, и понимаете, как они работают. Давайте подведем итоги и сравним их по наиболее важным аспектам.

1. Открытый исходный код

И Snap, и Flatpak - системы управления пакетов с открытым исходным кодом. И оба разрабатываются и поддерживаются огромным сообществом пользователей по всему миру. Однако реализация репозитория Snap Store на стороне сервера является проприетарной. API, с помощью которого snapd получает пакеты, хорошо документирован, и технически возможно создать альтернативную реализацию. Более того, некоторое время назад были попытки, например Kebe, но на момент написания статьи они выглядят заброшенными. Так что работающих альтернатив с открытым исходным кодом нет. Это может иметь некоторые недостатки, например, дистрибутивы и организации не могут создавать свои собственные репозитории, чтобы не зависеть от Canonical. А если Canonical решит прекратить поддержку Snap, сообщество не сможет форкнуть этот репозиторий и запустить альтернативу.

Репозиторий Flatpak основан на инструменте с открытым исходным кодом ostree, и пользователи могут создавать столько репозиториев, сколько захотят. Однако существует один, наиболее популярный репозиторий FlatHub, который обладает большинством преимуществ, присущих Snap Store, таких как проверка пакетов перед добавлением для защиты пользователей и простой пользовательский интерфейс, позволяющий искать и устанавливать пакеты в веб-браузере.

2. Безопасность

В обоих форматах существует изоляция приложений для защиты данных пользователя и системы. Оба имеют механизмы для преодоления этой изоляции. Snap использует AppArrmor и Seccomp. AppArmor может гарантировать, что приложение не будет иметь доступа к каталогам, которые ему не нужны. Но настольным приложениям очень часто требуется больше разрешений, поэтому они используют режим classic, когда приложения вообще не изолированы. Такие пакеты утверждаются вручную перед публикацией, чтобы снизить риски безопасности. В качестве преимущества snap-пакеты могут иметь доступ к /proc и другим виртуальным файловым системам даже в режиме strict, что позволяет создавать snap-пакеты для многих инструментов командной строки, например htop.

Flatpak имеет изоляцию, которая больше похожа на контейнеризацию, реализованную с помощью bwrap. Каждое приложение имеет свою собственную корневую файловую систему. Все сокеты, каталоги и интерфейсы, к которым оно может получить доступ, должны быть явно предоставлены в этой файловой системе. Все, что не разрешено, ограничивается. Предполагается, что приложения будут использовать порталы для доступа к различным системным функциям, поэтому существует flatpak-spawn, кторый может выполнять код в хост-системе. Именно поэтому Mission.Center может видеть все системные процессы. Snap-приложения могут использовать порталы, но flatpak-spawn доступен только для Flatpak приложений.

Как видите, по уровню безопасности оба варианта не идеальны. Snap позволяет разработчикам настроить более гибкие ограничения для файлов и папок. Но порталы - это будущее для Flatpak и Snap. Скорее всего, в будущем приложения Linux будут иметь систему настройки разрешений как у приложений на Android.

3. Настройка разрешений

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

Flatpak позволяет настраивать практически любые разрешения с помощью приложения Flatseal. Вы можете разрешить или запретить выполнение кода на хосте, предоставить доступ к необходимым сокетам, смонтировать дополнительные папки хоста в песочницу, разрешить доступ к системным устройствам, добавить переменные окружения, настроить доступные адреса DBus и т. д.

3. Обновления

Snap был разработан для устройств IoT, которые должны работать большую часть времени без участия человека. Во многих программах постоянно обнаруживаются и исправляются уязвимости. Поэтому такие IoT-устройства, как роутеры, камеры, видео-регистраторы и т. д., должны получать обновления регулярно. Snap обновляет пакеты автоматически и проверяет наличие обновлений четыре раза в день. Это отлично подходит для IoT, но не очень удобно для настольных компьютеров. Приложение будет обновлено, даже если вы его используете. Например, вы используете Firefox, а потом видите сообщение о том, что нужно перезапустить браузер, потому что он был обновлен. Также разработчики могут вернуть версию пакета к предыдущей. Однако вы, как пользователь, можете установить только последнюю версию или использовать предыдущие версии, которые хранятся в вашей системе.

Flatpak вообще не поддерживает автоматические обновления. Но если вы установите интеграцию с GNOME Software, то ваши Flatpak пакеты будут обновляться во время загрузки системы. Обычно это быстро и удобно. С одной стороны, у вас всегда есть свежие версии программ, а с другой - обновление не прерывает рабочий процесс.

4. Используемое дисковое пространство

Файлы обоих форматов пакетов занимают много места на диске. Пакеты содержат все необходимые библиотеки и ресурсы, поэтому они не могут быть маленькими. Кроме того, snap сохраняет резервные копии предыдущих версий пакетов после обновления. По умолчанию у вас есть две предыдущие версии, но вы можете настроить хранение только одной резервной версии. Это означает, что если размер пакета составляет 1,5 Гб, snapd будет потреблять не менее 3 Гб для этого пакета. И я не рекомендую удалять резервную копию пакета, потому что если что-то пойдет не так, вы не сможете получить предыдущую версию из хранилища snapd. Преимущество Snap-пакетов в том, что они сжаты, поэтому занимают меньше места, чем обычные приложения.

Flatpak сохраняет только текущую версию пакета. Однако этот пакет представляет собой просто папку с файлами, без какого-либо сжатия. Я провел тест на двух виртуальных машинах с Ubuntu, установил 30 приложений с помощью Snap, а затем с помощью Flatpak.

Используемое пространство на корневом разделе после установки всех приложений с помощью Snap увеличилось на 8 гигабайт. Однако эту цифру следует умножить на три, поскольку по мере выхода новых версий занимаемое пространство будет расти. Три - потому что одна текущая версия и две резервные. Так что реальное потребление диска будет около 24 Гбайт. Затем я установил те же 30 приложений с помощью Flatpak, и используемое пространство увеличилось на 13 ГБ. Конечно, приложения также будут хранить кэш и пользовательские данные, но маловероятно, что в будущем эти приложения будут занимать гораздо больше места. Таким образом, я могу сказать, что Flatpak использует меньше дискового пространства, чем Snap в долгосрочной преспективе.

5. Популярность

Недавно на сайте статистики snap сообщалось, что в магазине Snap насчитывается около 8000 пакетов. Это очень много. Остальная статистика, такая как количество установок и активных пользователей, доступна только разработчикам приложений. Ubuntu использует Snap по умолчанию, поэтому у многих пользователей некоторые приложения установлены из Snap Store по умолчанию. Однако многие приложения - это браузеры, неофициальные клиенты для чего-либо или системные компоненты для Ubuntu Core. Snap Store не содержит некоторых приложений из GNOME Circle. Например, нет Console, Text Pieces и Polari.

Статистика FlatHub открыта и доступна по адресу analyzen.com. На момент написания статьи там насчитывается 2500 приложений и более 3 миллионов загрузок в день. Вы можете найти множество различных приложений, которые хорошо классифицированы. Там есть все приложения из GNOME Circle и многое другое.

Сложно определить, какой репозиторий программ более популярен, так как я не могу найти открытой статистики для Snap Store, но для меня FlatHub выглядит более живым. Хотя оба довольно популярны. Все наиболее используемые приложения можно найти как в Snap Store, так и в FlatHub.

6. Запуск приложений

Приложения в пакетах Snap удобнее запускать из командной строки, потому что для запуска достаточно просто набрать название приложения и нажать Enter. Нет необходимости постоянно писать snap run и т. д.

Имена пакетов Flatpak очень длинные потому, что они содержат не только имя пакета, но также и имя автора и префикс домена. Поэтому трюк с симлинками, как в пакетах Snap, не сработает. Но это не так уж и плохо. Если вам нужно запустить приложение Flatpak из командной строки, вы можете воспользоваться автозаполнением Bash или создать псевдоним. Приложения Flatpak предназначены для запуска из главного меню, а не для CLI.

Скорость запуска на момент написания статьи примерно одинаковая. После перезагрузки приложения Flatpak запускаются немного дольше, как и приложения Snap. Однако в моих тестах оба формата работали довольно быстро.

7. Установка без интернета

Вы можете загрузить любой пакет Snap из Snap Store или с веб-сайта, а затем установить его с опцией --dangerous локально, даже если у вас нет доступа к интернету. Это работает примерно так же, как и с deb-пакетами, но вам не нужно разрешать зависимости, потому что все необходимое уже упаковано в самодостаточный образ.

Flatpak позволяет разработчикам создавать однофайловые образы с расширением *.flatpak тоже. Однако обычно никто этого не делает, потому что пакеты Flatpak зависят от репозитория для получения обновлений. Скачать пакет с Flathub нельзя, но при необходимости можно создать USB с необходимыми пакетами и их метаданными для автономной установки.

Выводы

И Snap и Flatpak очень хорошо работают в той области, для которой они были разработаны. Snap решает большинство проблем с безопасностью и обновлениями для IoT-устройств. Большинство минусов Snap для настольных компьютеров являются плюсами для IoT-устройств. Flatpak, с другой стороны, дает больше контроля над версиями приложений, их поведением и разрешениями для конечных пользователей, что лучше для настольных систем. Давайте проведем краткое сравнение Snap vs Flatpak:

ПараметрSnapFlatpak
Полностью открытый исходный кодНет (Snap Store проприетарный)Да (Ostree Open-Source)
Пользователи могут создавать свои репозиторииНетДа
Имеет как минимум один популярный репозиторийДа (Snap Store)Да (Flathub)
Поддерживает изоляцию приложенийДа (AppArrmor, Seccomp)Да (bwrap)
Позволяет полностью отключить изоляциюДа (classic confinement)Нет (но можно смонтировать крневую файловую систему в песочницу)
Позволяет выполнять процессы вне песочницыНетДа (flatpak-spawn)
Позволяет монтировать /proc в песочницуДаНет
Можно отключить автоматические обновленияНетДа (Нет автоматических обновлений)
Поддерживает загрузку пакетов для установки без интернетаДа (одним файлом)Да (созданеие установочного USB)
Позволяет скачать предыдущую версию пакетаНет (доступна только последняя)Да (доступны все опубликованные ранее версии)
Сохраняет предыдущие версии пакета в системеДа (как минимум одну)Нет
Простой запуск приложений из командной строкиДаНет (длинные имена)
Использует сжатие для файлов приложенияДа (SquashFS, xz)Нет
Пользователи могут настроить разрешения для приложенияЧастично (в System Settings)Да (практически всё можно настроить используя Flatseal)
Содержит все приложения из Gnome CircleНетДа
Занимаемое дисковове пространство при обновлении пакета обычно значительно увеичитьсяДа (резервные копии)Нет
Позволяет запускать приложения во всех дистрибутивах, которые поддерживают эту технологиюДаДа
Имеет униваерсальные библиотеки для взаимодействия приложения с системойДа (core)Да (Runtimes)
Автоматически обновляет приложения даже если они запущеныДаНет
Загружает только измененные данные во время обновления вместо всего пакетаДаДа

На мой взгляд, в настоящее время Flatpak лучше подходит для настольных компьютеров, поскольку не имеет неактуального для них поведения, потребляет меньше дискового пространства и имеет систему разрешений, которой можно управлять в графическом интерфейсе. Конечно, у Flatpak на десктопе есть некоторые проблемы, как и у Snap, но многие из них можно исправить с помощью порталов. А что вы думаете обо всем этом? Напишите в разделе комментариев ниже!

19 комментариев к “Сравнение Snap vs Flatpak”

  1. Appimage следов в системе оставляют ровно столько, сколько и установленная программа, так как файлы конфигурации и кэши кладутся в домашнюю папку.
    Snap's хороши для проприетарного софта, когда бибилиотеки могут быть нужны очень старых версий и конфликта в системе не избежать, для опенсорсного софта мне лично кажется это всё не выстрелит как и с Appimage. Хотя интеграция в систему делает своё дело.

    Ответить
    • Мне snap очень понравился. Вот пример: Manjaro + Kdenlive. Чертовски нестабильная хрень, вылетает постоянно! Поставил Kdenlive из snap - ВСЁ! Ни единого разрыва! Работает, как швейцарские часы!

      Ответить
  2. >Программа, упакованная в snap, выполняется в изолированном контейнере
    там нет контейнеров, там есть профиля AppArmor

    >предоставляемые главным пакетом - ubuntu-snappy.
    ubuntu-core

    > В отличие от deb и rpm для установки программ snap не нужны права суперпользователя, поскольку они не трогают корневую файловую систему.
    нужно sudo и права root
    программа ставится в /snap/name-programm (переменная $SNAP)
    для записи каталог ~/snap/name-programm (переменная $SNAP_USER_DATA)
    http://vasilisc.com/snap-vs-flatpak

    Ответить
  3. >> Snap пакеты контролируются Canonical, и чтобы добавить свой пакет в репозиторий нужно подписать соглашение.
    Dustin Kirkland, входящий в команду, определяющую стратегию развития в компании Canonical, в ответ на вопросы о распространении универсальных пакетов в формате snap в обход централизованного каталога-магазина компании Canonical, представил рабочий прототип решения для создания альтернативных каталогов. Разработка использует штатный API, также применяемый на сайте snapcraft.io, и позволяет на собственных серверах размещать свои коллекции пакетов snap для всех поддерживаемых дистрибутивов.

    Ответить
  4. А вот опасения насчёт шпионства через snap-пакеты, заявка про "безопасность" не совсем стыкуется с тем, что при установке на ту же Федору требуется отключать SELinux, а в пакете (как и, в понимании автора заметки, для других дистрибутивов) отключена изоляция, которая и подаётся как фича - т.е. получаем блоб с полным доступом ко всему, до чего дотянется?

    Ответить
  5. Было бы неплохо к обзору каждого формата добавить: где хранят свои настройки программы из этих новых форматов.
    Название прикладной программы уже не вспомню, но запомнилось это так, что теперь я программы из этих новых источников не ставлю. А было вот что: стояла у меня программа из стандартных репозиториев, хранила все свои конфиги в "стандартной" папке типа ~/.config/имяпроги. Затем поставил версию то ли из flatpak то ли из AppImage. Она файлы настроек от прежней версии не увидела, насоздавала своих в своих папках, все мои многочисленные профили из старой программы в новую автоматически не перенеслись... На ручной перенос нужно много времени.
    Ну и какой смысл? Т.е. какая выгода? В результате так и продолжаю пользоваться стандартными репозиториями и launchpad'ом.

    Ответить
  6. snap работает везде где есть магазин поддерживающий его. Я использую Manjaro XFCE с магазином snap, работает как надо.

    Ответить
  7. Действительно, в подобных обзорах повсеместно упускается из виду один важнейший аспект: Snap, в отличие от Flatpak, хранит файлы с настройками приложений изолированно в своем каталоге ~/snap и при деинсталляции удаляет их вместе с приложением на манер Android.
    Flatpak же в этом отношении мало отличается от deb/rpm, то есть оставляет в домашнем каталоге "хвосты", разве что выказывая предпочтение к менее традиционным местам размещения, вроде ~/.var/app вместо ~/.config , да и то не всегда.

    Кроме того, начиная с версии 22.04, Ubuntu предлагает детальную настройку прав доступа для Snap-пакетов прямо в меню системных настроек, тогда как как Flatpak все еще не может похвастать столь тесной интеграцией с оболочкой и для управления полномочиями приложений требует установки отдельного инструмента Flatseal.

    Зато Flatpak не вносит дополнительной задержки в первый после перезагрузки запуск программ, как это делает Snap.

    Ответить
  8. Все эти костыли в конечном смысле предназначены для засирания диска у пользователя и создания ему дополнительных проблем в виде охреневания от попыток подружить программы с системой и друг с другом. И это вместо того чтобы доработать или переделать версионирование системных библиотек, для более гибкого использования.
    Я честно не понимаю, что должно быть в голове, чтобы выдавать невозможность программ работать с окружением за преимущество. Единственные кому от всего этого радость - разрабы. Можно древнюю библиотеку годами не обновлять, а можно наоборот совать глючные альфа-беты. Да и о нормальной интеграции в систему, а заодно и подстраивание под графические стили думать не нужно. Ну и что что у тебя вечер и ты решил включить темную схему? А нам по...й - у нас все сияет белым., а не нравится так лезь отдельно для нашей офигеть-какой-замечательной программы каждый раз в настройки... если мы их вообще предусмотрели...
    В общем какая технология не используется Snap ли, Flatpak или AppImage - все кажущиеся удобства лишь позволяют разрабам не парится об удобстве пользователя.
    ИМ не нужно думать о том чтобы ВЫ могли просто набрать "sudo apt install"...

    "уже нет такого уровня безопасности, программа может спокойно работать с файлами пользователя, как и другие обычные программы"
    Оххх, какой ужас!!! Программа может работать с файлами пользователя!!! Кто же такой кошмар допустил!!!
    Немедленно расстрелять! А то какая-нибудь audacity сможет отредактировать аудио, А deadbeef это аудио потом проиграть... совершенно недопустимо!!!
    Лично мой совет по безопасности для автора - запри себя в бетонном бункере, а ключ уничтожь. Надежность и безопасность - гарантированы.

    Ответить
  9. Спасибо за статью. Snap то давно знаком, и всегда сразу полностью мною удаляется при установке бубунты. А вот Флатпак мною был только что обнаружен в чистом Минте последней версии. На Синамоне (2ой гном вроде же?) установлена "из коробки".
    Тут писали про хвосты от програм, который снап за собой удаляет, а флатпак нет. Так это же огромный плюс флатпака! Будем пробовать, спасибо за статью!

    Ответить
  10. Дополню. Чистый телеграм весит 49Мб. В менеджере приложений он только как флатпак присутствует. Угадайте, сколько весит?
    958Мб будет скачано и занято после распаковки 3,1Гб. Три гига Карл! Телеграм..
    Надеюсь, что это только первое приложение так весит, и что другие будут меньше (общие библиотеки же)

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

    Ответить

Оставьте комментарий