Flatpak - это универсальная система упаковки приложений для Linux, которая стремится решить проблему множества форматов пакетов. Она позволяет разработчикам создавать единый пакет приложения, который может быть установлен на различных дистрибутивах Linux без необходимости перекомпиляции.
Одна из самых больших проблем с Linux — это то, что у нас слишком много дистрибутивов, и каждый из них использует свой собственный формат пакетов. Это создает огромные проблемы для разработчиков приложений, которые должны поддерживать множество различных форматов, чтобы их программное обеспечение работало на всех дистрибутивах.
— Линус Торвальдс, создатель Linux и фанат продукции от Mac
Flatpak — это технология, которая стремится решить проблему множества форматов пакетов и упростить дистрибуцию графических приложений на различных дистрибутивах Linux.
-
Flatpak использует единый формат пакетов для всех дистрибутивов Linux. Это означает, что разработчики могут создавать один пакет, который будет работать на любой системе, поддерживающей Flatpak, независимо от используемого дистрибутива.
-
Flatpak изолирует приложения от основной системы, используя контейнеры. Это позволяет приложениям работать независимо от версий библиотек и зависимостей, установленных в основной системе. Таким образом, разработчикам не нужно беспокоиться о совместимости с различными версиями библиотек на разных дистрибутивах.
-
Flatpak использует централизованное хранилище приложений, называемое Flathub. Разработчики могут публиковать свои приложения в Flathub, и пользователи смогут легко устанавливать их на любом дистрибутиве, поддерживающем Flatpak. Это устраняет необходимость в создании и поддержке пакетов для каждого дистрибутива.
Flatpak изначально назывался XDG-App. В 2015 году проект был переименован в Flatpak, чтобы лучше отразить его цель — предоставление унифицированного способа распространения графических приложений на различных дистрибутивах Linux.
Flatpak — проект, разрабатываемый сообществом с поддержкой ряда компаний и организаций. Основателем и ведущим разработчиком является Александр Ларссон (Alexander Larsson).
Александр Ларссон — опытный шведский разработчик, создатель Flatpak. Он долгое время работал в Red Hat и известен своим вкладом в развитие среды рабочего стола GNOME, а также фреймворка мультимедиа GStreamer.
Проект Flatpak поддерживают несколько крупных компаний и организаций, среди которых:
- Red Hat — одна из ключевых компаний, активно участвующих в развитии Flatpak.
- Endless — компания, известная своими Linux-дистрибутивами, также является спонсором Flatpak.
- Другие организации и сообщества — включая GNOME Foundation и другие структуры, заинтересованные в развитии свободного программного обеспечения.
Поддержка со стороны крупных компаний дает уверенность в том, что проект неожиданно не загнется, заставив пользователей искать альтернативу.
Flatpak доступен для установки в большинстве дистрибутивов из стандартных репозиториев. Стоит отметить, что в дистрибутивах от Red Hat типа Fedora, Flatpak является предустановленным, и почти все графические приложения ставятся через него.
Благодаря Steam Deck самым популярным дистрибутивом на десктопе стал Steam OS, основанный на Arch Linux (можно сказать, что и Arch Linux теперь занимает больше половины рынка). Из его особенностей помимо использования Btrfs (причем корень монтируется в ro) можно отметить использование Flatpak как единственного рекомендованного способа установки приложений:
How do I install apps?
Currently, this is a stock KDE Plasma experience in terms of installing software. You can use the Discover Software Center (on the taskbar) to install apps. The Discover Software Center installs applications using flatpak technology (more on this below) onto the writeable portion of your drive. If you know your way around a Linux command line you can directly use flatpak commands to install applications. Common browsers, music players, and other kinds of applications are already available via these methods, and we expect that many more will be updated, fixed, and available after launch.
И это при том, что Steam Deck, являясь по сути обычным Arch Linux, путем нехитрых манипуляций позволяет ставить пакеты через pacman.
Flatpak выделяется рядом ключевых преимуществ:
- Общие рантаймы — это наборы общих компонентов, которые используются различными приложениями. Благодаря этому Flatpak значительно выигрывает перед AppImage, позволяя экономить дисковое пространство и трафик. Библиотеки, которые содержат рантаймы, шарятся в RAM между приложениями.
- Поддержка дельта-обновлений, обеспечивающих частичное обновление приложений, что сокращает объем загружаемых данных.
- Изоляция приложений в контейнерах, обеспечивающая повышенную безопасность и стабильность работы.
- Централизованное хранилище пакетов Flathub, где всегда доступны актуальные версии приложений. Так же, что важно, вы можете подключить сторонние репозитории.
- Из неочевидных преимуществ Flatpak нужно упомянуть, что даже в стандартных репозиториях дистрибутивов ментейнерами даже популярных приложений являются сторонние разработчики-энтузиасты, в то время как во Flathub приложения часто поддерживают их разработчики (как тот же Telegram).
- Так же приложения из Flatpak устанавливаются строго для пользователя в директорию
~/.var
, а не системно, те им в приниципе не нужны root-права ни во-время установки, ни после. Там же хранятся их конфиги.
Дельта-обновления — это одно из главных преимуществ Flatpak. Они позволяют экономить время и пропускную способность сети, загружая только изменения между текущей и новой версиями приложения, а не весь пакет целиком.
Как работают дельта-обновления:
Для delta-обновлений в Flatpak используется библиотека ostree. Принцип работы:
- Сравнение файлов: При обновлении приложения Flatpak сравнивает файлы текущей версии с файлами новой версии.
- Генерация дельт: Flatpak генерирует "дельты" — наборы изменений, которые нужно применить к текущим файлам, чтобы получить новые файлы.
- Загрузка дельт: Дельты загружаются с сервера и применяются к локальным файлам.
- Обновление: После применения дельт приложение обновляется до новой версии.
Преимущества дельта-обновлений:
- Экономия пропускной способности: Загружаются только изменения, что снижает потребление интернет-трафика.
- Быстрое обновление: Обновление происходит быстрее, так как загружается меньше данных.
- Экономия места: Меньше данных загружается, что экономит место на диске.
Контейнеры — это технология виртуализации на уровне операционной системы, которая позволяет запускать приложения в изолированных средах. В отличие от виртуальных машин, контейнеры используют ядро хост-системы, что делает их более легковесными и быстрыми.
-
Изоляция процессов: Контейнеры изолируют процессы приложений друг от друга и от основной системы. Это достигается за счет использования механизмов ядра Linux, таких как namespaces и cgroups.
-
Namespaces: Namespaces создают изолированные пространства имен для различных ресурсов, таких как процессы, сеть, файловая система и пользователи. Это позволяет каждому контейнеру иметь свою собственную "область видимости".
-
Cgroups: Control Groups (cgroups) ограничивают и контролируют использование ресурсов (CPU, память, сеть) контейнерами. Это позволяет управлять нагрузкой на систему и предотвращать влияние одного контейнера на другие.
-
Файловая система: Контейнеры используют файловую систему, изолированную от основной системы. Обычно это достигается с помощью UnionFS или OverlayFS, которые объединяют несколько слоев файловой системы в один.
Для создания изолированных контейнеров Flatpak использует инструмент bubblewrap, который управляет изоляцией процессов и ресурсами. Bubblewrap позволяет приложениям запускаться в защищённой среде с минимальным доступом к системным файлам и службам, что добавляет дополнительный уровень безопасности, ограничивая потенциальные угрозы и уязвимости.
Контейнеры предоставляют изолированную среду для каждого приложения, что предотвращает их влияние друг на друга. Это значительно повышает стабильность и предсказуемость работы системы, так как сбой или ошибка в одном приложении не затрагивает остальные компоненты.
Контейнеры ограничивают доступ приложений к ресурсам системы, что делает их более безопасными. Например, можно задать ограничения на доступ к файлам или сетевым ресурсам, не позволяя приложению взаимодействовать с системными элементами за пределами контейнера.
Так же важно отметить, что если два приложения используют один и тот же runtime, они могут разделять в памяти библиотеки, предоставляемые этим runtime. Это аналогично тому, как стандартные приложения разделяют динамически загруженные библиотеки (shared libraries) в обычных Linux системах.
Одной из основных целей Flatpak является повышение безопасности настольных систем за счет изоляции приложений друг от друга. Это достигается с помощью песочницы, что означает, что по умолчанию приложения, запущенные с помощью Flatpak, имеют крайне ограниченный доступ к хост-окружению:
-
Нет доступа к файлам хоста, за исключением среды выполнения (runtime), самого приложения,
~/.var/app/$FLATPAK_ID
, и$XDG_RUNTIME_DIR/app/$FLATPAK_ID
. Только последние два из них являются доступными для записи. -
Нет доступа к сети.
-
Нет доступа к узлам устройств (за исключением
/dev/null
и т.д.). -
Нет доступа к процессам за пределами песочницы.
-
Ограниченные системные вызовы. Например, приложения не могут использовать нестандартные типы сетевых сокетов или отслеживать другие процессы с помощью
ptrace
. -
Ограниченный доступ к экземпляру сессионного D-Bus — приложение может владеть только своим собственным именем на шине.
-
Нет доступа к хост-сервисам, таким как X11, системный D-Bus или PulseAudio.
Доступ к сети, к сокетам dbus, некоторым устройствам и тп приложению можно дать.
К каталогам хоста типа /root
, /sys
, /bin
и тд доступ нельзя получить.
- Пользователям дистрибутивов типа Ubuntu, где есть полноценный аналог + в дистрибутиве, где присутствует встроенная телеметрия, какие-то соображения о приватности, доверии разработчикам не работают.
- В таких дистрибутивах как Qubes OS, где каждое приложение ставится в виртуалку, Flatpak чуть менее чем полностью не уместен.
# Обновляем список пакетов
sudo apt update
# Устанавливаем Flatpak
sudo apt install flatpak
# Устанавливаем плагин для графического интерфейса (необязательно)
sudo apt install gnome-software-plugin-flatpak
В новых версиях Flatpak установлен по умолчанию.
sudo dnf install flatpak
sudo pacman -S flatpak
yay -S flatpak
sudo zypper install flatpak
# Включаем репозиторий EPEL (если еще не включен)
sudo yum install epel-release
# Устанавливаем Flatpak
sudo yum install flatpak
# Устанавливаем Flatpak
sudo emerge --ask app-eselect/eselect-repository
sudo eselect repository enable guru
sudo emerge --sync guru
sudo emerge --ask flatpak
# Установка пакета
flatpak install flathub com.example.App
# Запуск приложения
flatpak run com.example.App
# Обновление одного пакета
flatpak update com.example.App
# Обновление всех пакетов
flatpak update
# Удаление пакета
flatpak uninstall com.example.App
# Удаление «хвостов» в виде неиспользуемых рантаймов
flatpak uninstall --unused
# Поиск пакета
flatpak search <text>
# Вывод списка установленных пакетов с их id, названием, занимаемым местом
flatpak list --columns=app,name,size
# Просмотр информации о пакете
flatpak info com.discordapp.Discord
# Добавление сторонего репозитория от разрабов KDE
flatpak remote-add --if-not-exists kdeapps --from https://distribute.kde.org/kdeapps.flatpakrepo
# Так же мы можем присоединится к любому запущенному контейнеру
flatpak enter com.discordapp.Discord sh
Flatseal — это графический инструмент для управления разрешениями приложений, установленных через Flatpak. Он позволяет пользователям просматривать и изменять разрешения для каждого приложения, что повышает безопасность и контроль над приложениями.
-
Просмотр разрешений: Flatseal отображает все разрешения, предоставленные каждому приложению, включая доступ к файлам, сети, аппаратным устройствам и другим ресурсам.
-
Изменение разрешений: Пользователи могут изменять разрешения для каждого приложения, добавляя или удаляя доступ к определенным ресурсам.
-
Безопасность: Flatseal помогает повысить безопасность системы, позволяя пользователям ограничивать доступ приложений к критическим ресурсам.
Flatseal можно установить через Flathub:
flatpak install flathub com.github.tchx84.Flatseal
-
Запуск Flatseal:
flatpak run com.github.tchx84.Flatseal
-
Просмотр и изменение разрешений:
- Откройте Flatseal и выберите приложение, для которого хотите изменить разрешения.
- Просмотрите текущие разрешения и измените их по необходимости.
Flatpak интегрирован в популярные рабочие столы KDE и GNOME. Как в GNOME Software, так и в Discover можно устанавливать приложения напрямую из Flatpak, мало того в обеих средах Flatpak является источником для поиска и установки приложений по умолчанию (разрабы дистров как правило Flatpak заменяют на свои пакетные менеджеры, а чистые Gnome и KDE можно увидеть лишь в Arch Linux). Так же можно управлять их правами при наличии установленного Flatseal. В Plasma 6 для этого запускаем System Settings
, а далее Security & Privacy
→ Application Permissions
→ Flatpak Permissions
. В Gnome настройки приложений, установленных через Flatpak можно увидеть и изменить так:
- Откройте
GNOME Software
. - Перейдите на вкладку
Installed
. - Найдите приложение, установленное через Flatpak.
- Нажмите на приложение и перейдите на вкладку
Permissions
. - Здесь вы можете управлять правами доступа для выбранного приложения.
- Более долгий запуск приложений. Речь идет о миллисекундах, но тем не менее
- Приложение, установленное через Flatpak имеет ограниченный доступ к ресурсам и файловой системе хоста, что может быть проблематичным для Gparted или какой-нибудь IDE, которые должны быть тесно интегрирована с системой. Руководствуйтесь правилом не ставить стандартные приложения для вашего DE из Flatpak
- Он используется для установки только для графических приложений.
- Осиротевшие пакеты, оставшиеся без мейнтейнера удаляюют из репозитория. Очень версии рантаймов так же удаляют.
AppImage и Snap — это технологии для решения проблемы с кросс-дистрибутивным распространением приложений на Linux, конкурирующие с Flatpak. Каждая из них имеет свои преимущества и недостатки.
Преимущества:
- Простота использования: AppImage — это просто исполняемый файл, который можно запустить без установки.
- Переносимость: AppImage работает на любом дистрибутиве Linux, поддерживающем исполняемые файлы ELF.
- Не требует установки: Не нужно устанавливать пакеты или зависимости, что упрощает распространение приложений.
Недостатки:
- Нет обновлений: AppImage не предоставляет механизм обновления приложений, нужно постоянно скачивать новую версию приложения.
- Засоряет систему: Каждый AppImage содержит все зависимости, что может привести к дублированию файлов и засорению системы.
- Ограничения доступа: AppImage не изолирует приложения, что может привести к проблемам с безопасностью и стабильностью.
Интересно, что разработчик AppImage сам предлагает Flatpak как достойную альтернативу его проекту, здраво рассуждая, что у каждой технологии есть свое применение. Те, если вам не нужны обновления или нужного приложения нет в Flatpak тупо потому что оно старое, не поддерживаемое, то ищете AppImage, если, конечно ничего не завалялось в том же AUR.
Преимущества:
- Интеграция с Ubuntu: Snap тесно интегрирован с Ubuntu, что обеспечивает лучшую поддержку и обновления.
- Консольные приложения: Snap позволяет устанавливать и запускать как графические, так и консольные приложения.
- Автоматические обновления: Snap поддерживает автоматические обновления приложений.
Недостатки:
- Зависимость от Ubuntu: Snap тесно связан с Ubuntu, что может быть проблемой для других дистрибутивов.
Остальные недостатки те же самые, что и у Flatpak.
Эти технологии были созданы для ограничения доступа приложений к сети и/или системным ресурсам. Flatpak проще в использовании, не требует запуска ядра с дополнительными параметрами, установки кучи пакетов, написания конфигов — он проще и предпочтительнее.
Вот неполный список flatpak-версий популярных приложений, поддерживаемых их разработчиками:
- LibreOffice — свободный офисный пакет.
- OnlyOffice Desktop Editors — редакторы документов, таблиц и презентаций.
- VLC Media Player — универсальный медиаплеер.
- Spotify — музыкальный стриминговый сервис.
- Audacity — аудиоредактор.
- GIMP — растровый графический редактор.
- Kdenlive — видеоредактор.
- Mozilla Firefox — веб-браузер.
- Google Chrome — веб-браузер.
- Telegram Desktop — мессенджер.
- Slack — платформа для командной работы.
- Discord — платформа для общения.
- Visual Studio Code — редактор кода от Microsoft.
- JetBrains Toolbox — набор инструментов для разработки от JetBrains.
- GitKraken — графический интерфейс для Git.
От себя отмечу, что не нужно использовать flatpak-версии IDE. Как писал уже выше для них критически важна интеграция с системой. Тот же VS Code требует либо создания своего flatpak-пакета, что сложно, либо использования разработки через docker-контейнеры, что не всегда удобно. Можно, конечно, извратиться установив все необходимые средства разработки в какой ~/.local/bin
, но это противоречит практике при которой все пакеты в системе должны управляться пакетным менеджером, чтобы иметь их актуальные версии (в случае с Python всякие black и pylint можно ставить через pipx — тогда терпимо). Но, так или иначе, я предупредил о возможных проблемах и подсказал пути их решения.
- Timeshift — утилита для создания снимков системы.
- Steam — платформа для цифровой дистрибуции игр.
- Lutris — менеджер игр для Linux.
- Krita — профессиональный инструмент для цифрового рисования.
- Inkscape — векторный графический редактор.
- Blender — 3D-редактор.
- OBS Studio — программа для записи и потоковой передачи видео.
Если раньше было проблемой мотивировать разрабов популярных программ сделать flatpak, но после того как Fedora выпилили многие программы из своих репозиториев, разработчики начали активно добавлять свои программы в Flathub.
Вот подборка популярных и полезных репозиториев Flatpak, которые помогут расширить доступ к различным приложениям:
-
KDE Applications (kdeapps) — репозиторий с широким набором приложений для среды рабочего стола KDE.
-
GNOME Nightly — содержит ночные сборки приложений GNOME, для тех, кто предпочитает работать с последними версиями.
-
Elementary OS Flatpak — официальный репозиторий приложений для пользователей Elementary OS, известного своим минимализмом и эстетикой.
В мире Linux существует ряд известных разработчиков и исследователей в области безопасности, которые высказывают свое мнение о Flatpak и его роли в обеспечении безопасности и совместимости приложений.
Маттью Гэрретт, специализирующийся на обеспечении безопасности UEFI и разработке ядра Linux, отмечает, что Flatpak предлагает важные преимущества в плане изоляции приложений и управления зависимостями. Он считает, что этот подход значительно улучшает безопасность системы, поскольку каждое приложение работает в своей собственной изолированной среде, что снижает риск распространения вредоносного кода и уязвимостей. Гэрретт также подчеркивает, что Flatpak позволяет разработчикам легко распространять свои приложения на различных дистрибутивах Linux, что способствует более широкому распространению программного обеспечения и улучшению совместимости.
Еще одним известным исследователем в области безопасности, который высказывает свое мнение о Flatpak, является Киз Кук, работающий в компании Google и активно участвующий в разработке ядра Linux, также видит в Flatpak потенциал для улучшения безопасности. Он отмечает, что изоляция приложений, предлагаемая Flatpak, является важным шагом вперед в борьбе с уязвимостями и атаками на систему. Кук подчеркивает, что Flatpak позволяет пользователям устанавливать приложения с минимальными рисками для безопасности, поскольку каждое приложение работает в своей собственной среде, изолированной от остальной системы.
В целом, мнение этих известных разработчиков и исследователей в области безопасности свидетельствует о том, что Flatpak представляет собой важный инструмент для улучшения безопасности и совместимости приложений в мире Linux. Их поддержка и активность в этой области способствуют дальнейшему развитию и распространению этой технологии, что, в свою очередь, приносит пользу всему сообществу Linux.
У любой прогрессивной, модной и "молодежной" технологии есть противники. Такие люди как правило могут критиковать, но не способны предложить лучшую альтернативу и тем более ее написать.
Сайт "Flatpak is not a future" — это пример критики проекта Flatpak, которая, по мнению автора, не имеет будущего. Однако, такие критические заявления часто основаны на неполной информации или предвзятости и не отражают реальной ситуации с проектом Flatpak. Со всеми его тезисами можно ознакомиться тут. Вот их опровержение:
-
Песочница и безопасность: автор критикует Flatpak за то что ментейнеры пакетов дают им излишние права... — Ну, это примерно как претензии к Пашке Дурову за то что творят пользователи Телеграма.
-
Объём дискового пространства: да, действительно, в первый раз когда качаешь приложение, то скачивается в тч его рантайм с драйверами Nvidia и тп, но рантаймы общие для приложений, а при обновлении скачивается только дельта. Это ситуация когда полуправда хуже лжи.
-
Производительность: утверждается, что приложения дольше запускаются. Это правда, но тут все-таки нужно сделать выбор между изоляцией и безопасностью, а дополнительное время на запуск не более секунды на относительно современных машинах.
-
Разделение ответственности: тут уже автор катит телегу о том, что разрабы сами определяют какие права нужны их приложениям, а не занимаются этим модераторы на Flathub. Странная претензия, учитывая, что и модерация не спасает от ситуаций как с бекдором в библиотеке xz.
По-мимо каких-то мнимых претензий со стороны троллей и просто невежд, которые не понимают либо не хотят разбираться "а зачем оно нужно", есть реально задокументированные серьезные проблемы в области безопасности, ради обеспечения которой вроде и нужно использовать Flatpak. Из серьезных уязвимостей можно припомнить, CVE-2024-32462, где разработчики пакета в теории могли получить доступ к файловой системе хоста через command line injection. Она относительно серьезная, но так или иначе Flatpak не дает доступа к root. Тут уже каждый решит для себя что лучше чувство мнимой безопасности или ее полное отсутствие, потому как никто не может гарантировать появление подобных уязвимостей в будущем.
Flatpak представляет собой будущее Linux благодаря своей универсальности и эффективности в решении проблем, связанных с зависимостями и совместимостью приложений. Контейнеризация, лежащая в основе Flatpak, позволяет изолировать приложения от системы, что решает проблему "ада зависимостей" и обеспечивает стабильность работы приложений на различных дистрибутивах. В дистрибутивах таких как Ubuntu, сталкивающиеся с трудностями в поддержке множества версий пакетов для своих различных релизов, это осознали одними из первых, а поэтому они идут именно по пути упаковывания в контейнеры приложений. Вы можете плеваться, истерить, рвать на голове и спине волосы, но этот процесс не остановить (к несчастью местных хейтеров). В других же дистрибутивах вместо того чтобы полагаться на проприетарные технологии, такие как Snap от Canonical, которые могут в будущем стать платными или сменить лицензию, выбирают Flatpak как более открытую и свободную альтернативу. Flatpak не только упрощает распространение приложений, но и обеспечивает более строгий контроль над правами доступа, что повышает безопасность и защиту персональных данных пользователей. Для "стабильных" дистров Flatpak — это возможность прикоснуться к rolling, а в rolling и в "стабильных" в том числе — повысить безопасность. Таким образом, Flatpak становится ключевым инструментом для создания более стабильной, безопасной и совместимой экосистемы Linux.
<<<