Опубликована новая стабильная ветка инструментария Flatpak 1.10, который предоставляет систему для сборки самодостаточных пакетов, не привязанных к конкретным дистрибутивам Linux и выполняемых в специальном контейнере, изолирующем приложение от остальной системы. Поддержка выполнения Flatpak-пакетов обеспечена для Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux и Ubuntu. Пакеты с Flatpak включены в репозиторий Fedora и поддерживаются в штатной программе управления приложениями GNOME.
Ключевые новшества в ветке Flatpak 1.10:
- Реализована поддержка нового формата репозитория, позволяющего ускорить доставку обновлений и сократить размер загружаемых данных. Репозиторий основывается на технологии OSTree, в которой для идентификации содержимого используется индексный файл, который обновляется при каждом изменении. Размер индексного файла зависит от числа пакетов и поддерживаемых архитектур.
Новый формат репозитория подразумевает разделение индексных файлов для разных архитектур, а также применение delta-обновлений для загрузки только частей индекса, изменившихся с прошлой версии репозитория. Применение инкрементальных обновлений позволило в 100 раз сократить трафик и сняло ограничения по поддержке во Flathub дополнительных архитектур. Например, общий размер индекса Flathub в настоящее время составляет 6.6 МБ (1.8 МБ сжатый), варианта для архитектуры x86-64 – 2.7 МБ (554 КБ сжатый), а при обновлении с прошлой версии требуется загрузка всего 20 КБ. - Добавлена новая команда “flatpak pin” для закрепления runtime (не будет удаляться при отсутствии использующих его приложений). По умолчанию закрепление применяется для runtime, установленных явно, а не автоматически загруженных как зависимость при установке приложения.
- При общем обновлении (“flatpak update”) или удалении отдельных приложений обеспечено автоматическое удаление неиспользуемых runtime, которые не закреплены и имеют истекшее время жизни.
- Улучшено определение похожих путей приложений, например, “/org/gnome/sound-juicer” теперь сопоставляется с “org.gnome.SoundJuicer”.
- Добавлена поддержка нового стандарта на оформление файлов в os-release в контейнерах.
- Добавлен профиль для tcsh.
- При поиске зависимостей репозиторий устанавливаемого приложения теперь имеет более высокий приоритет, чем другие репозитории.
- Повышена эффективность кэширования индекса репозитория в памяти.
- Запрещено указание “–filesystem=/”.
- Добавлены новые API: flatpak_installation_list_pinned_refs, flatpak_transaction_set_disable_auto_pin, flatpak_transaction_set_include_unused_uninstall_ops, flatpak_transaction_operation_get_subpaths, flatpak_transaction_operation_get_requires_authentication.
- Обеспечена совместимость с находящимся в разработке GCC 11.
- Улучшено определение сокетов PulseAudio в не типовых конфигурациях.
- В sandbox-окружениях, в которых разрешён доступ к сети, открыт доступ к сокетам systemd-resolved, а также разрешено выполнение команд “–unset-env” и “–env=FOO=” для удаления или присвоения пустого значения переменным окружения.
- При обновлении теперь вначале устанавливается новая версия приложения и только потом удаляется старая, т.е. сбой при установке теперь не приводит к пропаданию приложения.
- Пользователю root разрешено обходить ограничения родительского контроля.
Напомним, что разработчикам приложений Flatpak даёт возможность упростить распространение своих программ, не входящих в штатные репозитории дистрибутивов за счет подготовки одного универсального контейнера без формирования отдельных сборок для каждого дистрибутива. Пользователям, заботящимся о безопасности, Flatpak позволяет выполнить вызывающее сомнение приложение в контейнере, предоставив доступ только к сетевым функциям и файлам пользователя, связанным с приложением. Пользователям, интересующимся новинками, Flatpak позволяет установить самые свежие тестовые и стабильные выпуски приложений без необходимости внесения изменений в систему. Например, в настоящее время Flatpak-пакеты уже собираются для LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio и т.д.
Для уменьшения размера пакета он включает лишь специфичные для приложения зависимости, а базовые системные и графические библиотеки (GTK, Qt, библиотеки GNOME и KDE и т.п.) оформлены в виде подключаемых типовых runtime-окружений. Ключевое отличие Flatpak от Snap заключается в том, что Snap использует компоненты окружения основной системы и изоляцию на основе фильтрации системных вызовов, в то время как Flatpak создаёт отдельный от системы контейнер и оперирует крупными runtime-наборами, предоставляя в качестве зависимостей не пакеты, а типовые системные окружения (например, все библиотеки, необходимые для работы программ GNOME или KDE).
Помимо типового системного окружения (runtime), устанавливаемого через специальный репозиторий, поставляются дополнительные зависимости (bundle), требуемые для работы приложения. В сумме runtime и bundle образуют начинку контейнера, при том, что runtime устанавливается отдельно и привязывается сразу к нескольким контейнерам, что позволяет обойтись без дублирования общих для контейнеров системных файлов. В одной системе может быть установлено несколько разных runtime (GNOME, KDE) или несколько версий одного runtime (GNOME 3.26, GNOME 3.28). Контейнер с приложением в качестве зависимости использует привязку только к определённому runtime, без учета отдельных пакетов, из которых состоит runtime. Все недостающие элементы упаковываются непосредственно вместе с приложением. При формировании контейнера содержимое runtime монтируется как раздел /usr, а bundle монтируется в директорию /app.
Начинка runtime и контейнеров приложений формируется с использованием технологии OSTree, при которой образ атомарно обновляется из Git-подобного хранилища, позволяющего применять методы версионного контроля к компонентам дистрибутива (например, можно быстро откатить систему к прошлому состоянию). RPM-пакеты транслируются в репозиторий OSTree при помощи специальной прослойки rpm-ostree. Отдельная установка и обновление пакетов внутри рабочего окружения не поддерживается, система обновляется не на уровне отдельных компонентов, а целиком, атомарно меняя своё состояние. Предоставляются средства для инкрементального применения обновлений, избавляющие от необходимости полной замены образа при каждом обновлении.
Формируемое изолированное окружение полностью независимо от используемого дистрибутива и при надлежащих настройках пакета не имеет доступа к файлам и процессам пользователя или основной системы, не может напрямую обращаться к оборудованию, за исключением вывода через DRI, и сетевой подсистеме. Вывод графики и организация ввода реализованы при помощи протокола Wayland или через проброс сокета X11. Взаимодействие с внешней средой построено на основе системы обмена сообщениями DBus и специального API Portals. Для изоляции используется прослойка Bubblewrap и традиционные для Linux технологии контейнерной виртуализации, основанные на использовании cgroups, пространств имён (namespaces), Seccomp и SELinux. Для вывода звука применяется PulseAudio.