Realisation is the process whereby a Nix derivation is transformed into a package. While a derivation is essentially a plan for a package, realisation is the build process turns that plan into an actual output directory full of content.
.drv
filesWhen you run nix build
to build a package, the Nix CLI first looks at the derivation
function for the function and transforms it into an intermediate .drv
file, which is essentially a formal representation of the derivation
function.
All .drv
files are stored in the Nix store with a hashed path, such as /nix/store/m2nb4d0pfydr8bq5ww1yqbrkvvf18zbl-perl-5.36.0.drv
, which ensures that any change in a derivation
function results in a new .drv
file with a new path.
The CLI then uses the .drv
file as the blueprint for the actual build process, which always builds the package's entire dependency tree.
Once Nix has built a .drv
file for the derivation, it uses the encoded instructions in the file to actually build the package in a sandboxed environment, which essentially means that realisation doesn't rely on or affect any global state on your machine, such as configuration files in /etc
.
Everything required for the build process is drawn from:
cat
, touch
, mkdir
, and mv
.git
command is invoked in the build logic, rather than a "global" Git at a path like /usr/bin/git
.