Why nix
?
A lot of people write a lot of confusing stuff about nix.
So here, we'll try to break it down, instead.
nix
is "json
on steroids"
In configuration management, you have a choice: data vs. language.
On stackoverflow, you'll be taught the "data" stance, because it's simple.
And all of a sudden you hit reality. Outside of a "lab" environment, you suddenly need to manage a varying degree of complexity.
So you need configuration combinators, or in other words a full blown language to efficiently render your configurations.
There are a couple of options, that you'll recognize if you've gotten serious about the configuration challenge, like:
And there is nix
, the language. In most aspects, it isn't hugely distinct from the others,
but it has superpowers. Read on!
nix
' superpowers
You know the concept of string interpolation.
Every time nix
interpolates an identifier, there is something that
you don't immediately see: it keeps a so called "string context" right
at the site of interpolation. That string context holds a directed acyclic
graph of all the dependencies that are required to make that string.
"Well, it's just a string; what on earth should I need to make a string?", you may say.
There is a special category of strings, so called "Nix store paths"
(strings that start with /nix/store/...
). These store paths represent
build artifacts that are content addressed ahead-of-time through
the inputs of an otherwise pure build function, called derivation
.
When you finally reify (i.e. "build") your string interpolation, then all these Nix store paths get build as well.
This might be a bit of a mind-boggling angle, but after a while, you may realize:
- Nix is a massive build pipeline that tracks all things to their source.
- In their capacity as pure build functions,
derviation
s build reproducibly. - Reproducible builds are the future of software supply chain security, among other things.
- You'll start asking: "who the heck invented all that insecure nonsense of opaque binary registries? Shouldn't have those smart people have known better?"
- And from this realization, there's no coming back.
- And you'll have joined the European Union, banks and blockchain companies who also realized: we need to fix our utterly broken and insecure build systems!
- By that time, you'll have already assimilated the legendary Ken Thompson's "Reflections on Trusting Trust".