Скрытое содержимое Flatpak

На этой странице представлен обзор внутренней работы Flatpak. Хотя не обязательно знать это, чтобы использовать Flatpak, некоторым это может показаться интересным. Знание об архитектуре Flatpak также помогает лучше понять, как и почему она работает именно так, с точки зрения пользователя и разработчика приложений.

«Git for apps»

Flatpak построен на основе технологии под названием OSTree, которая находится под влиянием системы контроля версий Git и очень похожа на нее. Как и Git, OSTree позволяет отслеживать версионные данные и распределять их между различными репозиториями. Однако там, где Git предназначен для отслеживания исходных файлов, OSTree предназначен для отслеживания двоичных файлов и других больших данных.

Таким образом, внутри Flatpak работает аналогично Git, и многие концепции Flatpak аналогичны концепциям Git. Как и Git, Flatpak использует репозитории для хранения данных и отслеживает различия между версиями.

В Flatpak каждое приложение, среда выполнения и расширение - это ветка в репозитории. Тройная идентификация, например com.company.App/x86_64/stable, является ссылкой на эту ветку. Результатом процесса сборки Flatpak является каталог файлов, который привязан к одной из этих веток.

Когда приложение устанавливается с помощью Flatpak, оно переносится с удалённой в новую ветку в локальном репозитории. Затем генерируются ссылки, которые указывают из нужных мест в файловой системе на файлы приложения в репозитории (это жесткие ссылки, которые быстро разрешаются и освобождают дисковое пространство, занимая мало места на диске). Другими словами, каждое установленное приложение хранится в локальном репозитории управления версиями, а затем сопоставляется с локальной файловой системой.

Таким образом, отслеживание версий является основной частью архитектуры Flatpak, и это делает обновление программного обеспечения до последней версии очень эффективным. Управление версиями также делает возможными откаты, поэтому при необходимости легко вернуться к предыдущей версии.

Хранение приложений в локальном репозитории OSTree имеет и другие преимущества. Например, он позволяет удалять дубликаты файлов, хранящихся на диске, поэтому один и тот же файл, принадлежащий нескольким приложениям (или средам выполнения), сохраняется только один раз.

Базовые технологии

Flatpak использует ряд уже существующих технологий. К ним относятся:

  • Утилита bubblewrap из Project Atomic, которая позволяет непривилегированным пользователям устанавливать и запускать контейнеры, используя такие функции ядра, как:

    • Namespaces

    • Bind mounts

    • Seccomp rules

  • systemd для настройки контрольных групп для песочниц

  • D-Bus, - хорошо зарекомендовавший себя способ предоставления высокоуровневых API для приложений

  • The OSTree system for versioning and distributing filesystem trees

  • Формат OCI из Open Container Initiative <https://opencontainers.org/>`_ в качестве альтернативы OSTree, используемой инфраструктурой Fedora <https://blog.fishsoup.net/2018/12/04/ flatpaks-in-fedora-now-live/>`__

  • Flatpak может использовать OSTree или OCI для однофайловых пакетов.

  • Appstream - метаданные, предназначенные для того, чтобы приложения Flatpak хорошо отображались в приложениях центра программ