Не секрет, что для многих пользователей, перешедших на Linux, особой проблемой является поиск необходимого софта. В винде это обычно решается походом на всякие Софтпорталы, торрент-трекеры, в редких случаях — на официальные сайты нужных программ. В Linux с этим всё гораздо проще и порядочнее. Есть система репозиториев, откуда софт можно установить несколькими разными способами, и, где есть гарантии, что этот софт не содержит в себе чего-то вредоносного. Плюс — никакой рекламы. Однако концепция репозиториев хоть и является одной из лучших черт Линукса, она не всегда удобна. Нужной программы может не оказаться в репозитории вашего дистрибутива, или же она вообще официально собирается лишь под один конкретный. Ещё пару лет назад это было проблемой, но теперь ситуация изменилась в лучшую сторону, благодаря так называемым самодостаточным пакетам — Flatpak, Snap и Appimage. Пришло время рассмотреть их в деталях.
Что является самодостаточностью? Для начала стоит разобраться с самим понятием «пакет с программой». Пакет — это архив, в котором находится программа, а также некий управляющий файл, который размещает программу в нужном каталоге, устанавливает для неё зависимости (дополнительные пакеты, требующиеся для работы) и даёт указание пакетному менеджеру следить за программой, в результате чего если вы захотите удалить программу — пакетный менеджер удалит всё, что с ней связано. Пакеты в репозитории вашего дистрибутива собраны с учётом его особенностей, версий других пакетов в репозитории и так далее. Они созданы, чтобы работать конкретно в вашем дистрибутиве, и они НЕ обязаны работать в других. Хотя и есть способы их там установить. В случае с самодостаточными пакетами, программа собирается в нейтральном окружении, и таскает с собой все необходимые зависимости. Это идёт в ущерб размеру пакета и занимаемому месту на диске, но позволяет устанавливать и использовать программу в абсолютно любом дистрибутиве Linux, при чём его можно установить параллельно с этой же программой из репозитория и они никак не будут конфликтовать! Важно понимать, что эти самые самодостаточные пакеты не являются заменой штатному пакетному менеджеру и программам в репозиториях дистрибутива. Они лишь дополняют их.
На сегодня существует несколько вариантов самодостаточных пакетов, отличающихся методом работы, установки и использования. Остановимся на тройке лидеров: Flatpak от компании Red Hat, Snap от компании Canonical и Appimage, развиваемый сообществом.
Flatpak
Изначально эта технология называлась xdg-app, её автором является Александер Ларссон — сотрудник компании Red Hat, принимающий активное участие в разработке GNOME. По своей сути Flatpak — ни что иное как контейнер, в котором программа целиком и полностью изолирована как от основной системы, так и от других таких же программ. Изоляция программы осуществляется с использованием штатных технологий ядра Linux, таких как cgroups, пространства имён и SElinux. Вывод графики осуществляется через Wayland, хотя есть и режим совместимости с Xorg (менее безопасен), а звук выводится через PulseAudio. Сам по себе контейнер с программой минималистичен, и содержит лишь специфичные библиотеки, необходимые для конкретной программы. Всё остальное, например библиотеки Qt, GTK и подобное, распространяется в виде рантаймов (runtime) — специальных архивов, которых может быть несколько в системе (например могут сосуществовать Qt 5.6 и Qt 5.9, или несколько разных версий GTK). Для распространения пакетов используется та же классическая система репозиториев, но немного иная. Готовый flatpak-пакет можно установить и вручную, но это не совсем удобно. Самым крупным репозиторием для Flatpak является Flathub — хранилище, куда разработчики приложений могут загружать свои flatpak-пакеты, что позволит им не только упростить тестирование своих приложений, но и быстрее доставить их пользователю. Отдельно существует репозиторий KDE Apps, в котором, как понятно из названия, находятся программы от проекта KDE. Да да. Именно оттуда вы можете легко установить, например, Dolphin, или браузер Falkon. Чтобы начать пользоваться Flatpak, его необходимо установить. В некоторых дистрибутивах (например Linux Mint 18.3) он уже установлен по умолчанию. Для Debian это будет так:
sudo apt install flatpak
Далее подключим репозитории Flathub и KDE Apps:
flatpak remote-add —if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak remote-add —if-not-exists kdeapps —from https://distribute.kde.org/kdeapps.flatpakrepo
Обновление списка пакетов выполняется командой flatpak update. Для того чтобы посмотреть список доступных пакетов в конкретном репозитории (например Flathub) нужно ввести команду:
flatpak remote-ls flathub
Более подробно о доступных командах можно узнать из вывода flatpak —help. Но главное — как установить программу? В указанной выше команде из списка выберите то, что нужно, и установите командой (на примере GIMP):
flatpak install flathub org.gimp.GIMP
Установится свежая версия графического редактора GIMP. Но согласитесь — не самая удобная операция установки? Не беда. Поддержка Flatpak уже есть во многих графических менеджерах приложений. В том же Linux Mint 18.3 пакеты из Flathub доступны прямо в менеджере приложений.
Если вы хотите установить скачанный отдельно flatpak-пакет, например, с LibreOffice, то команда для установки будет такой:
flatpak install —bundle /путь/к/пакету/LibreOffice.flatpak
А теперь о плюсах и минусах:
Плюсы:
- Полная изоляция от основной системы и других приложений;
- Поддержка современных технологий в Linux (например Wayland);
- Децентрализованность (можно в том числе создать свой репозиторий с Flatpak);
- Доступен в подавляющем большинстве дистрибутивов Linux;
- Разрабатывается Red Hat совместно с сообществом.
- Имеет возможности для распространения игр, в том числе виндовых со вшитым Wine.
Минусы:
- Рантаймы. Их размер достигает почти 300 мегабайт, и сохраняются они на корневом разделе. Поэтому рекомендуется выделить достаточно места под программы во Flatpak;
- Поддержка в графических менеджерах приложений есть только в свежих версиях оных, поэтому на некоторых дистрибутвах придётся использовать терминал для работы с Flatpak;
- Плохо интегрируется с рабочим столом и штатным оформлением;
- Не самый удобный интерфейс командной строки;
- Ориентирован только на десктоп.
Snap
Snap — разработка Canonical, компании, разрабатывающей дистрибутив Ubuntu. Изначально эта технология именовалась Click, и предназначалась для мобильной редакции Ubuntu, дабы заменить классические deb-пакеты. После того как Canonical представила технологию Snappy Ubuntu Core, монолитный базовый образ системы, обновляющийся атомарно (целиком), технология click-пакетов получила развитие в виде Snap. По своей сути это также контейнер с программой и необходимыми зависимостями, однако в отличии от Flatpak, Snap для изоляции использует Apparmor, и более тесно работает с основной системой, включая работу графики через Xorg. Базовое окружение строится на компонентах ubuntu-core, который устанавливается при первой установке любого snap-пакета. Скачанный snap-пакет при помощи systemd монтируется в каталог /snap, как образ диска, и уже оттуда происходит запуск программы. Пакеты в формате Snap распространяются через централизованный каталог Snap Store, хотя Canonical заявляла, что любой желающий может создать хранилище для snap-пакетов. Также в отличии от Flatpak, Snap ориентирован и на распространение проприетарных программ, в том числе платных.
Snap-пакет имеет значительно больший размер, чем пакет в формате Flatpak, так как таскает всё необходимое в себе. При этом если скачанной программе требуются те же самые компоненты, которые уже есть в скачанном snap-пакете с другой программой — качаться заново они не будут. Для установки пакетов из Snap Store, без использования sudo, требуется регистрация аккаунта Ubuntu, и при первой попытке установить программу с помощью snap install — будет выдан запрос на логин и пароль. Можно залогиниться сразу:
sudo apt install snapd
sudo snap login вашлогин
Далее можно ставить программы:
snap install имяпрограммы
Для поиска используется команда find:
snap find
Чтобы посмотреть список установленных snap-пакетов, введите:
snap list
Чтобы обновить программу, установленную из Snap, наберите команду:
snap refresh имяпрограммы
и для удаления:
snap remove имяпрограммы
Программа может быть установлена из нескольких каналов: stable, candidate, beta и edge, в порядке убывания стабильности и повышения свежести. Для этого нужно добавить соответствующий ключ в команду установки пакета:
snap install —edge gimp
Если же вы скачали Snap-пакет с сайта разработчика, то для его установки не потребуется аккаунт Ubuntu, только режим разработчика:
snap install —devmode /путь/к/пакету/
Помимо этого имеются ещё две интересные команды: snap buy, с помощью которой можно купить платное приложение в пакете snap, и snap revert, с помощью которой можно откатить пакет к предыдущей версии. Последняя команда очень полезна при появлении серьёзных багов в новой версии программы. Это важное отличие от Flatpak, хотя технология OStree, на которой тот построен, позволяет более гибко откатывать изменения, подобно Git. Но в настоящее время этот интерфейс для Flatpak в разработке, а в Snap доступен уже сейчас. Более подробно о командах можно узнать из man-страницы snapd:
man snap
Это что касается интерфейса командной строки. Многие графические менеджеры пакетов, включая таковые в GNOME и свежих версиях KDE, поддерживают Snap из коробки, достаточно лишь ввести название интересующей программы в строку поиска и установить как обычно.
Плюсы:
- Лучше адаптирован для Ubuntu и производных;
- Более плотная интеграция с рабочим столом;
- Ориентирован в том числе и на проприетарное коммерческое ПО;
- Простой синтаксис команд;
- Поддержка отката пакета к предыдущей версии;
- Не требует внешних рантаймов (за исключением ubuntu-core);
- Ориентирован не только на десктоп, но и на сервера, мобильные платформы и IoT (интернет вещей).
Минусы:
- Централизован, требует регистрации аккаунта Ubuntu для установки без прав администратора;
- Не полностью изолируется от системы и других программ;
- Вследствие использования прямого доступа к Xorg — создаётся потенциальная угроза захвата ввода (особенно опасно при запуске вредоносного пакета);
- Меньше распространён в сторонних дистрибутивах, чем Flatpak;
- Разработка ведётся Canonical, влияние сообщества минимально.
Appimage
Данный формат пакетов был впервые представлен в далёком 2004 году под именем klik. Представлял он из себя ссылку, по которой загружался «рецепт», который в свою очередь брал пакеты из Debian Stable и перепаковывал их в особый формат .cmg, который не зависел от конкретного дистрибутива. Однако klik не использовал файловую систему в пространстве пользователя (FUSE), потому одновременно можно было запустить лишь 8 таких пакетов, что связано с ограничениями ядра. Впоследствии, эта технология была переименована в PortableLinuxApps, а затем — в Appimage, также существенно изменившись внутренне. Пакет в формате Appimage, говоря простым языком — это самый обычный образ диска, который при запуске монтируется поверх FUSE, а благодаря скрипту внутри — запускается исполняемый файл программы. Все необходимые для работы программы компоненты находятся внутри пакета Appimage, кроме тех, которые поставляются штатно с дистрибутивом. Пользователю достаточно скачать программу в формате Appimage, дать ей права на исполнение (в Свойствах, вкладка Права, поставить галочку на «Разрешить выполнение как программы») и запустить двойным кликом. Некоторые программы при запуске предлагают создать ярлык в меню приложений. Appimage взяли на вооружение очень многие разработчики свободного ПО, например Krita, Kdenlive, Darktable и множество других. И хотя существует централизованное хранилище для пакетов Appimage — разработчики не совсем поощряют его использование. По их мнению, сам разработчик программы должен запаковать её в Appimage (ибо кто как не он знает все её особенности?) и затем распространять её у себя на сайте. Крупным достоинством Appimage является отсутствие внешних рантаймов, что позволяет таскать приложения на флешке и запускать на компьютерах с любыми дистрибутивами Linux. Поэтому с этой точки зрения — Appimage самый самодостаточный формат. Однако есть у него как большие достоинства, так и большие недостатки:
Плюсы:
- Не требует установки, достаточно дать права на выполнение и запустить программу двойным кликом;
- Не требует никаких дополнительных рантаймов и прочих комплектов библиотек, всё необходимое уже включено в пакет;
- Высокая надёжность вследствие простоты структуры пакета;
- Разрабатывается сообществом и не зависит от корпораций;
Минусы:
- Полное отсутствие изоляции. В настоящее время имеется экспериментальная песочница для Appimage, также возможна изоляция при помощи Firejail, однако пока программы в Appimage имеют прямой доступ ко всему что есть в системе;
- Отсутствие нормального централизованного хранилища: Appimage предполагает что разработчик программы должен сам сделать такой пакет и распространять его на своём сайте;
- Как следствие предыдущего пункта — только ручное обновление, путём скачивания новой версии пакета. Ведётся разработка метода автоматического обновления;
- Большинство пакетов не поддерживают Wayland;
- Не слишком качественная интеграция с рабочим столом: программы на Qt не используют системный стиль в KDE, а приложения на GTK+ в редких случаях могут иметь проблемы с темой оформления.