Introdução ao Flatpak

Flatpak é um framework para distribuir aplicativos de desktop em várias distribuições Linux. Ele foi criado por desenvolvedores que têm um longo histórico de trabalho no desktop Linux e é executado como um projeto independente de código aberto.

Terminologia

  • Flatpak: um sistema para construir, distribuir e executar aplicativos de desktop em área isolada no Linux.

  • Aplicativo Flatpak: estes são os aplicativos que o usuário instala através do comando flatpak ou através de uma interface de usuário diferente como GNOME Programas ou KDE Discover.

  • Runtime: também chamadas de plataformas, são plataformas integradas para fornecer os utilitários básicos necessários para o funcionamento de um aplicativo Flatpak.

  • BaseApp: também chamado de aplicativos base, são plataformas integradas para frameworks como o Electron.

  • Pacote Flatpak: um formato de exportação de arquivo único específico que contém um aplicativo ou runtime do Flatpak.

Audiência alvo

O Flatpak pode ser usado por todos os tipos de aplicativos de desktop e visa ser o mais independente possível em relação à forma como os aplicativos são compilados. Não há requisitos sobre quais linguagens de programação, ferramentas de compilação, kits de ferramentas ou frameworks podem ser usados.

Embora o Flatpak seja executado apenas no Linux, ele pode ser usado por aplicativos direcionados a outros sistemas operacionais, bem como àqueles específicos do Linux. Os aplicativos podem ser de código aberto ou privativos (embora alguns serviços de distribuição, como Flathub, possam ter restrições a esse respeito).

Os únicos requisitos técnicos feitos pelo Flatpak são que os aplicativos sigam um pequeno número de padrões Freedesktop, a fim de permitir a integração da desktop (consulte Requisitos & convenções).

Questões do modelo atual de empacotamento

É importante entender os problemas do modelo atual de aplicativos de empacotamento para entender a existência do Flatpak:

  • Trabalho duplicado empacotando aplicativos: muitas distribuições Linux vêm com seu próprio gerenciador de pacotes, formato de pacote e repositório. Isso exige que muitos mantenedores empacotem o mesmo aplicativo em várias distribuições, ou que o desenvolvedor do aplicativo aprenda a linguagem de cada formato e, em seguida, empacote o aplicativo nessas distribuições, ou ignore a maioria das distribuições e empacote e dê suporte a algumas distribuições. Isso torna o desktop Linux uma plataforma difícil para os fornecedores de software.

  • Limitado a aplicativos empacotados: nem todos os aplicativos estão disponíveis nativamente em todas as distribuições Linux. Se um aplicativo não estiver disponível em uma distribuição específica, o usuário terá que confiar no download manual do arquivo do aplicativo, extraindo-o e esperando que o aplicativo seja iniciado.

  • Limitado a distribuições que possuem os aplicativos: o usuário está limitado ao número de distribuições que possuem os aplicativos necessários para configurar corretamente seu fluxo de trabalho. Isso reduz a quantidade de distribuições que podem ser adequadas para um usuário.

  • Difícil inovar no espaço do sistema operacional: os mantenedores das distribuições precisam gastar muito tempo empacotando aplicativos para tornar a distribuição adequada ao usuário final, em vez de se concentrar em seus objetivos finais. Isso atrasa o progresso de cada distribuição.

  • Pacotes antigos e desatualizados: as distribuições LTS geralmente têm versões muito antigas de aplicativos empacotados nativamente. A reprodutibilidade do bug é prejudicada pelos diferentes ambientes nos quais os aplicativos são executados, e os desenvolvedores de aplicativos geralmente têm pouco controle sobre como seus aplicativos são empacotados pelas distribuições.

O Flatpak se esforça para corrigir os problemas listados acima, permitindo convenientemente que os desenvolvedores distribuam aplicativos de uma fonte e direcionem todo o desktop Linux.

Motivos para usar o Flatpak

O Flatpak tem algumas vantagens importantes sobre a maioria dos gerenciadores de pacotes do sistema:

  • Universalidade: Flatpak permite que aplicativos sejam instalados e executados em praticamente qualquer distribuição Linux. Isso inclui distribuições não GNU, distribuições sem sistema, distribuições com sistema operacional (SO) somente leitura e várias arquiteturas sem que o desenvolvedor precise do hardware relevante disponível.

  • Espaço para inovações: Flatpak facilita que os mantenedores de distribuição se concentrem em seus objetivos para inovar sua distribuição.

  • Estabilidade: a quebra em um aplicativo Flatpak não colocará o sistema em risco. Isso ocorre porque os aplicativos e os runtimes do Flatpak estão contidos para não interferir completamente no sistema.

  • Instalação sem ser root: privilégios elevados não são necessários ao instalar um aplicativo Flatpak ou um runtime.

  • Aplicativos em área isolada: um dos principais objetivos do Flatpak é aumentar a segurança dos sistemas de desktop isolando os aplicativos uns dos outros. Isso é feito usando “sandboxing” e significa que, por padrão, os aplicativos executados com Flatpak têm acesso limitado ao ambiente do host.

O Flatpak tem algumas vantagens importantes sobre outras abordagens universais para distribuir aplicativos no Linux:

  • Descentralizado por design: embora o Flatpak forneça um serviço centralizado para distribuição de aplicativos, ele também permite hospedagem e distribuição descentralizada, para que desenvolvedores de aplicativos ou downstreams possam hospedar seus próprios aplicativos e repositórios de aplicativos.

  • Integração de desktop: Flatpak também oferece integração nativa para os principais desktops Linux, para que os usuários possam facilmente navegar, instalar, executar e usar aplicativos Flatpak por meio de seu ambiente de desktop e ferramentas existentes.

  • Eficiência de espaço: Flatpak elimina a duplicidade de bibliotecas e outros arquivos usados por vários aplicativos para economizar megabytes ou mesmo gigabytes de armazenamento, dependendo da quantidade de aplicativos instalados.

  • Atualizações delta: apenas os arquivos alterados são baixados para atualizações.

Outros benefícios para os desenvolvedores incluem:

  • Compatibilidade futura: o mesmo Flatpak pode ser executado em diferentes versões da mesma distribuição, incluindo versões que não foram lançadas ainda. Isso não requer nenhuma alteração ou gerenciamento por desenvolvedores de aplicativos.

  • Empacotamento: isso permite que os desenvolvedores de aplicativos enviem praticamente qualquer dependência ou biblioteca como parte de seu aplicativo. Isso fornece controle total sobre qual software é usado para compilar aplicativos.

  • Ambientes de aplicativos consistentes: por serem os mesmos em todos os dispositivos, os aplicativos têm o desempenho pretendido. Isso também facilita a identificação de bugs e a realização de testes.

  • Ramos: isso permite que os desenvolvedores enviem aplicativos de diferentes ramos, por exemplo, stable, beta, etc. mantendo o mesmo nome.

  • Plataformas mantidas: chamadas de runtimes, elas contêm coleções de dependências, que podem ser usadas por aplicativos e que podem tirar muito do trabalho de desenvolvimento de aplicativos.

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.

Informações sobre os componentes internos do Flatpak podem ser localizadas em Sob o capô.