Flatpak (ранее известный как xdg-app) — утилита для развёртывания, управления пакетами и виртуализации для Linux. Представляет собой песочницу, в которой пользователи могут запускать приложения, не влияя на основную систему. Приложения, использующие Flatpak, требуют дополнительных разрешений на доступ к файловой системе и оборудованию.

Описание Для работы с пакетами Flatpak могут использоваться как Flathub (репозиторий разработчика), так и сторонние репозитории, что отличается от подхода Snappy. Приложения выполняются в изолированном контейнере. Библиотеки могут поставляться в одном пакете с приложением или же размещаться в окружениях, общих для нескольких программ.

История Создатель Flatpak — Алекс Ларссон (Alex Larsson). Одним из источников вдохновения для него послужил проект klik. Изначально Ларссон создал экспериментальную утилиту Glick: её название образовано от слияния первой буквы среды GNOME и слова klik. Подобная схема наименования по первой букве была традиционной для сообществ KDE и GNOME. В дальнейшем проект претерпел ряд изменений и эволюционировал во Flatpak.

Glick Идея зародилась в проекте Glick — фреймворке для упаковки (bundling) приложений. Он позиционировался как инструмент, позволяющий разработчикам создавать самодостаточные пакеты для своих программ. Первая публичная версия 0.1 была выпущена в 2007 году. Позже вышел последний релиз 0.2, в котором удалось обойти ограничение FUSE на одновременное выполнение 10 программ.

Особенности реализации: Для целевой системы не требуется дополнительная среда выполнения: пока FUSE работает корректно, программе больше ничего не нужно. Упакованному приложению не обязательно быть перемещаемым, так как Glick использует трюк с виртуальной файловой системой. Он находит свои файлы по пути /proc/self/fd/1023. Это значит, что разработчику не нужно модифицировать исходный код программы, достаточно при сборке выполнить команду configure --prefix /proc/self/fd/1023. Внутрь файла можно встроить значки и другие ресурсы. Они хранятся в виде отдельных секций ELF, поэтому их легко извлечь. Glick 2 Вскоре Glick перерос в Glick 2Welcome to glick2 (архивная страница проекта) , который был впервые представлен в 2011 году, когда в блоге разработчика GNOME появилась запись о переосмыслении дистрибутивов Linux и модели распространения приложенийRethinking the Linux distibution . К записи также прилагался соответствующий демороликIntro to bundles (скринкаст на YouTube) .

При запуске программа создаёт пространство имён — это функция ядра Linux, позволяющая процессам использовать собственный изолированный набор точек монтирования. Затем файл монтируется при помощи FUSE с заранее определённым префиксом (например, в каталог /opt/bundle); данная точка монтирования остаётся доступной исключительно запущенной программе и её дочерним процессам. Далее стартует исполняемый файл, считывающий необходимые данные и библиотеки из этой точки. С помощью другой функции ядра — разделяемых поддеревьев (shared subtrees) — новое пространство имён связывается с точками монтирования основной системы, благодаря чему становится возможным обращаться к внешним устройствам (например, использовать USB-носитель, подключённый уже после запуска программы).

На уровне файловой структуры самого пакета обеспечивается дедупликация файлов на диске и в оперативной памяти: файлы внутри образа индексируются с помощью контрольных сумм SHA-1, а одинаковые файлы между пакетами связываются жёсткими ссылкамиGlick2 code availible .

Для интеграции со службами рабочего стола достаточно переместить файл приложения в каталог (например, ~/Apps или ~/.local/bundles), иначе само приложение не отобразится в общем списке программ.

Преимущества по сравнению с другими системами управления пакетами: Простота установки — файл приложения достаточно скопировать в каталог ~/Apps. Изоляция зависимостей — приложение спокойно продолжит работу даже при несовместимых изменениях в системных библиотеках дистрибутива. Универсальность — программа стабильно работает как на устаревших, так и на современных версиях операционной системы без необходимости подстраиваться под конкретный дистрибутив. Мультиверсионность — возможно установить и запустить сразу несколько версий одного и того же приложения. Переносимость — отличная совместимость между дистрибутивами при сохранении базовой зависимости от системных компонентов, таких как ядро или X-сервер.

Позже идеи, сформулированные в Glick 2, положили начало исследовательскому проекту Bundler, предшествовавшему xdg-app и Flatpak.

xdg-app В начале 2013 года в ядре Linux 3.8 завершилась реализация пространств имён пользователей — она дала возможность полноценно работать непривилегированным контейнерам, а в феврале 2014 года состоялся релиз системы LXC 1.0. На Hackfest 2013 Алекс Ларссон обнародовал свои идеи по изоляции приложений, лёгшие в основу будущего Flatpak. Открытая работа над проектом началась в 2014 году, а первый релиз состоялся в 2015 году.

Flatpak Начиная с версии 0.6, xdg-app стал именоваться Flatpak.

Flatpak 0.8 получил LTS.

Flatpak 1.0 был выпущен 20 августа 2018 года.

26 июля 2017 года Valve добавила в тестовую сборку SteamOS поддержку Flatpak — в стабильной ветке она появилась 1 августа 2017 года.

С сентября 2018 года проводились эксперименты по запуску Flatpak в Windows 10 при помощи WSL, однако официальная поддержка этой ОС так и не была внедрена.

Центр приложений Flathub — магазин приложений для Flatpak. В нём присутствуют сборки GIMP, VS Code, Steam и других популярных программ. До недавнего времени сама площадка развивалась под эгидой фонда GNOME (GNOME Foundation).

Роберт Маккуин (Robert McQueen), председатель совета директоров GNOME Foundation, в 2023 году опубликовал план по развитию площадки, основной задачей которого было её преобразование из сервиса сборки в полноценный магазин приложений.

Критика Анонимный автор (или авторы) создал одностраничный сайт flatkill.org, на котором описаны проблемы безопасности, касающиеся Flatpak. Основные претензии — наличие устаревшего ПО на Flathub и недоработки в песочнице.

См. также AppImage Snappy Кроссплатформенность

Примечания

Категория:Свободное программное обеспечение, написанное на Си Категория:Распространение программного обеспечения Категория:Свободное системное программное обеспечение