Nix (package manager)

From Wikipedia, the free encyclopedia
(Redirected from Nix package manager)
Nix
Initial releaseJune 15, 2003; 20 years ago (2003-06-15)
Stable release
2.19.2[1] / November 29, 2023; 4 months ago (2023-11-29)
Repository
Written inC++
PlatformLinux, Unix-like
TypePackage management
LicenseLGPL
Websitenixos.org

Nix is a cross-platform package manager. It employs a model in which software packages are each installed into unique directories with immutable contents. These directory names correspond to cryptographic hashes that take into account all dependencies of a package, including other packages managed by Nix.

Package recipes for Nix are written in the purpose-built "Nix language", a declarative, purely functional, lazily evaluated, dynamically typed programming language.[2] Distinguishing features of the Nix language are strings with "context", string interpolation, first-class file system paths, and "indented strings", which in combination allow concisely expressing dependencies between file system data when specifying the contents of new files.

Dependencies between files, as declared in the Nix language, are automatically tracked and persisted in the "Nix store".[3] New files in the Nix store are created though "derivations". A derivation is a persistent data structure that specifies an executable, arguments and environment variables for its invocation (see execve), and other files to be read from the Nix store. The executable is then run in a sandbox that prohibits access to anything but the explicitly specified input files and only allows writing to the designated output path. Nix preserves dependency information in output files by scanning for the distinctive hashes used for package directory names.[4]

Automatic reference tracking ensures integrity of packages, even when they are transferred across machines. It also enables garbage collection of unused packages when no other package depends on them. At the cost of greater storage requirements, all upgrades in Nix are guaranteed to be both atomic and capable of efficient rollback. Unique directory names allow installing many packages with differing versions of shared libraries, and is claimed to eliminate so-called dependency hell.[5] This also lets multiple users safely install software on the same system without administrator privileges. As a result, the Nix package management and deployment model advertises more reliable, reproducible, and portable packages.[4][6]

Nix has full support for Linux, macOS, and WSL, and can safely be installed side by side with an existing package manager.

Nix is used for software packaging and distribution in CERN's LHCb experiment.[7] Nix underlies the distributed software development platforms Replit[8] and Google IDX.[9]

Nixpkgs[edit]

Nixpkgs is the package repository built upon the Nix package manager. According to Repology, as of March 2023 it contains more than 80,000 packages[10] and has a higher number of up-to-date packages than any other package repository.[11] Architectures supported by Nixpkgs are x86_64-linux, aarch64-linux, x86_64-darwin and aarch64-darwin. Packages for these architectures are built regularly, using a continuous integration service called Hydra,[12] and the results of these builds are uploaded to a public binary cache.[13] When Nix installs a package, it checks this cache and downloads the binary package to avoid building it locally.

Nixpkgs is developed in a single Git repository on GitHub.[14] Beside packages, it also contains the source code for NixOS.

NixOS[edit]

NixOS[15] is a Linux distribution that uses Nix for managing the entire system configuration, including the Linux kernel.[16]

See also[edit]

  • GNU Guix: another declarative package manager, and early clone of Nix, using GNU Guile for configuration and customization
  • Maak: a build automation utility similar to make, and early precursor to Nix
  • Runbook automation

References[edit]

  1. ^ "Release 2.15.2 · NixOS/Nix". GitHub.
  2. ^ "Nix Reference Manual: Nix Language". Retrieved 4 March 2024.
  3. ^ "Nix Reference Manual: Nix Store". 4 March 2024.
  4. ^ a b Dolstra, Eelco; de Jonge, Merijn; Visser, Eelco (November 2004). "Nix: A Safe and Policy-Free System for Software Deployment" (PDF). LISA '04: Proceedings of the 18th USENIX Conference on System Administration. pp. 79–92. Retrieved 11 July 2023.
  5. ^ Prins, Pjotr; Suresh, Jeeva; Dolstra, Eelco (22 December 2008). "Nix fixes dependency hell on all Linux distributions". Linux.com. Retrieved 11 July 2023.
  6. ^ Dolstra, Eelco (2006). The Purely Functional Software Deployment Model (PDF) (Ph.D.). Utrecht University. Retrieved 11 July 2023.
  7. ^ Burr, Chris; Clemencic, Marco; Couturier, Ben (2018). "Software packaging and distribution for LHCb using Nix" (PDF).
  8. ^ Replit (2023-05-25). "Replit — Super Colliding Nix Stores: Nix Flakes for Millions of Developers". Replit Blog. Retrieved 2024-03-05.
  9. ^ "Customize your IDX workspace | Project IDX". Google for Developers. Retrieved 2024-03-05.
  10. ^ "Nixpkgs unstable repository information - Repology".
  11. ^ "Repository statistics - Repology".
  12. ^ "RFC 0046 - Platform Support Tiers". GitHub.
  13. ^ "NixOS official binary cache".
  14. ^ "Nixpkgs github repository". GitHub.
  15. ^ "Nix & NixOS | Reproducible builds and deployments". nixos.org.
  16. ^ Dolstra, Eelco; Löh, Andres; Pierron, Nicolas (September 2008). NixOS: A Purely Functional Linux Distribution (PDF). ICFP 2008: 13th ACM SIGPLAN International Conference on Functional Programming. pp. 367–378.

External links[edit]