Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Zoey de Souza Pessanha
Zoey de Souza Pessanha

Posted on • Edited on

     

O que é Nix e por que você deveria experimentar?

Hoje em dia temos inúmeras opções para configurar um ambiente de desenvolvimento
que seja facilmente reproduzível e encapsulado. A escolha mais comum tem sido os
contêineresDocker.

Entretanto, nas minhas pesquisas aventureiras pela internet, descobri uma ferramenta bem
atrativa: oNix.

Nesta breve série de artigos irei discorrer não só sobre o gerenciador de pacotes mas também mostrar
exemplos de ambientes para desenvolvimento que utilizam as vantagens doNix!

O que é Nix?

Nix é um gerenciador de pacotes e uma linguagem de programação
funcional-declarativa, preguiçosa (nem sempre), e dinamicamente tipada que usamos
para descrever as _derivações (resultado das expressões emNix) para esse gerenciador.

Como o gerenciador de pacotes funciona?

A partir de um arquivo que contenha as instruções para construção do pacote, oNix computa
uma derivação. Para uma derivação ser considerada válida, o arquivo precisa ter as seguintes informações:

  • referência para as dependências do pacote a ser construído;
  • intruções de como construir o pacote;
  • metainformações sobre o pacote, como os mantenedores;

Quando o pacote for construído com sucesso, um caminho será criada com o resultado da construção
no formato:/nix/store/<hash>-<nome>-<versão>, onde ohash é criado a partir dos dados da derivação.

Veja o conjunto de expressões Nix que gera a derivação do softwareGNU hello, por exemplo:

{lib,stdenv,fetchurl}:stdenv.mkDerivationrec{pname="hello";version="2.10";src=fetchurl{url="mirror://gnu/hello/${pname}-${version}.tar.gz";sha256="0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i";};doCheck=true;meta=withlib;{description="A program that produces a familiar, friendly greeting";longDescription=''      GNU Hello is a program that prints "Hello, world!" when you run it.      It is fully customizable.    '';homepage="https://www.gnu.org/software/hello/manual/";changelog="https://git.savannah.gnu.org/cgit/hello.git/plain/NEWS?h=v${version}";license=licenses.gpl3Plus;maintainers=[maintainers.eelco];platforms=platforms.all;};}
Enter fullscreen modeExit fullscreen mode

Dessa forma oNix consegue assegurar que a mesma derivação vai sempre construir o mesmo pacote,
a não ser que alguma instrução de construção use informações dependentes de hardware.

Vantagens de usar Nix

Ambiente sempre reproduzível

Essa é a vantagem mais clara da utilização doNix para gerir pacotes e dependências, pois como
dito anteriormente, se duas pessoas contruirem um pacote com a mesma derivação, as duas terão o mesmo
resultado final. Mesmo que haja uma diferença na versão de alguma dependência, o caminho gerado pela
derivação irá se alterar, explicitando que houve uma mudança.

Múltiplas versões do mesmo pacote simultâneamente

Como cada pacote é instalado em seu próprio caminho, não há colissões. Isso se torna muito atrativo para
desenvolvedores, pois pode ser comparado com os ambientes virtuais dePython, só que para qualquer programa.

Além disso, como a cada versão construída do pacote gera um novo caminho, há sempre a possibilidade de retornar
à uma versão antiga, desde que ela não tenha sido apagada pelogarbage-collector.

Construções seguras

Toda a contrução de cada derivação é isolada do sistema, o que torna seguro permitir que usuários
com menos privilégios executem suas derivações.

Teste novas ferramentas temporariamente

Digamos que você precisa converter um arquivo escrito comMarkdown paraHTML com o pandoc! Porém, você
se lembra que não possui esse programa e precisa usá-lo apenas uma vez.

Naturalmente você possui algumas opções:

  1. Baixar o programa dos repositórios oficiais, realizar a conversão e desinstalar;
  2. Usar uma imagemDocker do programa, utilizá-la e deixar ela ocupando espaço na sua máquina;

Com oNix é possível criar um ambiente sob demanda, mas sempre reprodutível, no qual um pacote não
existente no seu sistema passe a ser utilizável.

No caso do pandoc, com um simplesnix-shell -p pandoc você tem acesso ao pacote de forma temporária!

Ecossistema

Essas vantagens são bem atrativas, mas os casos de uso para oNix não param por aí. A seguir,
mostro exemplos do mundo real que usamNix.

Nixpkgs

nixpkgs é a maior coleção de derivações para o gerenciador de pacotes que podem ser alteradas e combinadas.
Além de derivações específicas para cada linguagem, como um mirror atualizado doHackage, existem derivações de
diversos outros softwares.

NixOS

Já oNixOS é uma distribuição GNU/Linux que é configurada a partir de expressõesNix, além de possuir nativamente
o gerenciador de pacotes. Todo o sistema é tratado como uma grande derivação que depende de todas as outras sub derivações
que você monta.

Neste trecho de exemplo, mostro como habilitar o uso dopulseaudio noNixOS:

sound.enable=true;hardware.pulseaudio={enable=true;package=pkgs.pulseaudioFull;};
Enter fullscreen modeExit fullscreen mode

Esse trecho foi retirado da minhaconfiguração pessoal.

Home Manager

Um projeto muito interessante no ecossistemaNix é ohome-manager, que permite
gerenciar um ambiente (dotfiles) completo a nível de usuário.

Neste trecho da minha configuração pessoal, declaro alguns pacotes a nível de usuário:

programs={home-manager.enable=true;gpg.enable=true;command-not-found.enable=true;emacs.enable=true;};services.clipmenu.enable=true;services.emacs.enable=true;home.username="matthew";home.homeDirectory="/home/matthew";home.packages=withpkgs;[# barhaskellPackages.xmobar# chattdesktopdiscord# browsergoogle-chrome# themelxappearance# toolsdocker-composeinsomniaqbittorrentobs-studioscreenkeygitAndTools.gh# audiospotify# imagespeekflameshotimagemagick# othersany-nix-shellarandrbitwarden-cli];
Enter fullscreen modeExit fullscreen mode

Integração com diversas ferramentas

Também é possível usar oNix para outras tarefas, como descrever a construção de uma imagemDocker:

{pkgs?import<nixpkgs>{system="x86_64-linux"}}:pkgs.dockerTools.buildLayeredImage{# função para facilitar a construção da imagemname="nix-hello";# nome da imagem a ser construídatag="latest";# tag para a imagemcontents=[pkgs.hello];# pacotes presentes na imagem}
Enter fullscreen modeExit fullscreen mode

Conclusão

Em suma, oNix e seu ecossistema é uma boa opção para quem quer ter novas experiências
no mundo Unix, permitindo que um ambiente de desenvolvimento ou até mesmo uma distribuição
GNU/Linux completa possa ser facilmente reproduzida, além de usufruir das vantagens da imutabilidade
de uma linguagem funcional.

Porém, é importante ter em mente que assim como qualquer ferramenta, oNix não funciona como
"bala de prata". Existem alguns contras que você deve levar em consideração:

  • O número de pacotes envelopados, apesar de serem inúmeros, não se comparam (ainda) com os repositóriosoficiais de algumas distribuições, por exemplo.
  • Alguns pacotes podem não ser atualizados com frequência.

Fontes e recursos adicionais

Este post foi publicado com minha ferramenta de linha de comandodevit!
Você pode encontrar instruções para instalaçãoneste link.

Top comments(4)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss
CollapseExpand
 
hallison profile image
Hallison Batista
É isso aí! Eu gosto de programar.
  • Location
    Manaus, Amazonas, Brazil
  • Work
    Software Engineer
  • Joined

Interessante. Por acaso, você conhece outra solução semelhante? O Nix parece ser excelente e focou em uma solução completa, desde a gestão dos pacotes (NixPkg) até o sistema operacional (NixOS). Pelo que li no site, a instalação do NixOS parece ser tranquila.

CollapseExpand
 
zoedsoupe profile image
Zoey de Souza Pessanha
  • Email
  • Location
    Campos dos Goytacazes, RJ, Brazil
  • Education
    Computer Science Student
  • Work
    Full Stack Developer at Nubank
  • Joined
• Edited on• Edited

Creio que não... Pelo menos não com o mesmo tamanho do ecossistema Nix. O que mais se aproxima, assim como falei no blog são contêineres Docker e mesmo assim estes são muito diferentes.

Nix (nixpkgs) não é uma linguagem exatamente nova...

Além disso, também existem outros projetos no ecossistema:Nixops (github.com/NixOS/nixops), que tem a intenção de ser um concorrente direto do Docker, promentendo builds com transparência referencial e estabilidade! Ainda não usei, mas tenho vontade de experimentar.

Há também oflakes, que deixa as expressões Nix ainda mais declarativas:nixos.wiki/wiki/Flakes

CollapseExpand
 
hallison profile image
Hallison Batista
É isso aí! Eu gosto de programar.
  • Location
    Manaus, Amazonas, Brazil
  • Work
    Software Engineer
  • Joined

Gostei muito da proposta do Nix. Vou estudar a tecnologia.

Em uma breve pesquisa, encontrei o projeto Linux Containers da Canonical (linuxcontainers.org/). Ainda não estudei profundamente e nem testei, mas a proposta parece ser muito boa.

Obrigado, Mateus.

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

  • Location
    Campos dos Goytacazes, RJ, Brazil
  • Education
    Computer Science Student
  • Work
    Full Stack Developer at Nubank
  • Joined

More fromZoey de Souza Pessanha

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp