Todos os gerenciadores de pacotes desfilarão no próximo carnaval

Às vezes, nada na vida está tão ruim que não possa piorar! Incluive no mundo maravilhoso do pinguim. E um caso típico são os gerenciadores de pacotes e afins. Uma bagunça geral, trabalhos que se sobrepõem e que nem sempre significam algo para o usuário “comum”.

Então, quantos existem? Depende do que chamamos de “gerenciador de pacotes”. Considerando os “tradicionais”, existem aproximadamente 15 a 20 principais. Se incluirmos também front-ends e ferramentas auxiliares, esse número facilmente ultrapassa 30.

Se levarmos em conta os formatos e sistemas de distribuição universais, como Flatpak, Snap e AppImage, a aumenta ainda mais. Se incluirmos os ecossistemas de linguagens de programação, como pip, npm, gem e composer, a lista se torna enorme, embora essas ferramentas não sejam propriamente gerenciadores de pacotes.

Há ainda uma distinção importante: o AppImage nem sequer é propriamente um gerenciador de pacotes, mas principalmente um formato para distribuição de aplicativos portáteis.

A forma mais útil de entender o ecossistema é não considerar apt, dpkg, rpm, Flatpak, Snap e GDebi como equivalentes, porque alguns são gerenciadores de pacotes, outros são ferramentas de baixo nível, front-ends, formatos ou sistemas de distribuição de aplicativos.

1. Família Debian

Distribuições como Debian, Ubuntu, Linux Mint, Pop!_OS e várias outras utilizam o formato .deb. O dpkg é a ferramenta de baixo nível, enquanto o APT trabalha em um nível superior, incluindo repositórios e resolução de dependências.

Ferramenta Função Formato
dpkg Gerenciador de baixo nível .deb
apt Gerenciador de alto nível .deb
apt-get Interface tradicional do APT .deb
apt-cache Consulta informações do APT .deb
aptitude Interface alternativa para APT .deb
GDebi Instalação de arquivos .deb locais .deb
Synaptic Interface gráfica para APT .deb
apt-file Pesquisa arquivos pertencentes a pacotes .deb
deborphan Identificação de pacotes órfãos .deb

2. Família Red Hat / Fedora

Aqui temos outra grande família, baseada no formato .rpm.

Atualmente, dnf é a ferramenta de alto nível predominante nas distribuições modernas da família Fedora/RHEL, enquanto rpm é a ferramenta de baixo nível. yum é o predecessor histórico do DNF e ainda aparece em sistemas e documentação antigos.

Ferramenta Função Formato
rpm Gerenciador de baixo nível .rpm
dnf Gerenciador de alto nível .rpm
yum Gerenciador histórico / compatibilidade .rpm
dnf5 Implementação moderna do DNF .rpm
rpm-ostree Gerenciamento de sistemas baseados em imagens/árvore .rpm
PackageKit Camada de abstração vários
GNOME Software Interface gráfica vários

3. Família SUSE / openSUSE

O openSUSE e o SUSE Linux Enterprise também utilizam RPM, mas possuem uma história e infraestrutura próprias; não são simplesmente uma extensão do Fedora/RHEL. O principal gerenciador de alto nível é o Zypper.

Ferramenta Função
rpm Gerenciador de baixo nível
zypper Gerenciador de alto nível
YaST Ferramenta administrativa, incluindo gerenciamento de software
PackageKit Camada de abstração
Discover Interface gráfica
Ferramenta Função
rpm Gerenciador de baixo nível
zypper Gerenciador de alto nível
YaST Ferramenta administrativa, incluindo gerenciamento de software
PackageKit Camada de abstração
Discover Interface gráfica

4. Arch Linux

O Arch segue uma abordagem diferente e utiliza o pacman como seu principal gerenciador de pacotes. O formato nativo moderno é normalmente .pkg.tar.zst.

Ferramenta Função
pacman Gerenciador principal
makepkg Construção de pacotes
PKGBUILD Receita de construção
yay AUR helper
paru AUR helper
pamac Gerenciador/interface usado em algumas distribuições Arch-based
Octopi Interface gráfica
pacman-mirrors Gerenciamento de mirrors em alguns derivados

O Gentoo é particularmente diferente porque seu modelo tradicional gira em torno do Portage e a principal ferramenta é o merge. Em vez de simplesmente instalar um binário pronto, o sistema pode baixar código-fonte e compilá-lo de acordo com as configurações do sistema.

O Arch também permite construir software, mas no Gentoo a construção a partir de receitas é uma parte muito mais central do modelo. A comparação de comandos do ArchWiki mostra, por exemplo, emerge como equivalente funcional a apt, dnf, pacman e zypper em várias operações.

7. Void Linux

O Void possui seu próprio sistema, o xbps:

Ferramenta Função
xbps-install Instalação
xbps-remove Remoção
xbps-query Consulta
xbps-install -Su Atualização
XBPS Sistema de gerenciamento

8. Slackware

O Slackware possui um modelo mais simples e tradicional. É um dos ecossistemas em que a filosofia de gerenciamento é bastante diferente de APT/DNF. Entre suas ferramentas estão:

Ferramenta Função
pkgtool Gerenciamento de pacotes
installpkg Instalação
removepkg Remoção
upgradepkg Atualização
slackpkg Gerenciamento de pacotes oficiais

9. Solus

O Solus também possui seu próprio gerenciador de pacotes, o eopkg.

10. Nix / NixOS

O Nix é ainda mais diferente. Ele não é apenas um programa para baixar e instalar pacotes. É um sistema de gerenciamento de pacotes e ambientes baseado em uma abordagem funcional e declarativa. Também pode ser utilizado em distribuições Linux, mas não faça isso!

As outras distros não foram feitas para recebê-lo e a integração e experiência de uso não serão perfeitas. Você foi avisao.

11. GNU Guix

O GNU Guix segue uma filosofia semelhante em alguns aspectos ao Nix. O sistema operacional correspondente é o “Guix System”, mas o gerenciador pode ser utilizado em outros ambientes. É, portanto, outra categoria além do tradicional apt/dnf.

12. Flatpak

Aqui começa uma distinção importante. O Flatpak não é simplesmente o “apt de outra distribuição”. Ele é um sistema para empacotar, distribuir e executar aplicativos Linux de maneira independente da distribuição, com forte utilização de “sandboxing”. O Flathub é um repositório de aplicativos; não é o próprio Flatpak.

13. Snap

O Snap também pertence a uma categoria diferente dos gerenciadores tradicionais de distribuição. O snapd é o serviço que gerencia os Snaps instalados e suas operações. Ele também procura tornar a distribuição de aplicativos menos dependente do sistema de pacotes da distribuição.

14. AppImage

Aqui temos outra distinção importante: AppImage não é propriamente um gerenciador de pacotes. É principalmente um “formato de distribuição de aplicativos”. A documentação do projeto o descreve como um modo de fornecer binários, incluindo dependências que não podem ser presumidas como presentes no sistema.

15. Gerenciadores de pacotes de linguagens

Se ampliarmos a definição de “gerenciador de pacotes”, entramos em outro universo.

Ecossistema Gerenciador
Python pip
Node.js npm
JavaScript yarn
JavaScript pnpm
Rust cargo
Ruby gem
PHP composer
Perl CPAN
R R packages
Haskell cabal, `stack
Elixir mix
Julia Pkg
Dart/Flutter pub

16. Front-ends gráficos

Também existem programas que não são gerenciadores de pacotes independentes, mas interfaces para outros sistemas. Alguns exemplos:

Programa Normalmente trabalha com
Synaptic APT
GNOME Software várias fontes
KDE Discover várias fontes
Pamac pacman/outros, dependendo da distribuição
Octopi pacman
YaST RPM/Zypper
Apper PackageKit
GDebi .deb

17. PackageKit

O PackageKit é outra coisa interessante. Ele procura fornecer uma “camada de abstração” para que programas gráficos possam conversar com diferentes sistemas de gerenciamento de pacotes.

18. Convertendo pacotes

Existem ainda ferramentas que fazem conversões entre formatos. Um exemplo conhecido é o alien, que pode converter determinados pacotes entre formatos como .deb e .rpm. Mas não significa que alien seja um gerenciador de pacotes completo.

19. A visão geral

Se colocarmos tudo em um único mapa, fica mais fácil entender:

20. A tabela que resume tudo

Família/ecossistema Alto nível Baixo nível/formato Tipo
Debian apt dpkg / .deb Sistema
Ubuntu apt dpkg / .deb Sistema
Linux Mint apt dpkg / .deb Sistema
Fedora dnf rpm / .rpm Sistema
RHEL dnf rpm / .rpm Sistema
Rocky/Alma dnf rpm / .rpm Sistema
openSUSE zypper rpm / .rpm Sistema
Arch pacman .pkg.tar.zst Sistema
Manjaro pacman .pkg.tar.zst Sistema
Alpine apk .apk Sistema
Void xbps pacotes XBPS Sistema
Gentoo emerge ebuild/Portage Sistema
Slackware pkgtool / slackpkg Slackware packages Sistema
Solus eopkg pacote Solus Sistema
NixOS nix derivations/store Declarativo
Guix guix store/derivations Declarativo
Flatpak flatpak Flatpak Apps
Snap snap/snapd Snap Apps
AppImage — AppImage Formato
Python pip PyPI packages Linguagem
Node.js npm npm packages Linguagem
Rust cargo crates Linguagem
Ruby gem gems Linguagem
PHP composer packages Linguagem

Então, afinal, quantos gerenciadores existem?

Uma resposta mais rigorosa seria: não existe um número oficial, porque depende de onde colocamos a fronteira. Se estivermos falando somente dos principais gerenciadores de pacotes nativos de sistemas Linux, temos algo na ordem de 15–20 sistemas relevantes, considerando as principais famílias e sistemas independentes.

Se adicionarmos front-ends, helpers, ferramentas de construção, camadas de abstração e sistemas de distribuição de aplicativos, passamos facilmente de 30. E se incluirmos gerenciadores de pacotes de linguagens, o universo passa a ser muito maior.

Essa é provavelmente a maneira mais correta de pensar no assunto: Linux não possui “um gerenciador de pacotes”; cada família de distribuição possui sua própria infraestrutura, e várias delas podem coexistir na mesma instalação.

A bagunça está lançada e nunca vai se resolver. Mas não se preocupe, pois - nesse momento - há outros gerenciadores sendo criados, todos com o objetivo mágico e inalcançável de “revolucionar” a gestão de pacotes no pinguim.

image

Referências:

Debian / APT / dpkg

Arch Linux / pacman

ArchWiki — Pacman

openSUSE / Zypper

openSUSE — Documentação oficial

Gentoo / Portage / emerge

Gentoo — Relação entre emerge e ebuild

Gentoo Wiki — Portage

Alpine Linux — Especificação do APK

Void Linux — Documentação oficial

Void Linux — Manuais e documentação de XBPS

Flatpak — Documentação oficial em português

Flatpak — Primeiros passos

Flatpak — Uso da linha de comando

Flatpak — Documentação de referência

AppImage — Documentação oficial

AppImage — Introdução

AppImage — Guia rápido

AppImage — Guia do usuário

Snapcraft — Documentação oficial

Snapcraft — Instalação e gerenciamento do snapd

Nix — Documentação oficial

NixOS — Documentação

GNU Guix — Documentação oficial

3 curtidas