NixOS: uma distribuição GNU/Linux “diferentona” das demais? Pois…

… neste incrível universo chamado Software Livre, com várias distribuições GNU/Linux competindo entre si, para ter “um lugar ao Sol”. Chegamos a um ponto em que muitos destes sistemas são tão parecidos, que a sua existência só faria sentido caso oferecesse algo de especial (que as outras não têm). Por isto, muitas análises geralmente destacam este aspecto logo de cara, além de descrever as demais particularidades (não tão originais assim) e outras informações adicionais. Embora sejam muitas, apenas poucas se destacam neste cenário…

Dentre elas, uma (que acabei de conhecer e) que me chamou a atenção foi o NixOS, uma distro que seria um outra qualquer, exceto pela forma com que promove a sua imutabilidade (um conceito que demorou um pouquinho para entrar na minha “cachola”). Trata-se de uma implementação do sistema no qual não é possível realizar alterações na infraestrutura de software, como a edição e gravação de arquivos no diretório raiz e outras pastas importantes para o funcionamento do sistema. Para que as atualizações sejam feitas, faz-se necessário gerar uma nova imagem do sistema e assim, reinicializá-la para que possamos contar com ele.

Então, como é feita a instalação de novas aplicações ou ainda, personalizações para atender a determinados propósitos? Em virtude da sua imutabilidade, o NixOS utiliza uma ferramenta especial que adota uma abordagem única para o gerenciamento de pacotes e a configuração de sistema “puramente funcional”, com base em uma linguagem de programação que trata as referências de pacotes como instruções declarativas, para a construção da imagem a ser inicializado. Tais pacotes (e todas as suas dependências) são mantidos à parte em um pasta específica e utiliza hashes para a sua identificação, ao invés dos nomes convencionais.

A partir daí, quaisquer operações feitas em relação a gestão do aplicativo ou serviço desejado, irá afetar apenas a sua estrutura de dados e deixar as demais partes do sistema intactas, contornando assim as ações “destrutivas” que afetam o funcionamento dos demais pacotes do sistema, além de prevenir o “inferno das DLLs”. Graças ao uso de hashs, poderemos manter no mesmo sistema várias versões de uma mesma aplicação, sem que elas interfiram uma nas outras. E uma vez que a declaração é feita de forma correta, o Nix (a ferramenta por trás de toda essa mágica) realiza o seu trabalho e constrói a tão desejada imagem personalizada!

Dentre outras particularidades interessantes a serem mencionadas, o Nix oferece suporte multiusuário, permitindo que usuários comuns possam “instalar” softwares com segurança. Além disso, as operações de gerenciamento de pacotes nunca substituem pacotes no repositório Nix, mas apenas adicionam novas versões em caminhos diferentes e por isto, elas são atômicas. Além de não “atrapalhar” as aplicações em execução no momento em que estão sendo atualizadas (já que os seus arquivos não estão sendo modificados), esta abordagem também permite reverter o processo e retornar para o uso das versões anteriores.

Eis, o universo do Software Livre e das distribuições GNU/Linux! Se não bastasse a gigantesca base de softwares disponíveis sobre as licenças livres e de código-aberto (acreditem ou não, estes são dois conceitos distintos), também temos uma grande variedade de sistemas operacionais, aplicações, bibliotecas, frameworks e APIs, entre outros elementos. Graças ao suporte da sua poderosa comunidade de usuários e aos investimentos feitos por empresas e instituições, todo este ecossistema vai se tornando mais complexo, robusto e até mesmo… “exuberante”!

Uma pena, que poucas pessoas se dão conta disso… &;-D