Frequently Asked Questions#

What is the origin of the name Nix?#

The name Nix is derived from the Dutch word niks, meaning nothing; build actions do not see anything that has not been explicitly declared as an input.

Nix: A Safe and Policy-Free System for Software Deployment, LISA XVIII, 2004

The Nix logo is inspired by an idea for the Haskell logo and the fact that nix is Latin for snow.

What are flakes?#

See Flakes.

Which channel branch should I use?#

Nixpkgs and NixOS have both stable and rolling releases.

These releases are distributed in variants called “channel branches”: Git branches used for releases, which are also converted to Nix channels.

Tip

Consult the nix-channel entry in the Nix Reference Manual for more information on channels, and the Nixpkgs contributing guide on the Nixpkgs branching strategy.

Stable#

Stable releases receive conservative updates to fix bugs or security vulnerabilities; otherwise package versions are not changed. A new stable release is made every six months.

  • On Linux (including NixOS and WSL), use nixos-*.

    These branches point to commits where most Linux packages got pre-built and can be fetched from the binary cache. Furthermore, these commits passed the full NixOS test suite.

  • On macOS/Darwin, use nixpkgs-*-darwin

    These branches point to commits where most Darwin packages got pre-built and can be fetched from the binary cache.

  • On any other platform it doesn’t matter which one of the above is used.

    Hydra doesn’t pre-build any binaries for other platforms.

All of these “channel branches” follow the corresponding release-* branch.

Example

nixos-23.05 and nixpkgs-23.05-darwin are both based on release-23.05.

Rolling#

Rolling releases follow master, the main development branch.

*-small channel branches have passed a smaller test suite, which means they are more up-to-date with respect to their base branch, but offer fewer stability guarantees.

Are there any impurities left in sandboxed builds?#

Yes. There is:

  • CPU architecture—great effort being made to avoid compilation of native instructions in favour of hardcoded supported ones.

  • System’s current time/date.

  • The filesystem used for building (see also TMPDIR).

  • Linux kernel parameters, such as:

  • Timing behaviour of the build system—parallel Make build does not get the correct inputs in some cases.

  • Insertion of random values, e.g., from /dev/random or /dev/urandom.

  • Differences between Nix versions. For instance, a new Nix version might introduce a new environment variable. A statement like env > $out is not promised by Nix to result in the same output, going into the future.