Hash Nix Store: perché quei percorsi non sono un caso

Hash Nix Store: perché quei percorsi non sono un caso

Ago 19, 2026 nix package-management reproducibility devops infrastructure-as-code

Nix Store Paths: Cosa Si Nasconde Dietro quegli Hash Criptici

Ti è mai capitato di sbirciare dentro /nix/store? Se sì, avrai sicuramente notato quelle directory con nomi che sembrano il risultato di un mixer industriale:

/nix/store/s0psayl7zvkvwdcqc8fy1sbv8rlf1yq8-bash-5.3p9

La parte leggibile è semplice—bash-5.3p9 ti dice esattamente cosa contiene. Ma quei 32 caratteri prima del trattino? Ecco dove inizia il mistero.

E la verità? La maggior parte delle spiegazioni che trovi in giro sono incomplete.

L'Errore Comune

"The hash comes from the inputs" — questo è quello che ti diranno quasi tutti. Non hanno torto, ma perdono un dettaglio fondamentale. La domanda vera è: quali input esattamente? Stiamo parlando dei file sorgente? Della ricetta di build? Dei byte prodotti? Delle dipendenze?

La risposta onesta è: dipende.


Due Meccanismi di Naming, Una Solo Directory

Nix utilizza due sistemi di denominazione diversi per i percorsi nel store, e convvivono pacificamente sotto /nix/store. Confonderli è esattamente il punto dove nasce la confusione.

Input-Addressed: Il Nome Prima del Build

Per la maggior parte dei pacchetti, Nix funziona come un architetto che revisiona i progetti. Quando scrivi un'espressione .nix, Nix la valuta producendo una derivation — una specifica concreta di cosa costruire, che include:

  • Lo script di build
  • Gli argomenti della costruzione
  • Le variabili d'ambiente
  • Gli output dichiarati
  • Le dipendenze

Con questa ricetta in mano, Nix può calcolare un identificatore unico prima che il build parta. I binari finiti non esistono ancora, eppure Nix già sa come chiamarli.

Ecco perché modificare un'espressione Nix non cambia sempre il percorso nel store. Se le tue modifiche non toccano la ricetta sottostante, Nix produce la stessa identità. Due espressioni diverse possono valutare ricette identiche, quindi condividono lo stesso percorso. Nix nomina ciò che costruirà, non la forma del tuo codice.

Content-Addressed: Il Nome dai Byte

Nix può anche nominare gli oggetti nel store direttamente dal loro contenuto. Quando esegui nix store add, passi a Nix qualcosa che già esiste, e lui calcola l'hash dei byte immediatamente. Nessuna valutazione, nessuna ricetta — solo contenuto.

Qui il percorso è determinato da ciò che c'è realmente nel file. Cambi un singolo byte, e l'hash cambia.


Perché Questa Distinzione Conta

Capire questi due sistemi di naming rende improvvisamente chiare diverse comportamenti di Nix:

Prevedere i cambi di percorso. Se ti chiedi "modificare X cambierà il percorso nel store?", chiediti: X cambia la ricetta di build o il contenuto effettivo? Modifichi un commento in un'espressione Nix? Probabilmente niente nuovo percorso. Cambi la versione di una dipendenza? Nuovo percorso assicurato.

Capire build che coesistono. Perché un risultato di build vecchio può stare accanto a uno nuovo nel store? Perché hanno identità diverse. Nix non sovrascrive — semplicemente non ne ha bisogno.

Il riutilizzo delle cache ha senso. Una binary cache può servire serenamente un percorso pre-costruito perché il nome identifica univocamente gli input del build. Stesso nome significa stesso contenuto, garantito.


Più di un Semplice Nome

Un percorso nel store non è mai veramente solo. I pacchetti costruiti referenziano altri percorsi (librerie dinamiche, interpreti, asset condivisi), e Nix traccia queste relazioni come un grafo.

Non è solo metadato — è una mappa completa delle dipendenze. Da qualsiasi percorso puoi tracciare la sua closure: tutto ciò che deve viaggiare con esso per funzionare su un'altra macchina. È così che funziona nix-copy-closure, ed è il motivo per cui i deployment con Nix sono affidabili.

Lo stesso database permette a Nix di verificare l'integrità. Può controllare se i byte su disco corrispondono ancora a ciò che ha registrato quando il percorso è stato creato. I percorsi nel store non sono nomi di directory opachi — sono identità interrogabili con una traccia di audit completa.


Il Riepilogo

Quegli hash apparentemente casuali non sono affatto arbitrari. Sono il risultato di una scelta di design deliberata: Nix nomina le derivations dai loro input e i contenuti dai loro byte. Questo approccio duale è ciò che rende Nix riproducibile, verificabile, e sorprendentemente prevedibile una volta che lo capisci.

La prossima volta che vedi un percorso nel store, niente panico. Leggi da destra a sinistra — quella è la parte umana. L'hash a sinistra è solo il modo in cui Nix fa una promessa: questo nome significa questo build, e nient'altro.


Vuoi approfondire? Che tu stia facendo deployment di container, gestendo infrastruttura, o semplicemente curioso sui build riproducibili, capire come funziona il tuo sistema paga sempre. Da NameOcean crediamo che i migliori developer siano quelli che comprendono cosa succede davvero sotto il cofano — non solo quali comandi eseguire.

Buona costruzione.

Read in other languages:

RU BG EL CS UZ TR SV RO PT FI PL NB NL HU FR DE ES DA ZH-HANS EN