Após um ano e meio de desenvolvimento, foi lançado um novo ramo estável da ferramenta Flatpak 1.18, que fornece um sistema para compilar pacotes autossuficientes, não vinculados a distribuições específicas do Linux, executados em um contêiner especial que isola o aplicativo do restante do sistema. O suporte para a execução de pacotes Flatpak é garantido para Fedora, CentOS, Debian, Arch Linux, Gentoo, Linux Mint, Alt Linux e Ubuntu. Pacotes Flatpak estão incluídos no repositório Fedora e são suportados pelos programas nativos de gerenciamento de aplicativos GNOME e KDE.
Principais inovações do ramo Flatpak 1.18:
- Foi implementado suporte a permissões condicionais (conditional permission), permitindo que, ao solicitar permissões, seja verificada a presença de certas capacidades no sistema ou no runtime. Por exemplo, ao precisar acessar um dispositivo de entrada, em vez de "--device=all", pode-se solicitar a permissão "--device-if=all:!has-input-device --device=input", que fornecerá acesso apenas aos dispositivos de entrada ou reverterá para acesso a todos os dispositivos se a permissão seletiva não for suportada no runtime. Da mesma forma, pode-se solicitar acesso a dispositivos USB ("has-usb-device" e "has-usb-portal") ou subsistemas compartilhados.
- O acesso ao dispositivo /dev/ntsync foi liberado para acessar
o módulo do núcleo NTSYNC, que implementa um conjunto de primitivas para sincronização usadas no núcleo do Windows NT e que permitem aumentar significativamente o desempenho de jogos do Windows executados com Wine. - Para GPUs Intel Xe, foi incluído suporte à API VA-API para aceleração de hardware na decodificação de vídeo.
- Foi implementada a possibilidade de acesso ao dispositivo /dev/kfd (Kernel Fusion Driver) utilizando permissões fornecidas para dispositivos DRI. O driver kfd implementa uma interface para a execução direta de cálculos em GPUs AMD por meio de aplicativos que utilizam AMD ROCm, HIP e OpenCL.
- Adicionado suporte ao uso de opções de linha de comando para passar acesso a diretórios em aplicativos isolados.
- Adicionado suporte ao diretório "preinstall.d", definindo uma lista de aplicativos Flatpak pré-instaláveis (para incluir aplicativos Flatpak no sistema operacional).
- Foi permitida a instalação direta de aplicativos a partir de imagens de contêineres no formato OCI, que podem ser carregadas de repositórios OCI próprios e de arquivos locais.
- No comando "flatpak install --from", foi adicionado suporte a URI "flatpak+https://".
- A opção "--clear-env" foi adicionada ao comando "flatpak run" para limpar as variáveis de ambiente antes de iniciar o aplicativo.
- Possibilitada a exportação do diretório raiz do ambiente host para um ambiente isolado do aplicativo, acessível através do diretório /run/host/root.
- Adicionada a capacidade de emitir o resultado da execução de comandos no formato JSON.
- Fortalecida a isolação do ambiente de construção — o comando "flatpak build" agora não fornece acesso ao host por padrão.
- Adicionada a comando "reinstall" para reinstalar dependências (bundle).
- As configurações do D-Bus foram movidas do diretório /etc para /usr por padrão.
- Reduzido o tempo de inicialização ao usar o interpretador de comandos fish.
- Uma função foi adicionada ao libflatpak para obter informações sobre o tempo de criação da configuração, permitindo que aplicativos como o GNOME Software determinem que os dados em cache precisam ser atualizados.
- A opção de construção http_backend foi removida; a biblioteca libcurl agora é utilizada para downloads HTTP/HTTPS em vez de libsoup2.
- O uso de sequências de escape para indicar o progresso da operação está habilitado por padrão.
- Permitida a transmissão de permissões de acesso a dispositivos para ambientes sandbox internos criados através de portais Flatpak.
- Para aplicativos fornecidos na forma de imagens OCI, implementado um mecanismo "extra-data", permitindo por exemplo a reprodução de vídeo h.265 em pacotes Flatpak do Fedora Linux.
- Adicionado suporte para compressão de dependências (OCI bundle) usando o algoritmo zstd, que comprime dados de forma mais eficiente. O gzip continua a ser usado por padrão para compressão, garantindo máxima compatibilidade.
O Flatpak facilita a distribuição de programas que não estão nos repositórios padrão das distribuições, preparando um único contêiner universal, livrando os desenvolvedores da necessidade de criar versões separadas para cada distribuição. Para os usuários preocupados com a segurança, o Flatpak oferece a possibilidade de executar aplicativos questionáveis em um contêiner, fornecendo acesso seletivo apenas às funções de rede necessárias e aos arquivos do usuário. Para os usuários interessados em novidades, o Flatpak permite instalar as versões mais recentes e estáveis dos aplicativos sem a necessidade de fazer alterações no sistema. Por exemplo, pacotes Flatpak estão disponíveis para LibreOffice, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Telegram Desktop, Android Studio, etc.
Para reduzir o tamanho, o pacote inclui apenas as dependências específicas do aplicativo. As bibliotecas básicas do sistema e gráficas (GTK, Qt, bibliotecas GNOME e KDE, etc.) são fornecidas na forma de ambientes de runtime genéricos plugáveis. A principal diferença entre Flatpak e Snap é que Snap utiliza componentes do ambiente do sistema principal e isolamento baseado na filtragem de chamadas do sistema, enquanto Flatpak cria um contêiner separado do sistema e opera com conjuntos grandes de runtime, fornecendo como dependências não pacotes, mas ambientes de sistema genéricos (por exemplo, todas as bibliotecas necessárias para executar programas GNOME ou KDE).
Além do ambiente do sistema padrão (runtime), que é instalado através de um repositório específico, são fornecidas dependências adicionais (bundle) necessárias para o funcionamento do aplicativo. Juntas, o "runtime" e o "bundle" formam o conteúdo do contêiner, sendo que o "runtime" é instalado separadamente e vinculado a vários contêineres, permitindo evitar a duplicação de arquivos do sistema compartilhados entre os contêineres.
Em um sistema, podem ser instalados vários ‘runtimes’ diferentes (GNOME, KDE) ou várias versões de um mesmo ‘runtime’ (GNOME 50, GNOME 49). O contêiner com o aplicativo como dependência utiliza a vinculação apenas a um ‘runtime’ específico, sem considerar os pacotes separados que formam o ‘runtime’ selecionado. Todos os elementos ausentes são embalados diretamente junto com o aplicativo. Ao criar um contêiner, o conteúdo do ‘runtime’ é montado como a partição /usr, enquanto o ‘bundle’ é montado no diretório /app.
O conteúdo do "runtime" e dos contêineres de aplicativos é formado utilizando a tecnologia OSTree, onde a imagem é atualizada de forma atômica a partir de um repositório semelhante ao Git, permitindo aplicar métodos de controle de versão aos componentes da distribuição (por exemplo, é possível reverter rapidamente o sistema para um estado anterior). Os pacotes RPM são traduzidos para o repositório OSTree através de uma camada chamada rpm-ostree.
A instalação seletiva e a atualização de pacotes dentro do ambiente de trabalho não são suportadas — o sistema é atualizado não a nível de componentes individuais, mas como um todo, alterando atômica e completamente seu estado. São fornecidos meios para a aplicação incremental de atualizações, eliminando a necessidade de substituir toda a imagem a cada atualização.
O ambiente isolado formado não depende da distribuição utilizada e, com as configurações adequadas do pacote, não tem acesso aos arquivos e processos do usuário ou do sistema principal, além de não poder acessar diretamente o hardware, exceto através da saída via DRI. A saída gráfica e a organização da entrada são realizadas através do protocolo Wayland ou pela passagem de soquete X11. A interação com o ambiente externo é construída através do sistema de mensagens DBus e de uma API especial de Portais.
Para a isolamento, é utilizada a camada Bubblewrap e as tecnologias tradicionais de virtualização de contêineres do Linux, baseadas no uso de cgroups, namespaces, Seccomp e SELinux. Ao criar um pacote, a isolação pode ser desativada, o que alguns desenvolvedores de pacotes utilizam para obter acesso total ao sistema de arquivos e a todos os dispositivos do sistema.
Fonte: opennet.ru
