Зависимости

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

На этой странице описаны возможные варианты и даны инструкции о том, когда их использовать.

Среда выполнения

Как было описано в Основные понятия, среды выполнения предоставляют базовые зависимости, которые могут использоваться приложениями. Они также обеспечивают среду, в которой работают приложения. Flatpak требует, чтобы каждое приложение указывало среду выполнения. Следовательно, одно из первых решений, которое вам необходимо принять при создании приложения с помощью Flatpak, - это то, какую среду выполнения оно будет использовать.

Обзор доступных сред выполнения можно найти на странице Доступные среды выполнения. Намеренно сделано так, что есть только небольшое количество сред выполнения на выбор. Обычно среды выполнения выбираются на основе того, какие зависимости требуются приложению. Если существует среда выполнения, которая предоставляет библиотеки, которые вы планируете использовать, обычно это правильная среда выполнения!

Совет

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

Среды выполнения автоматически устанавливаются для пользователей, когда они устанавливают приложение, и инструменты сборки также могут автоматически устанавливать их для вас (для этого полезна опция --install-deps-from в flatpak-builder). Однако, если вам действительно нужно вручную установить выбранную среду выполнения, это можно сделать так же, как и установку приложения, с помощью команды flatpak install. Например, команда для установки среды выполнения GNOME 43:

$ flatpak install flathub org.gnome.Platform//43

Объединение

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

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

  • библиотеки, которых нет в выбранной вами среде выполнения

  • разные версии библиотек, которые находятся в выбранной вами среде выполнения

  • пропатченные версии библиотек

  • данные или другие ресурсы, являющиеся частью приложения

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

Несмотря на то, что объединение является очень мощным и гибким, оно также возлагает большую нагрузку на разработчика приложения. Поэтому, хотя можно объединить столько модулей, сколько захотите, обычно рекомендуется стараться поддерживать как можно меньшее количество связанных модулей. Если зависимость доступна как часть среды выполнения, обычно лучше использовать эту версию, чем связывать ее самостоятельно.

Специфика объединения библиотек описана в разделе manifest.

Базовые приложения

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

Однако в некоторых случаях зависимости являются частью более крупной структуры или набора инструментов, которые не вписываются в среду выполнения, но также являются громоздкими для ручного объединения в виде серии отдельных модулей. Вот тут-то и пригодятся base apps.

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

Базовые приложения - это относительно специализированная концепция, и только некоторые приложения должны их использовать (наиболее распространенное базовое приложение используется для Electron applications). Однако, если ваше приложение использует большую, сложную или специализированную структуру, рекомендуется проверить доступные базовые приложения, прежде чем начинать сборку.

Extensions

Runtimes and applications can define extension points which allow optional additional runtimes to be mounted at a specified location inside the sandbox when they are present on the system. Typical uses for extensions include translations for applications, debuginfo for sdks, or adding more functionality to the application. Some software refers to these extensions as «Add-ons».

For an extension to be loaded in the application or runtime, an extension point first needs to be defined in the application or runtime in question.

By convention, extension points follow the ID of the application or runtime in question, followed by a generic term for the extension. For example, the OBS Studio flatpak may define an extension point com.obsproject.Studio.Plugin, where «Plugin» is the generic term prefixed by the application ID.

To see available extension points, it’s best to look at the application or runtime manifest.

Any extension now choosing to be loaded inside the OBS Studio flatpak must prefix their ID by com.obsproject.Studio.Plugin for example com.obsproject.Studio.Plugin.Gstreamer.

Some extension names having special significance are discussed below.

  • .Debug is used for Debug extensions by applications, runtimes and SDKs. They are used for debugging purposes. Every application or runtime built with flatpak-builder produces a .Debug extension unless specifically disabled in the manifest.

    A .Debug extension will be needed when generating useful backtraces. This is explained more in Отладка.

  • .Locale is used for Locale extensions by applications or runtimes. They add support for more languages to the parent application or runtime. These are usually partially downloaded by flatpak based on the configured system locale. Every application or runtime built with flatpak-builder produces a .Locale extension unless specifically disabled in the manifest.

  • .Sources is used for Sources extension by application or runtime. They are used to bundle sources of the modules used in the application or runtime in question. flatpak-builder will produce a .Sources extension prefixed by ID when --bundle-sources is used.

Please visit Extensions for a guide on how to create extension points and extensions.