Derivações

Derivação é o conceito de funções puras aplicadas a arquivos. A forma tradicional é utilizando a memória RAM.

Linguagens de programação geralmente usam um espaço de memória alocado dinamicamente para guardar os objetos em blocos, nas derivações o espaço alocado é na nix-store, que geralmente se localiza na pasta /nix/store. Cada objeto é um item nessa pasta.

Os itens dessa pasta podem ser classificados em dois tipos:

  • Derivações: aqueles arquivos de extensão drv que são basicamente especificações mastigadas para realizar as transformações. em uma derivação
  • Closures: outros arquivos e pastas, o produto final.

O processo de transformar uma derivação em uma closure é chamado de realização, esses caminhos são gerados dos drv ou baixados de caches se disponível.

um diagrama para esclarecer um tanto melhor

As closures podem ser apenas um arquivo ou uma pasta com arquivos.

Derivações podem ter dependências em outras derivações, o que gera um efeito cascata. Se a depende de b e a for realizada primeiro o Nix realizará b e então realizará a. Este conceito de dependência é aplicado para substituir o comportamento de hashmap de gerenciadores de pacote tradicionais e permite que o Nix tenha dois pacotes do mesmo programa em versões diferentes sem que um conflite com o outro, assim como uma árvore.

O resto basicamente aproveita esta base para produzir algo mais complexo, inclusive o NixOS, sistemas de módulos, scripts de ativação e tudo mais.