...

Snap что это за программа и нужна ли она

Плоские пакеты и оснастки и почему это не так плохо, как многие думают (Snap, Flatpak, AppImage)

Первым появившимся из вышеперечисленных был Appimage, прообраз которой был создан командой Саймона Питера в 2004 году.

В iso-образ с файловой системой SquashFS «зашиты» все необходимые для работы библиотеки и сам бинарный файл. Это плохо сказывается на отзывчивости, однако запуск приложения происходит практически без дополнительных манипуляций. Из минусов такого подхода:

  • Отсутствуют источники распространения — нет единого репозитория.
  • Минимальная интеграция в рабочий стол (например, нет ярлыка рабочего стола).
  • Отсутствует механизм обновлений.

На основе концепции AppImage, Александром Ларссоном был создан Flatpak (изначально называлась xdg-app). Такая концепция предполагала меньшее использование дискового пространства за счёт использования «сред выполнения» — базовых библиотек, необходимых для запуска всем приложениям.

Вместо образов SquashFS Flatpak использует git-подобную файловую систему OSTree, что позволяет более гибко управлять версиями.

У Flathub есть свой центральный репозиторий, также есть возможность создавать дополнительные репозитории, как это, например, делают разработчики дистрибутива elementary.

Snap — технология, придуманная в недрах компании Canonical, разработчика популярного дистрибутива Ubuntu. Также, как и AppImage, snap-пакет является образом диска с файловой системой SquashFS. Однако, за появление в системе такого пакета отвечает демон snapd тесно связанный с системой инициализации systemD и модулем ядра AppArmor.

Статистика распространения пакетов

  • Snap: ~6900 пакетов
  • AppImage: ~1320 пакетов
  • FlatHub: ~1618 пакетов
  1. Некоторые из пакетов отсутствуют на сайте AppImagHub. Например, IDE Theia Blueprint на официальном сайте https://theia-ide.org/docs/blueprint_download/ запакована в AppImage, при этом не добавлена на сайт AppImagHub.
  2. Ввиду большого количества пользовательских репозиториев таких как, Beta, kdeapps, Elementary, Fedora не представляется возможным узнать точное количество Flatpak-пакетов.
  3. Некоторые пакеты snap, отсутствующие в репозитории Snapcraft не учитываются. Например: серверный медиаплеер Diffuse: https://github.com/icidasset/diffuse/releases/
  4. Предположительно, статистика Snap охватывает каналы -edge, -beta, -candidate и другие. К примеру, у Nextcloud https://snapcraft.io/nextcloud таких каналов 22.

Скорость использования

Дистрибутив: Ubuntu 21.10

Пакет: Firefox 94

Холодный старт:

* Нативный пакет: 8 секунд
* AppImage: 10,5 секунд
* Flatpak: 7,5 секунд
* Snap: 21 секунда

Горячий старт:

* Нативный пакет: 2,9 секунд, 207 МБ RAM
* AppImage: 4,9 секунд, 249 МБ RAM
* Flatpak: 2,9 секунд, 233 МБ RAM
* Snap: 8,5 секунд, 261 МБ RAM

Дистрибутив: Manjaro

Холодный старт:

* Нативный пакет: 5 секунд
* Flatpak: 6 секунд
* Snap: 18 секунд

Горячий старт:

* Нативный пакет: 2 секунды
* Flatpak: 3 секунды
* Snap: 3 секунды

Тестовая машина 1

* Kubuntu 18.04
* Kernel 4.15.0-118-generic
* Snapd 2.46.1+18.04
* Пакет: Chromium Stable 85.X
* Сжатие snap-пакета: LZO

Холодный старт:

* Нативный пакет: 1,7 секунд
* Snap: 3,1 секунд

Горячий старт:

* Нативный пакет: 0,6 секунда
* Snap: 0,6 секунд

Тестовая машина 2

* Fedora 32 Workstation.
* Kernel 5.8.13-200.fc32
* Snapd version 2.45.3.1-1.fc32
* Пакет: Chromium Stable
* Сжатие snap-пакета: LZO

Холодный старт:

* Нативный пакет: 15,3 секунд
* Snap: 10,1 секунд

Горячий старт:

* Нативный пакет: 1,3 секунды
* Snap: 1,3 секунды

Исходя из тестирования выше можно отметить, следующие тенденции:

а) Flatpak по скорости запуска подбирается к нативным пакетам, Appimage проигрывает по скорости использованию ресурсов нативным пакетам и Flatpak (можно сказать, что не очень существенно учитывая, объём среды выполнения и самого пакета у Flatpak), скорость запуска snap сильно отстаёт от скорости запуска Flatpak и AppImage:

б) Скорость запуска snap сильно зависит от используемого алгоритма сжатия (более быстрым и предпочтительным считается LZO). В пользу этого также говорит и ещё одно тестирование, проведенное по пакетам snap: https://snapcraft.io/blog/kde-snaps-performance-revving-up

Использование и недостатки

Управление snap и flatpak осуществляется через консольную утилиту.

Среди недостатков в snap и flatpak пользователи часто отмечают «засорение» системы.

В Flatpak это происходит следующим образом: после удаления пакета среда выполнения привязанная только к нему не удаляется. Также при удалении не удаляются данные.

Для удаления неиспользуемых сред выполнения воспользуйтесь командой:
flatpak remove —unused

Для очистки данных уже удалённых приложений воспользуйтесь командой:
flatpak remove —delete-data

У snap «засорение» происходит другим образом: При обновлении пакета snap сохраняет резервную копию предыдущего пакета, с предыдущими настройками, однако отключает его, делает неактивным.

Для полного просмотра всех пакетов установленных в системе:
snap list —all

Для удаление неактивных воспользуйтесь скриптом отсюда: https://superuser.com/a/1330590

Про AppImage давно нет новостей и на это есть причина: Саймон Питер, основной разработчик AppImage, сейчас работает над helloSystem, системой повторяющей логику macOS, но на ядре и с окружением BSD (используется FreeBSD).

Последнее, что мне удалось найти — небольшой скрипт, который изменяет AppImage или собирает AppDir (структура каталогов) в готовый образ с файловой системой с более высокой степенью сжатия, чем SquashFS — dwarfs.

Сам скрипт находится здесь: https://github.com/Phantop/appdwarf

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

Пара вещей про которые стоит упомянуть:

Ubuntu snap – что это такое и с чем его едят?

Относительно недавно в Ubuntu появился новый инструмент — снапы (от англ. snap), но что это такое и как их использовать знают далеко не все пользователи.

Введение в снапы

Представим вполне реальную ситуацию. Пользователь устанавливает самую новую версию Ubuntu, пусть это будет версия 16.04 — именно в ней и появились впервые снапы по умолчанию. По определенным причинам пользователь отключает обновления. Такая ситуация не надумана. Мы все знаем, что после обновления системы Ubuntu, к сожалению, не всегда работает корректно и даже не всегда загружается.

Пользователя все устраивает и он спокойно себе использует дистрибутив некоторое время. Через несколько лет пользователь хочет установить новую версию приложения, например, браузера и обнаруживает, что он не может этого сделать.

Почему? Да потому что его дистрибутив устарел. для установки приложения нужны новые версии библиотек, а для их установки нужно обновить уже установленные пакеты. Иногда процесс настолько масштабный, что приходится обновлять дистрибутив. А ведь мы знаем, что пользователь не хочет этого делать по ряду причин, да и это опасно: система может быть разрушена нарушения связей между программами и библиотеками.

Вторая ситуация. Пусть у пользователя самая новая версия дистрибутива (на данный момент — это 18.10) — чтобы никто не упрекнул нас в надуманности ситуации. Мы знаем, что у традиционных пакетов есть зависимости и конфликты. Иногда нельзя установить то или иное приложение, поскольку его библиотеки конфликтуют с библиотеками уже установленными в системе.

Обе проблемы настолько обширны, что разработчики Ubuntu изобрели снапы. Все мы знакомы с понятием пакета. Пакет содержит саму программу, а также различные вспомогательные файлы — документацию, ресурсы (картинки, например), файлы локализации, сценарии Но пакет не содержит всего, что нужно для работы этой программы в системе. Например, если программе для работы нужна библиотека GL, то просто в пакете «прописывается» зависимость — нужно установить пакет для работы этого пакета. При установке программы менеджер пакетов (apt) производит разрешение зависимостей — устанавливает все необходимые для работы этой программы пакеты.

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

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

При подготовке материала использовались источники:
https://pingvinus.ru/note/snap-flatpak-appimage-highlights
https://www.xelent.ru/blog/snapy-v-ubuntu-chto-eto-takoe-i-s-chem-ego-edyat/

Оцените статью