# Introduction
Nix est souvent considéré comme une boîte noire par ceux qui l'utilisent. Lorsque tu tapes nix build, un processus privilégié effectue des actions incompréhensibles à travers un socket Unix, et tu te retrouves avec un chemin dans /nix/store. Mais et si je te disais que toute cette magie peut être réduite à une simple exécution ?
Dérivations : L'Essence de Nix
Une dérivation, ou .drv, est simplement un plan de construction. En utilisant Nix, tu peux instancier une dérivation aussi simple que possible. Prenons l'exemple d'un fichier hello.nix qui crée un fichier avec le texte "Hello World".
``nix { name = "hello"; system = builtins.currentSystem; builder = "/bin/sh"; args = [ "-c" "echo 'Hello World' > $out" ]; } ``
En utilisant nix-instantiate, nous pouvons transformer ce fichier en une dérivation JSON lisible.
Les Quatre Étapes de Réalisation
La réalisation d'une dérivation se décompose en quatre étapes :
- Réaliser d'abord ses dépendances (inputDrvs).
- Nettoyer l'environnement pour ne conserver qu'un ensemble de variables connues.
- Définir
$outpour le chemin de stockage que la construction doit créer. - Exécuter le constructeur (builder) et vérifier qu'il a bien produit
$out.
Implémentation en Go : Moins de 100 Lignes
Voici comment tu pourrais reproduire le processus de nix-build en utilisant Go en moins de 100 lignes.
```go package main
import ( "encoding/json" "fmt" "os" "os/exec" "strings" )
const store = "/nix/store"
// Structure pour une dérivation ``` [...]
L'exécution de ce programme te montrera que ce que beaucoup considèrent comme de la magie est essentiellement une série de commandes exécutées dans le bon ordre.
Conclusion
Réduire nix-build à une poignée de lignes de code nous montre que la complexité peut souvent être simplifiée en la comprenant mieux. Si tu veux voir comment Nix peut transformer ton projet, discutons-en en 15 minutes.