Flatpak duplica arquivos SIM

Da última vez que eu disse isso choveu ataques pessoais contra mim. Só que hoje eu vou mostrar na prática que isso ocorre


Backup

pra começar eu vou fazer mover minha pasta de Flatpaks pra outro lugar porque baixar um SDK de 4 GB de novo definitivamente não dá, sem falar que existem milhares de arquivos lá o que faria nosso experimento demorar bastante:

sudo mv "/var/lib/flatpak" "/var/lib/flatpak.bkp" 

Flathub

Um bom lugar pra pegar flatpaks é o Flathub, então vou adicionar o repositório:

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

O pacote de testes

Agora nesse passo vou adicionar um pacote pequeno (um tema GTK):

flatpak install flathub org.gtk.Gtk3theme.Arc-Dark -y

Primeira parte concluida;


Parte importante

Agora uma pausa pra explicar como o Flatpak faz a “mágica” de baixar apenas o arquivo que muda de cada pacote, uma das coisas que ele faz além dos diffs é armazenar cada arquivo no PC com sua hash no nome (ou seja sua “identificação única do conteúdo do arquivo”) em /var/lib/flatpak/repo/objects, se o arquivo existe e a hash é igual ao nome o arquivo não é baixado é apenas copiado para a pasta “runtime” ou “app”. Cada hash é determinada pelo conteúdo, por exemplo um arquivo com o texto “Flatpak” teria a seguinte hash (algoritimo para calculo sha1):

89e71efde082c91feb5a12a13af9beaceecb1341

TODOS os arquivos cujo conteúdo for igual a “Flatpak” terá essa hash, já se o conteúdo for diferente como “Snap” por exemplo teria essa hash:

455673bbb8a07ed8bbb167182434b0e0cdcd473b

Note que todas as hashes tem sempre o mesmo tamanho (no caso do SHA1 40 caracteres), o que garante que você não consiga “pegar” o conteúdo através da hash


Agora que você sabe que cada aquivo tem sua identificação e onde o Flatpak armezena os arquivos com a hash, nós podemos por a prova:

Listamos as hashes de cada arquivo do tema com o nome original e salvamos numa lista, assim:

find /var/lib/flatpak/runtime/org.gtk.Gtk3theme.Arc-Dark/x86_64/3.22/active/files ! -empty -type f -exec md5sum {} + | sort  > lista

Aqui está o motivo de ser um pacote pequeno, o calculo de hash leva tempo então calcular centenas de arquivos levaria muito tempo

Agora pegaremos as hashes dos arquivos em /var/lib/flatpak/repo/objects

find /var/lib/flatpak/repo/objects/ ! -empty -type f -exec md5sum {} + | sort   > lista_objetos

Lembre-se: hash igual, arquivo igual certo?

Pegamos um arquivo qualquer da nossa lista de arquivo do tema

Por exemplo: /var/lib/flatpak/runtime/org.gtk.Gtk3theme.Arc-Dark/x86_64/3.22/active/files/gtk.css

cat lista | grep "/var/lib/flatpak/runtime/org.gtk.Gtk3theme.Arc-Dark/x86_64/3.22/active/files/gtk.css"

E a saída será:

0e33edc0c8380bf1a951157d60a0b0c4  /var/lib/flatpak/runtime/org.gtk.Gtk3theme.Arc-Dark/x86_64/3.22/active/files/gtk.css

A hash no caso é o a primeira parte dasaída ou seja: “0e33edc0c8380bf1a951157d60a0b0c4”

Agora pegamos a nossa hash do arquivo (o texto antes dos dois espços) e buscamos na lista com a hash dos objetos:

cat lista_objetos | grep "0e33edc0c8380bf1a951157d60a0b0c4"

E a saída será:

0e33edc0c8380bf1a951157d60a0b0c4  /var/lib/flatpak/repo/objects/d0/c4734a44d23c01d6025fe1bddc3c613c56319a471fce0c947051b7594e0b11.file

Ou seja, os arquivos:

/var/lib/flatpak/repo/objects/d0/c4734a44d23c01d6025fe1bddc3c613c56319a471fce0c947051b7594e0b11.file

e

/var/lib/flatpak/runtime/org.gtk.Gtk3theme.Arc-Dark/x86_64/3.22/active/files/gtk.css

São exatamente iguais


Além de mostrar que meu ponto está certo, eu queria evidenciar as implicações disso:

  1. A quantidade de vezes em que um mesmo arquivo estará sempre na função f(x) = x +1 o que significa que pra cada runtime ou app (x) esse arquivo será copiado uma vez e manterá sua cópia, por exemplo se eu tenho 10 flatpaks que usam esse arquivo, eu terei 10 cópias desse arquivos + o original ou seja 11 arquivos exatamente iguais

  2. O Flatpak não usa arquivos do sistema ou seja, se você já tem o arquivo no sistema ainda que tenha a mesma assinatura serão baixados e copiados novamente

O que eu quero dizer é: o Flatpak multiplica seus arquivos sem nenhuma compactação ou seja aumenta o uso de disco desnecessariamente, agora eu pergunto:

Realmente vale a pena usar esse formato se o mesmo programa estiver disponível em outro formato?

5 Likes

Para aumentar a polêmica… Corrige o nome no título, é FATpak :rofl:.

Enquanto esse negócio não diminuir de tamanho; não tem como usar. Veja o AppImage! Tem praticamente o mesmo tamanho do .deb (não precisa ser instalado), e funciona perfeitamente bem (sem ocupar metade do disco)!?

6 Likes

:rofl: Realmente o bicho é FAT. kk

3 Likes

Eu fiz um teste no Linux Mint, troquei quase todos os apps que vem com o sistema e alguns que eu uso pelos mesmos apps só que em flatpak e snap, como Calculadora, VLC, Libreoffice, Rhythmbox, Gimp, Qbittorrent e assim vai e alguns eu troquei por snaps como Firefox e Chromium, até tentei trocar o Gnome System Monitor mas alem do tema ficar horrível e não exibia os ícones dos processos.

O que eu percebi foi o seguinte: muita lentidão ao abrir esses aplicativos pela primeira vez, que é agravado se você estiver com muitos programas rodando ao mesmo tempo, ou rodando um jogo, alguns programas como o Libreoffice em flatpak rodão mais lentos que em outras versões, integração com o sistema é muito ruim em alguns casos como o Chromium e Firefox que não abrem links magnéticos de torrent e outros links parecidos como apt:pacote e alguns aplicativos não conseguem acessar outras partições do HD mas que pode ser corrigido.

Eu não odeio os flatpaks e snaps, eu vou continuar usando eles, mas tem que melhorar muito, por enquanto o meu favorito é appimage que apesar de ter muitos problemas também é o que eu acho o melhor.

Olha o espaço que ocupam:

3 Likes

Vontade não faltou kkkkkk

Concordo, sem falar que ele tem esse problema e requer um monte de gambiarra para os Apps não ficarem zoados

1 Like

A parte que complica é que esses problemas são por Design ou seja, nunca vão ser corrigidos. A única exceção é a lentidão que com o advento dos SSDs, processadores e memórias cada vez mais rápidos vai sendo mitigados aos poucos

1 Like

Acredito que o Flatpak tenha sim utilidade, é uma forma prática de ter aplicativos atualizados em distros fixed release, como o Debian ou Ubuntu, é uma solução muito melhor que PPAs, você pode ter uma base estável e aplicativos atualizados de forma muito mais segura. Pessoalmente, não gosto de misturar bibliotecas GTK e Qt, o Flatpak me possibilita instalar programas em Qt em um ambiente Gnome, sem ter que instalar dezenas de bibliotecas do Qt.

É fato que o Flatpak duplica bibliotecas, mas uma vez que você tenha os principais runtimes instalados (GTK e Qt), a instalação de novos aplicativos escritos nestes toolkits costumam ser bem pequenos. Tenho o Flatpak do VLC instalado, a instalação inicial teve cerca de 1GB, devido ao runtime do Qt, mas agora que eu já tenho o runtime, ao instalar outra aplicação escrita em Qt, como o Telegram, o tamanho total necessário após a instalação é de apenas 62.2MB. Apenas os runtimes são grandes, outras bibliotecas costumam ser pequenas e não chegam a ser um problema, mesmo em SSDs de menor capacidade.

Edit: Esqueci de mencionar, o Flatpak é de grande valia para desenvolvedores, o Flatpak possibilita que um mesmo software rode em qualquer sistema Linux, sendo desnecessário criar pacotes individuais para cada distro, o que é um processo bastante trabalhoso.

1 Like

Tecnicamente o Flatpak instala todas as bibliotecas do Qt (até as que você não precisa) se tu não gosta disso, o Flatpak não é a tecnologia certa pra você

Tecnicamente pelo menos 100MB já que os objetos ainda ficam no HD

Disse que não gosto de misturar bibliotecas GTK e Qt, as bibliotecas do Qt no Flatpak estão contidas, o que não é um problema para mim.

No caso do Telegram, o download tem 26.6MB e após instalação 62.2MB, esse é o tamanho total.

A meu ver, os aplicativos que vem instalados por padrão na maioria das distros main stream é algo muito pior, o Linux Mint tem pelo menos uns 20 aplicativos que são completamente inúteis para mim.

Eu não uso muitos snaps tem focado somente em flatpak para evitar o boot mais lento que os snaps causam, mas ultimamente os flatpaks pelo menos no meu computador não anda consumindo tanto aramazenamento

Nessa questão de lentidão tende a ser melhorado só é percetível em hardwares mais antigos, só percebi quando abri vários programas em snaps e flatpaks (questão de segundos)

Errei a conta de fato, se a app/ tem 62 MB e você baixa 26 seria:

52 que você baixou (ele duplica os objetos) + 36 de duplicação de arquivos pre existentes dá 88 MB fora eventuais atualizações

Ainda assim é bem pequeno, mesmo que o usuário instale 50 aplicativos em Flatpak, ainda seria menor que uma instalação padrão do Windows 10.

1 Like

De fato com o Windows 10 SSDs de 120GB já são considerados pouco, por que só o sistema consome algo entre 20~30GB de armazenamento sem contar que as atualizações tendem a consumir mais espaço (quando testei ele em máquina virtual percebi isso)

Mas o flatpak ainda assim é útil. Tem uns emuladores e outros programas que eu uso que só encontrei lá, de forma fácil de instalar. E tem também uma boa variedade de programas, acho que mais do que o snap.

1 Like

Sim eu estava tentando instalar o OpenArena no computador mas a versão que estava nos repositórios (Mint 18.3) não funcionava, e resolvi instalando a versão em flatpak

2 Likes