Dependências🔗
O Flatpak fornece várias opções diferentes de como os aplicativos podem depender de outro software. Ao se preparar para criar um aplicativo com o Flatpak pela primeira vez, é necessário decidir como as dependências do aplicativo serão organizadas.
Esta página descreve quais são as opções e fornece orientações sobre quando usar cada uma.
Runtimes🔗
Como foi descrito em Conceitos básicos, os runtimes fornecem dependências básicas que podem ser usadas pelos aplicativos. Eles também fornecem o ambiente em que os aplicativos são executados. O Flatpak requer que cada aplicativo especifique um runtime. Portanto, uma das primeiras decisões que você precisa tomar ao criar um aplicativo com o Flatpak é qual runtime será usado.
Uma visão geral dos runtimes disponíveis pode ser encontrada na página Runtimes disponíveis. Deliberadamente, há apenas um pequeno número de runtimes para escolher. Normalmente, os runtimes são escolhidos com base nas dependências requeridas por um aplicativo. Se existe um runtime que fornece bibliotecas que você planeja usar, esse geralmente é o runtime correto a ser usado!
Dica
Os runtimes exigem manutenção regular e os desenvolvedores de aplicativos geralmente não devem considerar criar seus próprios.
Os runtimes são instalados automaticamente para os usuários quando eles instalam um aplicativo, e as ferramentas de compilação também podem instalá-los automaticamente para você (a opção --install-deps-from do flatpak-builder é útil para isso). No entanto, se você precisar instalar manualmente o runtime escolhido, isso pode ser feito da mesma maneira que a instalação de um aplicativo, com o comando flatpak install. Por exemplo, o comando para instalar o runtime do GNOME 43 é:
$ flatpak install flathub org.gnome.Platform//43
Empacotamento🔗
Uma das principais vantagens do Flatpak é que ele permite que os autores do aplicativo agrupem as bibliotecas ou dependências que desejarem. Isso significa que os desenvolvedores não são limitados pelas bibliotecas disponíveis nas distribuições Linux.
Quando se trata de criar um aplicativo pela primeira vez, você precisa decidir quais dependências pretende agrupar. Isso pode incluir:
bibliotecas que não estão no runtime escolhido
diferentes versões de bibliotecas que estão no runtime escolhido
versões corrigidas (com patches) de bibliotecas
dados ou outros recursos que fazem parte do aplicativo
Como será visto, as dependências agrupadas podem ser baixadas automaticamente como parte do processo de compilação. Também é possível aplicar patches e executar outras transformações.
Embora o empacotamento seja muito poderoso e flexível, também impõe uma carga maior de manutenção ao desenvolvedor do aplicativo. Portanto, embora seja possível agrupar o quanto você quiser, geralmente é recomendável tentar manter o número de módulos agrupados o mais baixo possível. Se uma dependência estiver disponível como parte de um runtime, geralmente é melhor usar essa versão do que agrupá-la você mesmo.
Os detalhes de como agrupar bibliotecas são abordados na seção Manifestos.
BaseApps🔗
Runtimes e empacotamento são as duas principais maneiras pelas quais as dependências são tratadas com o Flatpak. Por um lado, elas permitem que os aplicativos confiem em coleções estáveis de dependências e, por outro, tenham flexibilidade e controle.
However, in some cases, dependencies come as part of a bigger framework or toolkit, which doesn’t fit into a runtime but which is also cumbersome to manually bundle as a series of individual modules. This is where BaseApps come in.
BaseApps contain collections of bundled dependencies which can then be bundled as part of an application. They don’t get rebuilt as part of the build process, which makes building faster (particularly when bundling large dependencies). And because each BaseApp is only built once, it is guaranteed to be identical wherever it is used, so it will only be saved once on disk.
BaseApps are a relatively specialized concept and only some applications need to use them (the most common BaseApp is used for Electron applications). However, if your application uses a large, complex or specialized framework, it is a good idea to check for available BaseApps before you start building.
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.
.Debugis used for Debug extensions by applications, runtimes and SDKs. They are used for debugging purposes. Every application or runtime built withflatpak-builderproduces a.Debugextension unless specifically disabled in the manifest.A
.Debugextension will be needed when generating useful backtraces. This is explained more in Depuração..Localeis 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 byflatpakbased on the configured system locale. Every application or runtime built withflatpak-builderproduces a.Localeextension unless specifically disabled in the manifest..Sourcesis 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-builderwill produce a.Sourcesextension prefixed by ID when--bundle-sourcesis used.
Please visit Extensions for a guide on how to create extension points and extensions.