01 Languages & frameworks

Nix

A language built so that the same expression produces the same artefact, every time.

Role
Build & package language
Licence
LGPL v2.1
Since
2003
Upstream
Project site ↗

Nix is the language underneath NixOS, and the two are worth separating. NixOS is an operating system. Nix is a purely functional language for describing how software is built.

Why we still choose it

Nix treats a build as a function, which other build tools only work around. Given the same inputs, a Nix expression produces a bit-identical output on your laptop, in CI, on a server in Falkenstein, and again in three years. Dependencies are content-addressed rather than named, so two projects that need different versions of the same library cause no trouble at all.

Much of what we promise depends on that. Reproducible servers, a staging environment that matches production, and a rollback that takes one reboot all follow from the build being deterministic.

Where it shows up in our work

Beyond the servers, we use it for development shells that give a new engineer the exact toolchain on their first morning, for CI that builds the same closure the server will run, and for flakes that pin every input by hash, so you can check whether something really did work last week.

Where it falls short

The language is strange at first. It is lazily evaluated and purely functional, and its error messages have historically been unkind. Expect a week or two before it clicks. There are not many concepts to learn, though; they are unfamiliar more than complicated.

Nästa steg

Tell us what you are running.
We will tell you what it should be.

A first conversation costs nothing and takes forty minutes. You will leave it with our opinion of your stack, which is occasionally that you should change nothing at all.