За последние несколько лет Linux очень сильно продвинулся на пути к обычным пользователям. Изменялся и упрощался интерфейс, добавлялись графические утилиты, исправлялись ошибки и недоработки, дистрибутивы становились лучше. Но теперь изменения добрались до системы установки пакетов. Традиционный способ устанавливать программы - загрузка и установка с репозиториев вашего дистрибутива. Причем форматы пакетов, способы развертывания и даже версии библиотек между дистрибутивами очень отличаются. Это не позволяло скачать программу из интернета и запускать ее на любом linux дистрибутиве.
Но за последние пару лет был сделан шаг и в этом направлении. Были созданы портативные приложения, которые устанавливаются одним файлом, вместе со всеми своими зависимостями и поэтому могут работать абсолютно в любом дистрибутиве, независимо от установленных там программ и библиотек. Сначала энтузиастами был разработан формат AppImage, который представляет из себя ISO образ со всеми файлами программы, затем разработчики Gnome переименовали и взялись за развитие своей платформы контейнерного запуска приложений Flatpak, и примерно в то же время компания Canonical реализовала систему установки пакетов без зависимостей - Snap, которая, как и все предыдущие, может использоваться в любом дистрибутиве.
Содержание статьи:
Чем отличается Snap vs Flatpak vs AppImage?
Как видите, в последнее время было создано очень много решений портативных программ Linux и пора разобраться что лучше и что все-таки использовать. В этой статье мы сравним snap vs flatpak vs appimage. Это самые популярные и известные технологии, хотя были и другие. Попытаемся выяснить у кого больше перспектив для развития, но сначала выясним, что представляет из себя каждая из этих технологий.
Что такое Snap?
О Snap пакетах мы слышали уже давно, сначала они использовались для встраиваемых устройств и в качестве механизма обновления Ubuntu для смартфонов. Как заявляют разработчики из Canonical эта технология была создана изначально для того, чтобы предоставить максимальную удобность обновления пользователям Ubuntu и поднять на новый уровень безопасность мобильных приложений. Основная задача - решить проблемы, неразрешимые для deb и rpm пакетов и обеспечить надежное обновление.
Все файлы программы и ее зависимостей упаковываются в один файл, включая исполняемые файлы, файлы конфигурации и нужные библиотеки. В этом плане snap vs flatpack мало чем отличаются. Пакет устанавливается в отдельном каталоге, в домашней папке пользователя и программа может иметь доступ только к этому каталогу. Поэтому программа не может создать проблем в вашей системе, заменив важные файлы других пакетов.
Программа, упакованная в snap, выполняется в изолированном окружении, ей недоступны никакие библиотеки из системы и даже конфигурационные файлы. Это реализуется с помощью профилей AppArmor. Она может работать только с тем, что установлено в пакете. Домашняя папка программы тоже в её директории. Для общения с X сервером, файловой системой, окружением рабочего стола и другими компонентами используются интерфейсы, предоставляемые главным пакетом - ubuntu-core. Если программе не разрешить доступ к этим интерфейсам она не сможет работать. Чтобы предоставить доступ программе к файлам пользователя тоже нужно использовать соответствующий интерфейс - home.
На данный момент Snap пакеты работают кроме Ubuntu, на Arch, Debian и Fedora. Также выполняется подготовка образов для Red Hat, CentOS, Elementary, LinuxMint, Gentoo, OpenSUSE. Более подробно про управление Snap пакетами читайте здесь.
Для создания snap пакетов используется специальный инструмент - snapcraft. Он позволяет относительно легко создать пакет для любой платформы. Для сборки программы нужно описать ее и необходимые зависимости в файле snapcraft.yaml и этот процесс немного сложный. Если сравнивать snap vs AppImage, то там все чуть проще, но и нет такого уровня безопасности. Но в целом это довольно интересная технология, благодаря возможностям безопасности.
Что такое AppImage?
Про Appimage мы услышали еще в 2011 году, но тогда программа не набрала популярности несмотря на все ее плюсы по сравнению с традиционными системами упаковки программ.
Здесь, также как и в snap программа упаковывается со всеми своими зависимостями в один файл. Никаких дополнительных файлов, одно приложение - один файл. Для запуска программы не нужно ничего устанавливать, просто скачайте программу из интернета, сделайте исполняемой и запустите. Все. Никакие файлы из корневой файловой системы не будут изменены.
Образ Appimage представляет из себя обычный ISO образ, в котором находятся все необходимые компоненты программы, при запуске он автоматически монтируется и выполняется программа. Поскольку для запуска не нужно никакого программного обеспечения в системе, эта технология может использоваться абсолютно в любом дистрибутиве. Хотя для запуска программы не требуются права root, тут уже нет такого уровня безопасности, программа может спокойно работать с файлами пользователя, как и другие обычные программы, а если каких-нибудь библиотек в образе недостает, программа загружает их из системы. Подробнее про AppImage читайте тут.
Для создания AppImage используется утилита appimagetool. Перед использованием инструмента вам необходимо скопировать все файлы и библиотеки, необходимые программе в специальную папку и сделать конфигурационный файл. Если делать сравнение Flatpak vs AppImage, то там все как-то более организовано и не нужно засорять свою систему.
Что такое Flatpak?
Flatpak - это тоже относительно новая система технология портативных приложений, поддерживаемых в любом дистрибутиве, созданная командой разработчиков GNOME. Раньше этот формат пакетов назывался XDG, но потом был переименован во избежание конфликтов. Он разработан, чтобы изолировать приложения от вашей системы и один от другого. Работает все больше похоже на Snap чем на AppImage. Приложение тоже выполняется в изолированном контейнере, что обеспечивает максимальную безопасность. Но подход к библиотекам здесь немного отличается. Они могут находиться в одном пакете вместе с приложением, или же находится в окружениях, общих для нескольких пакетов, такой подход гибче чем snap, и позволяет программе занимать не так много места.
В отличие от Snap, Flatpak ориентирован больше на децентрализацию. Здесь нет одного центрального репозитория или контролирующего органа. Snap пакеты контролируются Canonical, и чтобы добавить свой пакет в репозиторий нужно подписать соглашение. Flatpak работает подобно тому, как PPA в Ubuntu. Вы находите репозиторий, подключаете в систему и можете устанавливать оттуда программы.
Flatpak можно использовать в большинстве дистрибутивов, так же как и Snap. Создавать Flatpack пакеты можно подобным образом, как и snap. Тоже нужно отредактировать файл конфигурации, правда тут все немного проще. Про установку и использование Flatpak читайте здесь.
Выводы
Мы рассмотрели Snap vs Flatpak vs AppImage. Уже сейчас можно, сказать, что AppImage отходит на задний план и гонка за лидерство происходит между Snap и Flatpak. Appimage предоставляет простоту запуска программ, но здесь нет таких важных возможностей, как безопасность, а без этого сейчас никуда. Flatpak разрабатывается командой Gnome, и у них интересная затея, но за Snap взялась компания Canonical, они будут использовать эту технологию не только для обычных компьютеров, но и для серверных решений. Что будет лучше и более удобно пользователям покажет время. А вы используете портативные приложения?
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Appimage следов в системе оставляют ровно столько, сколько и установленная программа, так как файлы конфигурации и кэши кладутся в домашнюю папку.
Snap's хороши для проприетарного софта, когда бибилиотеки могут быть нужны очень старых версий и конфликта в системе не избежать, для опенсорсного софта мне лично кажется это всё не выстрелит как и с Appimage. Хотя интеграция в систему делает своё дело.
Мне snap очень понравился. Вот пример: Manjaro + Kdenlive. Чертовски нестабильная хрень, вылетает постоянно! Поставил Kdenlive из snap - ВСЁ! Ни единого разрыва! Работает, как швейцарские часы!
>Программа, упакованная в 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
Спасибо, подправил немного)
>> Snap пакеты контролируются Canonical, и чтобы добавить свой пакет в репозиторий нужно подписать соглашение.
Dustin Kirkland, входящий в команду, определяющую стратегию развития в компании Canonical, в ответ на вопросы о распространении универсальных пакетов в формате snap в обход централизованного каталога-магазина компании Canonical, представил рабочий прототип решения для создания альтернативных каталогов. Разработка использует штатный API, также применяемый на сайте snapcraft.io, и позволяет на собственных серверах размещать свои коллекции пакетов snap для всех поддерживаемых дистрибутивов.
А вот опасения насчёт шпионства через snap-пакеты, заявка про "безопасность" не совсем стыкуется с тем, что при установке на ту же Федору требуется отключать SELinux, а в пакете (как и, в понимании автора заметки, для других дистрибутивов) отключена изоляция, которая и подаётся как фича - т.е. получаем блоб с полным доступом ко всему, до чего дотянется?
Как теперь уже показывает практика, canonical не доводит свои идеи до конца ))) Так что будущее за Flatpack
Flatpack ведь работает только в третьем Гноме или на нем основанных DE. Как-то это не универсально.
snap, удобен, безопасен, пользуюсь начиная с 2017 года, с тех пор разработчики сильно продвинулись.
Зачем дезинформировать читателей?
Если не разбираетесь, уточните прежде, чем писать 🙁
Если что - я ответил на комментарий, что работает "только в gnome"
хреново ответил - так и осталось загадкой, работает только на гном или вообще не работает
Было бы неплохо к обзору каждого формата добавить: где хранят свои настройки программы из этих новых форматов.
Название прикладной программы уже не вспомню, но запомнилось это так, что теперь я программы из этих новых источников не ставлю. А было вот что: стояла у меня программа из стандартных репозиториев, хранила все свои конфиги в "стандартной" папке типа ~/.config/имяпроги. Затем поставил версию то ли из flatpak то ли из AppImage. Она файлы настроек от прежней версии не увидела, насоздавала своих в своих папках, все мои многочисленные профили из старой программы в новую автоматически не перенеслись... На ручной перенос нужно много времени.
Ну и какой смысл? Т.е. какая выгода? В результате так и продолжаю пользоваться стандартными репозиториями и launchpad'ом.
snap работает везде где есть магазин поддерживающий его. Я использую Manjaro XFCE с магазином snap, работает как надо.
Действительно, в подобных обзорах повсеместно упускается из виду один важнейший аспект: Snap, в отличие от Flatpak, хранит файлы с настройками приложений изолированно в своем каталоге ~/snap и при деинсталляции удаляет их вместе с приложением на манер Android.
Flatpak же в этом отношении мало отличается от deb/rpm, то есть оставляет в домашнем каталоге "хвосты", разве что выказывая предпочтение к менее традиционным местам размещения, вроде ~/.var/app вместо ~/.config , да и то не всегда.
Кроме того, начиная с версии 22.04, Ubuntu предлагает детальную настройку прав доступа для Snap-пакетов прямо в меню системных настроек, тогда как как Flatpak все еще не может похвастать столь тесной интеграцией с оболочкой и для управления полномочиями приложений требует установки отдельного инструмента Flatseal.
Зато Flatpak не вносит дополнительной задержки в первый после перезагрузки запуск программ, как это делает Snap.
Все эти костыли в конечном смысле предназначены для засирания диска у пользователя и создания ему дополнительных проблем в виде охреневания от попыток подружить программы с системой и друг с другом. И это вместо того чтобы доработать или переделать версионирование системных библиотек, для более гибкого использования.
Я честно не понимаю, что должно быть в голове, чтобы выдавать невозможность программ работать с окружением за преимущество. Единственные кому от всего этого радость - разрабы. Можно древнюю библиотеку годами не обновлять, а можно наоборот совать глючные альфа-беты. Да и о нормальной интеграции в систему, а заодно и подстраивание под графические стили думать не нужно. Ну и что что у тебя вечер и ты решил включить темную схему? А нам по...й - у нас все сияет белым., а не нравится так лезь отдельно для нашей офигеть-какой-замечательной программы каждый раз в настройки... если мы их вообще предусмотрели...
В общем какая технология не используется Snap ли, Flatpak или AppImage - все кажущиеся удобства лишь позволяют разрабам не парится об удобстве пользователя.
ИМ не нужно думать о том чтобы ВЫ могли просто набрать "sudo apt install"...
"уже нет такого уровня безопасности, программа может спокойно работать с файлами пользователя, как и другие обычные программы"
Оххх, какой ужас!!! Программа может работать с файлами пользователя!!! Кто же такой кошмар допустил!!!
Немедленно расстрелять! А то какая-нибудь audacity сможет отредактировать аудио, А deadbeef это аудио потом проиграть... совершенно недопустимо!!!
Лично мой совет по безопасности для автора - запри себя в бетонном бункере, а ключ уничтожь. Надежность и безопасность - гарантированы.
Спасибо за статью. Snap то давно знаком, и всегда сразу полностью мною удаляется при установке бубунты. А вот Флатпак мною был только что обнаружен в чистом Минте последней версии. На Синамоне (2ой гном вроде же?) установлена "из коробки".
Тут писали про хвосты от програм, который снап за собой удаляет, а флатпак нет. Так это же огромный плюс флатпака! Будем пробовать, спасибо за статью!
Дополню. Чистый телеграм весит 49Мб. В менеджере приложений он только как флатпак присутствует. Угадайте, сколько весит?
958Мб будет скачано и занято после распаковки 3,1Гб. Три гига Карл! Телеграм..
Надеюсь, что это только первое приложение так весит, и что другие будут меньше (общие библиотеки же)