Введение в Flatpak

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

Терминология

  • Flatpak: система для создания, распространения и запуска изолированных десктопных приложений в Linux.

  • Приложение Flatpak: это приложения, которые пользователь устанавливает с помощью команды «flatpak» или через другой пользовательский интерфейс, такой как GNOME Software или KDE Discover.

  • Runtime: также называемые платформами, это интегрированные платформы для предоставления основных утилит, необходимых для работы приложения Flatpak.

  • BaseApp: это интегрированные платформы для таких фреймворков, как Electron.

  • Flatpak bundle: особый формат экспорта одного файла, который содержит приложение Flatpak или среду выполнения.

Целевая аудитория

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

Хотя Flatpak работает только в Linux, его могут использовать приложения, предназначенные для других операционных систем, а также приложения, специфичные для Linux. Приложения могут быть с открытым исходным кодом или проприетарными (хотя некоторые службы распространения, такие как Flathub, могут иметь ограничения в этом отношении).

Единственные технические требования, предъявляемые Flatpak, заключаются в том, что приложения должны соответствовать небольшому количеству стандартов Freedesktop, чтобы обеспечить интеграцию с рабочим столом (см. условия).

Проблемы текущей модели упаковки

Важно понимать проблемы текущей модели упаковки приложений, чтобы понять существование Flatpak:

  • Дублированные рабочие приложения для упаковки: многие дистрибутивы Linux поставляются со своим собственным менеджером пакетов, форматом пакета и репозиторием. Для этого требуется, чтобы множество сопровождающих упаковывали одно и то же приложение в различные дистрибутивы, или разработчику приложения приходилось изучать язык каждого формата, а затем упаковывать приложение в эти дистрибутивы, или игнорировать большинство дистрибутивов, упаковывать и поддерживать несколько дистрибутивов. Это делает рабочий стол Linux сложной платформой для поставщиков программного обеспечения.

  • Ограничено пакетными приложениями: не все приложения изначально доступны в каждом дистрибутиве Linux. Если приложение недоступно в определенном дистрибутиве, пользователю придется вручную загрузить архив приложения, распаковать его и надеяться, что приложение запустится.

  • Ограничено дистрибутивами, в которых есть приложения: пользователь ограничен количеством дистрибутивов, в которых есть необходимые приложения для правильной настройки рабочего процесса. Это уменьшает количество дистрибутивов, которые могут подойти пользователю.

  • Трудно внедрять инновации в пространстве ОС: сопровождающим дистрибутивов приходится тратить много времени на упаковку приложений, чтобы сделать дистрибутив пригодным для конечного пользователя, вместо того, чтобы сосредоточиться на своих конечных целях. Это задерживает продвижение каждого дистрибутива.

  • Старые и устаревшие пакеты: дистрибутивы LTS часто содержат очень старые версии приложений, изначально упакованные. Воспроизводимости ошибок препятствуют различные среды, в которых запускаются приложения, и разработчики приложений часто имеют мало контроля над тем, как их приложение упаковано дистрибутивами.

Flatpak стремится исправить перечисленные выше проблемы, удобно позволяя разработчикам распространять приложения из одного источника и ориентироваться на все десктопные дистрибутивы Linux.

Причины использовать Flatpak

Flatpak имеет ряд существенных преимуществ перед большинством системных менеджеров пакетов:

  • Универсальность: Flatpak позволяет устанавливать приложения и запускать их практически в любом дистрибутиве Linux. Сюда входят дистрибутивы, отличные от GNU, дистрибутивы без systemd, дистрибутивы с операционной системой (ОС) только для чтения и различные архитектуры, для которых разработчику не требуется соответствующее оборудование.

  • Простор для инноваций: Flatpak помогает специалистам по поддержке дистрибутива сосредоточиться на своих целях по внедрению инноваций в свой дистрибутив.

  • Стабильность: сбой в приложении Flatpak не приведет к сбою системы. Это связано с тем, что приложения и среды выполнения Flatpak полностью не мешают работе системы.

  • Установка без рута: повышенные привилегии не требуются при установке приложения Flatpak или среды выполнения.

  • Приложения в песочнице: одна из основных целей Flatpak — повысить безопасность настольных систем за счет изоляции приложений друг от друга. Это достигается с помощью песочницы и означает, что по умолчанию приложения, работающие с Flatpak, имеют ограниченный доступ к среде хоста.

Flatpak имеет ряд существенных преимуществ перед другими универсальными подходами к распространению приложений в Linux:

  • Децентрализованный по дизайну: хотя Flatpak предоставляет централизованный сервис для распространения приложений, он также допускает децентрализованный хостинг и распространение, так что разработчики приложений или их подчиненные могут размещать свои собственные приложения и репозитории приложений.

  • Интеграция с рабочим столом: Flatpak также предлагает встроенную интеграцию с основными рабочими столами Linux, так что пользователи могут легко просматривать, устанавливать, запускать и использовать приложения Flatpak через существующую среду рабочего стола и инструменты.

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

  • Дельта-обновления: для обновлений загружаются только измененные файлы.

Среди других преимуществ для разработчиков:

  • Прямая совместимость: одно и то же приложение Flatpak можно запускать в разных версиях одного и того же дистрибутива, включая версии, которые еще не выпущены. Это не требует каких-либо изменений или управления со стороны разработчиков приложений.

  • Объединение: это позволяет разработчикам приложений поставлять практически любую зависимость или библиотеку как часть своего приложения. Это дает полный контроль над тем, какое программное обеспечение используется для создания приложений.

  • Последовательные среды приложений: поскольку они одинаковы на всех устройствах, приложения работают так, как задумано. Это также упрощает выявление ошибок и тестирование.

  • Ветки: это позволяет разработчикам отправлять приложения из разных веток, например. «стабильная», «бета» и т. д., сохраняя то же имя.

  • Поддерживаемые платформы: называемые средами выполнения, они содержат наборы зависимостей, которые могут использоваться приложениями и которые могут отнимать много времени при разработке приложений.

In general Flatpak is best suited suited for desktop applications and while command line applications also work, it may not be suited in some cases:

  • Applications needs to elevate priviledges using su, sudo, pkexec etc. Flatpak cannot run in SUID binaries inside the sandbox.

  • Application needs to read /proc from host or have unfiltered access to processes. This is not allowed as Flatpak has a private proc.

  • Application uses a syscall that is blocklisted by Flatpak’s seccomp filter. For example, Flatpak won’t allow spawning sub-namespaces in the sandbox.

  • Kernel modules or drivers are non application packages and won’t work inside a Flatpak.

In general in cases where the sandbox prohibits the core functionality of the application or makes it too inconvenient and/or obtrusive , it is not best suited to be packaged with Flatpak.

Flatpak also won’t export udev rules or systemd services from the sandbox to the host and requires manual configuration after installing the flatpak package.

Информацию о внутренностях Flatpak можно найти в :doc:«под капотом».