Хочется поделиться с вами мыслями и сравнить очень близкие по духу два способа доставить софт на desktop - AppImage и Snap. Классическое распространение linux софта через репозитория с deb (или rpm) пакетами обладает массой плюсов, но, стоит признать, есть и недостатки. Сопровождающие пакетов (мантейнеры) - это люди, которые проверяют с каждой новой версией своего подопечного и пакуют его с размещением в официальном репозитории. С ростом количества софта нагрузка на вечно не хватающих сопровождающих только возрастает и этот человеческий фактор является главным сдерживающим моментом и жирным минусом в стройной системе "официальный репозиторий". Вот почему популярны сторонние репозитория от авторов нужной вам программы и/или Personal Packages Archive (PPA) на Launchpad. Но разработчики всегда искали выход из сложившейся ситуации и Snap с AppImage нужно воспринимать именно как попытку принести на десктоп Linux систем свежий софт без сложного и утомительного визирования тысяч тонн постоянно обновляемого софта через сопровождающих-стражей-официального-репозитория.
Оба формата представляют собой сжатый образ (архив) SquashFS, который в систему никогда не распаковывается в отличие от deb. В данном месте лучше прочесть статью Snap vs Deb, если вы слабо представляете как детально происходит процесс установки софта через механизм apt install
. Данный образ SquashFS призван решить следующие задачи:
mount --bind
.
Здесь начинаются отличия, которые нужно понять на уровне ДНК. Программа из пакета AppImage живет в мире discretionary access control (DAC), как и остальной классический linux desktop. То есть когда вы запускаете программу, пришедшую к вам из deb пакетов или AppImage, то в памяти программа становится понятием процесс и наследует права вашей учётной записи. Если вы можете зайти в папку /share/folder_x/ и права доступа позволяют прочесть файл secret.txt, то и программа сможет это сделать.
Программы в snap пакете - это mandatory access control (MAC). MAC строже DAC. Кроме прав доступа на каталоги и файлы, программу ограничивают профилем мандатного доступа AppArmor, который вы можете найти по адресу /var/lib/snapd/apparmor/profiles/. Так же программу контролирует seccomp и разрешается вызывать только "белые" системные функции. Образно говоря, в целях безопасности и изолирования софта друг от друга и от системы, программы в snap находятся в темницах и видят белый свет только через разрешённые interfaces.
Когда снапкрафтер пытается создать свой первый пакет snap, то у него может сразу не получиться и вначале рекомендуется сосредоточиться на самодостаточности и сделать так чтобы программа просто работала, хотя бы без профилей AppArmor. Свой пакет себе в систему рекомендуется на первых порах ставить через sudo snap install --classic my_app.snap
, отключив систему ограничений. Но такой пакет НИКОГДА не примут в хранилища для других пользователей. Снапкрафтер обязан довести свою работу до обеспечения самодостаточности И изоляции программы.
Программу в snap пакете, поставленный через ключ classic, можно сравнить с программой в AppImage формате. То есть без механизма ограничений (security confinement) программа в snap очень похожа на программу в AppImage. Но, как сказано выше, такой пакет не примут в хранилища.
Программы в snap пакете работают под присмотром системы мандатного доступа и вам гарантируется безопасность и поведение в рамках профиля. Программы в AppImage ограничены обычной системой прав доступа, как и программы в deb. Можно сказать что AppImage ближе к deb, чем к snap. AppImage роднит со snap только самодостаточность и всё.
Мнение против snap пакетов. В защиту моя статья Контр доводы к словам Кайла Кина.
Snap vs Flatpak
Почему snap? Интервью с разработчиком Krita
Почему snap? Интервью с разработчиком Rocket.Chat
Почему snap? MySQL в snap пакете