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

Snap vs AppImage.


Хочется поделиться с вами мыслями и сравнить очень близкие по духу два способа доставить софт на desktop - AppImage и Snap. Классическое распространение linux софта через репозитория с deb (или rpm) пакетами обладает массой плюсов, но, стоит признать, есть и недостатки. Сопровождающие пакетов (мантейнеры) - это люди, которые проверяют с каждой новой версией своего подопечного и пакуют его с размещением в официальном репозитории. С ростом количества софта нагрузка на вечно не хватающих сопровождающих только возрастает и этот человеческий фактор является главным сдерживающим моментом и жирным минусом в стройной системе "официальный репозиторий". Вот почему популярны сторонние репозитория от авторов нужной вам программы и/или Personal Packages Archive (PPA) на Launchpad. Но разработчики всегда искали выход из сложившейся ситуации и Snap с AppImage нужно воспринимать именно как попытку принести на десктоп Linux систем свежий софт без сложного и утомительного визирования тысяч тонн постоянно обновляемого софта через сопровождающих-стражей-официального-репозитория.

Общее у Snap и AppImage

Оба формата представляют собой сжатый образ (архив) SquashFS, который в систему никогда не распаковывается в отличие от deb. В данном месте лучше прочесть статью Snap vs Deb, если вы слабо представляете как детально происходит процесс установки софта через механизм apt install. Данный образ SquashFS призван решить следующие задачи:

  • Самодостаточность. Английские слова portable и self-contained присутствуют в описаниях технологий snap и appimage не спроста. Задача, которая ставилась разработчиками перед данными форматами, заключалась в том, чтобы реализовать парадигму "всё своё ношу с собой". Оба формата НЕ должны ожидать от системы наличия необходимого. Внутри образа SquashFS программа должна идти с теми библиотеками, фреймворками и т.д, что нужно ей для корректной работы.
  • Без установки. Классической установки, как в случае с deb, при использовании AppImage или Snap - нет! Нет процесса распаковки файлов и размещения их в системе, так как это предписывает стандарт Filesystem Hierarchy Standard (FHS). Пакеты snap и appimage банально монтируют аля mount --bind.


Различия между Snap и AppImage

Здесь начинаются отличия, которые нужно понять на уровне ДНК. Программа из пакета 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 пакете

Дата последней правки: 2018-06-13 15:33:44

RSS vasilisc.com   


Разделы

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