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.

Aplicativos base

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.

No entanto, em alguns casos, as dependências são parte de um framework ou kit de ferramentas maior, que não se encaixa em um runtime, mas também é complicado de agrupar manualmente como uma série de módulos individuais. É aqui que entram os aplicativos básicos.

Os aplicativos base contêm coleções de dependências empacotadas que podem ser empacotadas como parte de um aplicativo. Elas não são recompiladas como parte do processo de compilação, o que torna a compilação mais rápida (principalmente ao empacotar grandes dependências). E como cada aplicativo base é compilado apenas uma vez, é garantido que seja idêntico onde quer que seja usado, portanto, ele será salvo apenas uma vez no disco.

Aplicativos base são um conceito relativamente especializado e apenas alguns aplicativos precisam usá-los (o aplicativo base mais comum é usado para aplicativos Electron). No entanto, se o seu aplicativo usar um framework grande, complexo ou especializado, é uma boa ideia verificar os aplicativos básicos disponíveis antes de começar a compilá-lo.

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 Depuração.

  • .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.