Não é só uma, são algumas, mas obviamente tem A distro.
As que eu mais amo são openSUSE e Arch Linux, openSUSE conheci após ser rejeitado pelo Fedora inúmeras vezes.
Não sei o que acontece, mas o Fedora sempre quebra na minha mão, em todas as máquinas que tentei.
openSUSE
openSUSE é maravilhoso, o YaST2 apesar de ser arcaico graficamente falando, é muito poderoso e útil, e criar snapshots BTRFS no openSUSE é muito fácil com Snapper, quando tentei replicar no Arch Linux... bom, não deu tãão certo assim, é muito mais trabalhoso.
E para nós que somos devs, uma coisa muito incrível do openSUSE é o openQA, pega esse teste como exemplo: o openQA roda a distro direto em uma VM e compara regiões de capturas de tela com as versões esperadas, se estiver acima de um threshold de diferença, o teste passa, se não, o teste falha. É uma forma muito poderosa e confiável de teste — o teste na prática, só que automatizado.
E o openSUSE na minha experiência, mesmo entregando atualizações em lotes (pois eles testam em lotes), ainda entrega antes do Arch Linux.
Arch Linux
Esse foi o meu xodó por muito tempo, mas foi desbancado por outra distro... que eu já conto, calma aí.
O principal motivo nem é ser rolling release, prefiro o openSUSE nesse quesito. O principal motivo de eu amar o Arch Linux é o AUR. Nenhuma distro tem algo remotamente perto disso, mesmo com o Repology apontando para o Nix ter ganhado, o Nix não tem tudo que o AUR tem.
No AUR eu posso achar tudo que eu preciso: pacotes que só tem para Debian e derivados, binários que não podem ser distribuídos, pacotes non-free, apps distribuídos só para Windows e macOS mas que são multiplataforma por trás (apps Electron), etc...
E muito frequentemente no meu trabalho eu acabo precisando de algo que só consigo encontrar no AUR e que daria um pouco mais de trabalho de obter no openSUSE (quando possível, já que na maioria das vezes não é).
Por qual motivo o Nix tem tanto pacote?
Coisas que seriam normalmente distribuídas no mesmo pacote, são distribuídas em pacotes separados no Nix, como alguns plugins básicos [mas não necessários] do OBS.
E coisas que normalmente seriam distribuídas por gerenciadores de pacotes externos, como plugins do vim e neovim (inclusive parsers do tree-sitter), pacotes do Python e Ruby, etc... São distribuídos diretamente no nixpkgs, o que aumenta significativamente o número de pacotes.
E finalmente... NixOS
Sim, ele mesmo... Hoje o NixOS é minha distro favorita.
O Nix tem reproducibilidade de instalação, reproducibilidade de builds, rollbacks, ambientes coerentes para os pacotes, é extremamente confiável e carrega uma fama de inquebrável. Ele não é de fato inquebrável, só é extremamente difícil de fazer acidentalmente. Obviamente intencionalmente é fácil, só jogar a máquina no oceano... ou rodar um rm
com --no-preserve-root
(o que for mais simples).
No NixOS eu salvo meus arquivos .nix
no Git, e sempre que eu quiser um clone do meu sistema, só copiar e colar durante a instalação, ou a qualquer momento que eu quiser. Se algo der errado após atualizar ou reconstruir meu sistema, o Nix tem algo chamado Gerações, que permite voltar para um estado anterior do sistema.
No NixOS quase tudo se resume a: se o sistema foi reconstruído com sucesso, vai funcionar. O Nix cuida de todas as configurações que precisam ser feitas para as coisas funcionarem em harmonia, algo que no Arch Linux nem sempre é tão simples.
A principal diferença das Gerações do Nix para algo tipo um openSUSE Microos (Snapshots BTRFS) e Fedora Silverblue (OSTree), é que ambos voltam o sistema de arquivos para um estado anterior, onde não há nenhuma visibilidade do que aconteceu após aquele snapshot/commit. Já o Nix é construído em volta de symlinks e ambientes coerentes, então trocar de Geração é basicamente atualizar symlinks, e tudo que foi feito após aquela Geração ainda está visível, apenas não está configurado como o ambiente atual.
Ambientes de desenvolvimento também é algo muito interessante, tudo pode ser resumido a: shell.nix
e nix-shell
. Não precisa de um nvm
, rvm
, sdkman
. Depois que você sair desse shell, tudo que foi instalado sai de escopo (de forma resumida: sai do seu $PATH
, mas continua instalado).
E as builds reproduzíveis são uma maravilha, você já pode aproveitar enquanto desenvolve sua aplicação para criar uma derivação para o Nix, e você vai saber que se compilar na sua máquina, vai compilar na de qualquer outro (contanto que seja da mesma arquitetura e sistema operacional, já que o Nix suporta macOS). Não só isso, a sua versão que você compilou, roda na minha máquina (dado as mesmas condições anteriores), e com isso o cachix entra em ação: o Nix roda as builds em servidores CI/CD que já enviam os artefatos ao cachix, e você só precisa baixar os binários.
Existem muitas outras coisas que amo sobre o Nix e o NixOS, como, por exemplo:
- overlays
- Nix Language
- Nix Flakes
- Home Manager
- Poder ser instalado no macOS
- Poder ser instalado em qualquer distribuição Linux
Principalmente esses dois últimos pontos fazem do Nix praticamente um gerenciador de pacotes universal, contanto que você esteja disposto a fazer alguns sacrifícios (espaço em disco, dois gerenciadores de pacotes para lidar, etc.), ou seja, não precisa fazer um pacote separado para cada distro e para o macOS, e depois descobrir como publicar esse pacote em cada uma das infinitas distros, só fazer para o Nix.