Nix is a powerful package manager for Linux and other Unix systems that makes package management reliable and reproducible. It provides atomic upgrades and rollbacks, side-by-side installation of multiple versions of a package, multi-user package management and easy setup of build environments. Read more…
Nix’s purely functional approach ensures that installing or upgrading one package cannot break other packages. This is because it won’t overwrite dependencies with newer versions that might cause breakage elsewhere. It allows you to roll back to previous versions, and ensures that no package is in an inconsistent state during an upgrade.
Nix builds packages in isolation from each other. This ensures that they are reproducible and don’t have undeclared dependencies, so if a package works on one machine, it will also work on another.
Nix makes it trivial to set up and share build environments for your projects, regardless of what programming languages and tools you’re using. For instance, running the command “nix-shell '<nixpkgs>' -A firefox” gives you a Bash shell in which all of Firefox’s build-time dependencies are present and all necessary environment variables are set.
Nix supports multi-user package management: multiple users can share a common Nix store securely, don’t need to have root privileges to install software, and can install and use different versions of a package.
Conceptually, Nix builds packages from source, but can transparently use binaries from a binary cache if available. This combines the flexibility of source package management with the convenience of binary package management.
Nix runs on Linux, Mac OS X, FreeBSD, and other systems. Nixpkgs, the Nix Packages collection, contains thousands of packages, many pre-compiled.