Sob o capô

Esta página fornece uma visão geral de como o Flatpak funciona internamente. Embora não seja necessário estar familiarizado com isso para usar o Flatpak, algumas pessoas podem achar interessante. Conhecer a arquitetura do Flatpak também ajuda a entender melhor como e por que funciona da maneira que funciona, da perspectiva do usuário e do desenvolvedor de aplicativos.

“Git para aplicativos”

O Flatpak é construído sobre uma tecnologia chamada OSTree, que é influenciada e muito semelhante ao sistema de controle de versão Git. Como o Git, o OSTree permite que os dados versionados sejam rastreados e distribuídos entre diferentes repositórios. Porém, enquanto o Git é projetado para rastrear arquivos fonte, o OSTree é projetado para rastrear arquivos binários e outros dados grandes.

Internamente, o Flatpak, portanto, funciona de maneira semelhante ao Git, e muitos conceitos do Flatpak são análogos aos conceitos do Git. Como o Git, o Flatpak usa repositórios para armazenar dados e rastreia as diferenças entre as versões.

Com o Flatpak, cada aplicativo, runtime e extensão é um ramo em um repositório. Um trio identificador, como com.empresa.Aplicativo/x86_64/stable é uma referência a esse ramo. A saída de um processo de compilação do Flatpak é um diretório de arquivos do qual é feito commit para um desses ramos.

Quando um aplicativo é instalado com o Flatpak, ele é extraído do remoto para um novo ramo em um repositório local. Em seguida, são gerados links que apontam dos lugares certos no sistema de arquivos para os arquivos do aplicativo no repositório (estes são links físicos, que são rápidos para resolver e espaço em disco eficiente). Em outras palavras, todos os aplicativos instalados são armazenados em um repositório de controle de versão local e, em seguida, são mapeados no sistema de arquivos local.

O rastreamento de versão é, portanto, uma parte essencial da arquitetura do Flatpak, e isso torna a atualização do software para a versão mais recente muito eficiente. O controle de versão também possibilita reversões, por isso é fácil voltar para uma versão anterior, se necessário.

Armazenar aplicativos em um repositório OSTree local tem outras vantagens. Por exemplo, ele permite que os arquivos armazenados no disco sejam deduplicados, portanto, o mesmo arquivo que pertence a vários aplicativos (ou runtimes) é armazenado apenas uma vez.

Tecnologias subjacentes

O Flatpak utiliza várias tecnologias preexistentes. Esses incluem:

  • O utilitário bubblewrap do Project Atomic, que permite que usuários sem privilégios configurem e executem contêineres, usando recursos do kernel, como:

    • Espaços de nomes

    • Montagens vinculadas (“bind”)

    • Regras seccomp

  • systemd para configurar cgroups para sandboxes

  • D-Bus, uma maneira bem estabelecida de fornecer APIs de alto nível para aplicativos

  • The OSTree system for versioning and distributing filesystem trees

  • O formato OCI da Open Container Initiative, como uma alternativa ao OSTree usado pela infraestrutura do Fedora

  • Flatpak pode usar OSTree ou OCI para pacotes de arquivo único.

  • Metadados de Appstream, para permitir que os aplicativos Flatpak apareçam bem nos aplicativos de centros de software