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.
On Linux (including NixOS and WSL), use
nixos-unstable
.On any other platform, use
nixpkgs-unstable
.
*-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:
binfmt interpreters, e.g., those configured with
boot.binfmt.emulatedSystems
.
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.