Я тут в последнее время погрузился в изучение изолированных программ для Linux. Популярных форматов сегодня не так много: Snap, который все ругают, Flatpak, который на фоне Snap все только хвалят, и AppImage, который мог бы стать идеальным воплощением изолированного софта (если бы был хоть один сайт, на котором софт выкладывали бы сами разработчики, а не энтузиасты). В общем я решил разобраться, и в комментарии мне как раз кинули вот эту статью. Оказалось, она старовата, но я ведь уже её перевёл. Не удалять же теперь!
Snap, Flatpak, AppImage:
В чём различия между основными форматам изолированных пакетов GNU/Linux?
У каждого семейства дистрибутивов Linux свой формат пакетов (так линуксоиды привыкли называть софт, – прим.), но существует и несколько универсальных форматов, приспособленных под работу почти в любом дистрибутиве. Некоторые дистрибутивы (к примеру, EndlessOS и Fedora Silverblue) уже перешли на подобный формат софта. Уже пора? Или есть какие-то подводные камни? В чём преимущества и недостатки форматов Snap, Flatpak и AppImage? Давайте разбираться!
Как устроены независимые форматы пакетов?
Независимые форматы пакетов работают изолированно и включают в себя все необходимые для запуска программы зависимости и библиотеки. Благодаря такому подходу вы можете запускать изолированные программы практически на любом дистрибутиве. Главное, чтобы дистрибутив поддерживал структуру выбранного вами формата. Для запуска традиционных форматов (таких, как, к примеру, популярные .deb и .rpm) необходимо, чтобы в вашей системе были установлены все нужные зависимости и библиотеки, причём они должны быть адаптированны под работу в конкретной системе. Другими словами, разработчикам теперь вовсе не обязательно возится с каждым форматом и пересобирать софт под конкретный дистрибутив: достаточно упаковать все необходимые файлы и зависимости в один универсальный пакет – Snap, Flatpak или AppImage.
И раз уж разработчик самостоятельно упаковывает все нужные ему зависимости, то на него же ложится и ответственность за своевременное обновление всех этих зависимостей. Если разработчик забудет вовремя обновить библиотеки или допустить ещё какую-то ошибку, программа может перестать запускаться или стать серьёзной брешью в безопасности вашего ПК. А вот поддержкой традиционных форматов обычно занимаются разработчики дистрибутивов.
Поскольку в изолированные пакеты уже вшиты все необходимые зависимости, весят они заметно больше традиционных аналогов. Одна и та же зависимость может быть включена сразу в несколько изолированных программ (при работе с традиционными форматами одна зависимость устанавливается в вашу систему лишь раз). Кроме того, благодаря такому подходу, вы можете использовать несколько версий одной и той же программы.
Snap
Snap – это универсальный изолированный формат пакетов Linux, созданный компанией Canonical в 2014 г. Изначально новый формат был предназначен для дистрибутива Ubuntu, но теперь поддерживается и в других популярных системах (к примеру, Arch, Gentoo и Fedora уже внедрили поддержку Snap).
Сами пакеты устанавливаются через галерею приложений Snapcraft. Это централизованный магазин приложений. Тут уж сами решайте, хорошо это или плохо: с одной стороны у пользователей есть место, где можно найти любое заинтересовавшее их приложение, а с другой, сайт контролируется и поддерживается исключительно силами Canonical.
Кстати, в Snapcraft можно найти и детальное руководство о том, как самостоятельно упаковать софт в span-пакет и опубликовать его на сайте. А ещё в магазине есть как открытый софт, так и проприетарные программы. Кроме того, snap-пакеты можно использовать и для интернета вещей: на сайте есть особый раздел для приложений, ориентированных под устройства на базе Ubuntu Core (минималистичной версии Ubuntu).
По данным uAppExplorer сейчас на сайте представлено 1 894 программы.
Flatpak
Flatpak – ещё один формат изолированных программ. Однако, в отличие от Snap, он развивался как независимый проект с открытым исходным кодом. Первый релиз Flatpak состоялся в 2015 г. Изначально главными участниками проекта были разработчики дистрибутива Fedora, но со временем им заинтересовались и другие дистрибутивы. Исходный код Flatpak опубликован на GitHub.
У Flatpak тоже есть централизованный сайт, на котором разработчики могут опубликовать свои приложения. Называется он Flathub. Изначально Flathub ориентировался на публикацию открытого ПО, хотя сам формат не подразумевает ограничений для проприетарного софта, и недавно проприетарные программы всё-таки начали появляться на Flathub.
В отличие от репозитория Snap, который полностью подконтролен Canonical, Flatpak позволяет устанавливать и обновлять софт из любого удобного вам репозитория. Общие сведения о платформе Flatpak и руководство для разработчиков можно найти здесь.
Главный недостаток Flatpak – отсутствие какой бы то ни было совместимости с серверами. Flatpak нужны некоторые службы, которых в большинстве операционок для серверов попросту нет. А вот со снапами и AppImage подобных проблем нет.
Сейчас на Flathub доступно всего 418 программ, но не забывайте: у Flatpak нет единого репозитория, Flathub – это лишь один из магазинов. Так, что, скорее всего, программ в формате Flatpak гораздо больше.
AppImage
AppImage – старейший формат изолированных программ, выпущенный ещё в 2004-м (в те времена проект носил имя kik). Для запуска программ в формате AppImage не требуется установка, а сам пакет представляет из себя всего один файл, который вы запускаете привычным двойным кликом. Исходный код AppImage доступен на GitHub.
На сайте проекта можно найти список программ, доступных в формате AppImage. Всего их 502.
У AppImage вообще нет репозиториев. Так что в большинстве случаев обновлять софт придётся вручную. Иногда внутри пакета может содержаться информация о способах его обновления. В этом случае для обновления пакета вы можете воспользоваться программой AppImageUpdate.
Сравнение
Мы протестировали три программы, которые доступны сразу во всех нужных нам форматах. Одним из главных критериев для нас будет размер самого пакета (всё таки, когда речь идёт об изолированных форматах, это действительно важный показатель). Ну и для большей наглядности мы сравнили полученные показатели с форматом eopkg, который используется в дистрибутиве Solus.
VLC
Первым приложением, которое мы протестировали, был VLC – бесплатный медиаплеер с открытым исходным кодом. Чтобы избежать погрешностей, все замеры производились во время воспроизведения одного и того же файла.
Snap
Snap-пакет VLC весом в 204МБ скачивается из Snapcraft и устанавливается в папку /snap/vlc. Использование ресурсов на графике выглядит примерно так:
Flatpak
Flatpak-версия VLC скачивается напрямую из Flathub, устанавливается в папку /var/lib/app/org.videolan.VLC и весит всего 78МБ. График использования ресурсов выглядит так:
AppImage
Скачать VLC в формате AppImage можно с GitHub. Файл весит всего 53.2МБ. К сожалению, на моём ПК эта версия запускаться отказалась: не удалось загрузить модуль /usr/lib64/gio/modules/libgiognutls.so
Eopkg
У системе Solus установленный в формате eopkg плеер VLC весит 57.8МБ, а график использования ресурсов выглядит следующим образом:
LibreOffice
Мы также протестировали работу LibreOffice, одного из самых популярных офисных приложений на Linux. В рамках эксперимента мы открывали текстовый файл в формате ODT, а затем экспортировали его в формат PDF.
Snap
LibreOffice из Spancraft устанавливается в папку /snap/libreoffice и занимает 501МБ. Потребление ресурсов на графике выглядит следующим образом:
Flatpak
LibreOffice из Flatpak занимает 627МБ и устанавливается в папку /var/lib/flatpak/app/org.libreoffice.LibreOffice. Потребление ресурсов выглядит вот так:
AppImage
LibreOffice в формате AppImage можно загрузить непосредственно с официального сайта LibreOffice. Файл весит всего 220МБ. Потребление ресурсов выглядит примерно так:
Eopkg
LibreOffice в формате eopkg занимает 686.1 МБ и потребляет следующий объём ресуосрв:
GIMP
GIMP – это открытый редактор изображений (аналог Photoshop для GNU/Linux). В рамках эксперимента мы открывали одну и ту же картинку, применяли к ней одни и те же фильтры, а затем экспортировали в другой формат.
Snap
GIMP доступен в Snapcraft (пакет весит всего 192МБ и устанавливается в папку /snap/gimp), но запустить его у нас так и не получилось: не удалось найти нужный файл или каталог.
Flatpak
GIMP в формате Flatpak можно скачать с Flathub. Там он весит 214МБ и устанавливается в папку /var/lib/flatpak/app/org.gimp.GIMP. Потребление ресурсов выглядело вот так:
AppImage
Скачать GIMP в формате AppImage можно непосредственно с официального сайта GIMP. При этом сам пакет весит всего 89.7 МБ. График использования ресурсов выглядит так:
Eopkg
GIMP в формате eopkg занимает 95.7 МБ. Потребление ресурсов выглядит следующим образом:
Выводы
У каждого формата программ есть как свои преимущества, так и свои недостатки. На данном этапе каждому из проверенных форматов нужна полировка и ряд серьёзных доработок и усовершенствования. Вряд ли сейчас они готовы стать основным форматом пакетов для какого-то серьёзного дистрибутива Linux. Однако подобные проекты необходимы. Благодаря такому подходу у пользователей со временем появится возможность выбора между несколькими форматами программ, и это прекрасно!
Ну а если сравнивать форматы изолированных программ между собой, то выводы будут следующими:
- Если вам важно сэкономить место на жёстком диске, выбирайте AppImage. Пакеты в этом формате весят немного меньше.
- Самыми тяжёлыми оказались пакеты в формате Snap. Но тут всё странно: иногда они по объёму существенно превышают пакеты в формате Flatpak, но иногда весят немного меньше. Тут всё зависит от конкретного софта.
An interesting side note: Mandriva Linux developed their own software bundled system, called «Kiosk», back in 2006. They offered it as a subscription service for those who used the Live CD version of Mandriva (Mandriva One). I used it and it really was as easy to use as they advertised… one mouse-click and the software package you chose was downloaded, installed, and ready to use.
https://web.archive.org/web/20070110021926/http://kiosk.mandriva.com/about/