NixOS

Short description: Linux distribution

NixOS

Developer| NixOS contributors
NixOS Foundation[1][2]
Written in| Nix expression language[note 1]
OS family| Linux (Unix-like)
Working state| Current
Source model| Open source
Initial release| 0.1 / June 3, 2003; 21 years ago (2003-06-03)
|Final release|Latest release}}| 23.11[3] / November 29, 2023; 7 months ago (2023-11-29)
Marketing target| General purpose
Package manager| Nix
Platforms| i686, x86-64, AArch64
Kernel type| Monolithic (Linux kernel)
License| MIT[4][note 2]
Official website| nixos.org

NixOS is a free and open-source Linux distribution based on the purely functional Nix package manager. NixOS is composed using modules and packages defined in the nixpkgs project.

NixOS uses an immutable design and an atomic update model.[5] Its use of a declarative configuration allows reproducibility and portability.[6]

## Contents

* 1 History
* 1.1 Versions
* 1.2 Release version history
* 2 Features
* 2.1 Declarative configuration model
* 2.2 Reliable and atomic upgrades
* 2.3 Rollbacks
* 2.4 Reproducible system configurations
* 2.5 Source-based model with binary cache
* 2.6 Consistency
* 2.7 Multi-user package management
* 3 Implementation
* 4 Reception
* 5 Notes
* 6 See also
* 7 References
* 8 External links

## History

In 2003, Eelco Dolstra started NixOS as a research project.[7][8] Dolstra says that the purpose of the project was to achieve a system for correct software deployment.[9] In 2015, the NixOS Foundation was founded in the Netherlands, aiming to support projects like NixOS that implement the purely functional deployment model.[10]

### Versions

### Release version history

Name  | Date

|

NixOS 13.10 "Aardvark" | October 2013
NixOS 14.04 "Baboon" | April 2014
NixOS 14.12 "Caterpillar" | December 2014
NixOS 15.09 "Dingo" | September 2015
NixOS 16.03 "Emu" | March 2016
NixOS 16.09 "Flounder" | September 2016
NixOS 17.03 "Gorilla" | March 2017
NixOS 17.09 "Hummingbird" | September 2017
NixOS 18.03 "Impala" | March 2018
NixOS 18.09 "Jellyfish" | September 2018
NixOS 19.03 "Koi" | March 2019
NixOS 19.09 "Loris" | September 2019
NixOS 20.03 "Markhor" | March 2020
NixOS 20.09 "Nightingale" | September 2020
NixOS 21.05 "Okapi" | May 2021
NixOS 21.11 "Porcupine" | November 2021
NixOS 22.05 "Quokka" | May 2022
NixOS 22.11 "Raccoon" | November 2022
NixOS 23.05 "Stoat" | May 2023
NixOS 23.11 "Tapir" | November 2023

NixOS publishes stable releases twice a year, around the end of May and the end of November.[11][12][13]

## Features

NixOS graphical installer

### Declarative configuration model

In NixOS, the entire operating system—including the kernel, applications, system packages, and configuration files—is built by the Nix package manager from a description in the Nix language. Building a new configuration will not overwrite previous configurations.[14]

A NixOS system is configured by writing a specification of the functionality that the user wants on their machine in a global configuration file (typically located in `/etc/nixos`). The following is a minimal configuration of a machine running an SSH daemon:[15]

boot.loader.grub.device = "/dev/sda";
fileSystems."/".device = "/dev/sda1";
services.sshd.enable = true;

There is extensive documentation of the available options and parameters.[16]

After changing the configuration file, the system can be updated using the `nixos-rebuild switch` command. This does everything necessary to apply the new configuration, including downloading and compiling packages, and generating configuration files.

### Reliable and atomic upgrades

Since Nix files are pure and declarative, evaluating them will always produce the same result, regardless of what packages or configuration files are on the system.

NixOS has a transactional approach to configuration management, making configuration changes such as upgrades atomic. For example, if an upgrade to a new configuration is interrupted by power failure, the system will still be in a consistent state: it will either boot in the old or the new configuration.[17]

### Rollbacks

If, after a system update, the new configuration is undesirable, it can be rolled back using a special command (`nixos-rebuild switch --rollback`). Every system configuration version automatically shows up in the system boot menu. If the new configuration crashes or does not boot properly, an older version can be selected. Rollbacks are lightweight operations that do not involve files being restored from copies.[18]

### Reproducible system configurations

NixOS's declarative configuration model makes it easy to reproduce a system configuration on another machine. Copying the configuration file to the target machine and running the system update command generates the same system configuration (kernel, applications, system services, and so on) except for parts of the system not managed by the package manager, such as user data.

### Source-based model with binary cache

The Nix build language used by NixOS specifies how to build packages from source. This makes it easy to adapt the system to user needs. However, building from source being a slow process, the package manager automatically downloads pre-built binaries from a cache server when they are available. It is possible to disable the binary cache and force building from source by using `--option substitute false` as an argument. This gives the flexibility of a source-based package management model, with the efficiency of a binary model.[19]

### Consistency

The Nix package manager ensures that the running system is consistent with the logical specification of the system, meaning that it will rebuild all packages that need to be rebuilt. For instance, if the kernel is changed, then the package manager will ensure that external kernel modules will be rebuilt. Similarly, when a library is updated, it ensures that all the system packages use the new version, even packages statically linked to it.

### Multi-user package management

There is no need for special privileges to install software in NixOS. In addition to the system-wide profile, every user has a dedicated profile in which they can install packages. Nix also allows multiple versions of a package to coexist, so different users can have different versions of the same package installed in their respective profiles. If two users install the same version of a package, only one copy will be built or downloaded. Nix's security model ensures that this is secure, because only the users explicitly trusted by the system configuration are allowed to use build parameters that would allow them to control the content of a derivation's output (such as adding impurities to the sandbox, or using an untrusted substituter).[clarification needed] Without those parameters, paths can only be substituted from a substituter trusted by the system, or a local sandboxed build which is implicitly trusted.

## Implementation

NixOS is based on the Nix package manager, which stores all packages in isolation from each other in the package store.

Installed packages are identified by a cryptographic hash of all input used for their build. Changing the build instructions of a package modifies its hash, and that will result in a different package being installed in the package store. This system is also used to manage configuration files, ensuring that newer configurations do not overwrite older ones.

An implication of this is that NixOS does not follow the Filesystem Hierarchy Standard. The only exceptions are that a `/bin/sh` symlink is created to the version of bash in the Nix store (e.g. `/nix/store/s/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-bash-4.3.43/`), and while NixOS does have an `/etc` directory to keep system-wide configuration files, most files in that directory are symlinks to generated files in `/nix/store`, such as `/nix/store/s2sjbl85xnrc18rl4fhn56irkxqxyk4p-sshd_config`. Not using global directories such as `/bin` is part of what allows multiple versions of a package to coexist.

## Reception

Jesse Smith, reviewing NixOS 15.09 for DistroWatch Weekly in 2015,[20] wrote:

> I very much like the way NixOS takes the worry out of upgrading packages by placing each change in its own "generation" and I found, from the end user's point of view, NixOS worked just the same as any other Linux distribution. Setting up NixOS is not for beginners, and I do not think NixOS is intended to be used as a general purpose desktop operating system. But what NixOS does do is give us a useful playground in which to examine the Nix package manager and I think this is very interesting technology which deserves further exploration and adoption by additional distributions.

A 2022 review of NixOS 21.11 "Porcupine" in Full Circle magazine concluded:

> Overall NixOS Gnome 21.11 impresses as serious, neat and elegant. If you are a fan of the unmodified Gnome desktop, then you will find a lot to like here. The downside of this distribution is the steep learning curve for package management, including updates and the like. No matter which distribution you come from, you will have much to learn to be able to make Nix work well for you on the command-line.[21]

NixOS 22.11 "Raccoon" reviewed by Liam Proven at The Register:

> Compared to reports of NixOS from just two or three years ago, we found it was very simple to get it installed and working. This suggests that the tools are maturing well and reaching a certain level of polish, but from a first-time perspective we have no prior baseline to compare against. This is very much not a traditional distro, or even a traditional Unix, but it works and we can see the appeal.[22]

## Notes

1. ↑ Various other programming languages are used throughout NixOS (as of December 2023).
2. ↑ Various other licenses are used for software included with NixOS, for example the Linux kernel is licensed under the GNU GPL version 2.0 (as of December 2023)

## See also

* GNU Guix System – an operating system built on GNU Guix that is inspired by Nix
* Eelco Visser —

> without him Eelco Dolstra would probably never have started the work that resulted in the Nix package manager [23]

## References

1. ↑ "Community - nixos.org". https://nixos.org/community/.
2. ↑ "NixOS/nixos-foundation - Github". https://github.com/NixOS/nixos-foundation.
3. ↑ ""NixOS 23.11 released"". 29 Nov 2023. https://nixos.org/blog/announcements.html#nixos-23.11.
4. ↑ "nixpkgs/COPYING at master · NixOS/nixpkgs · GitHub". Github.com. https://github.com/NixOS/nixpkgs/blob/master/nixos/COPYING.
5. ↑ "What Is an Immutable Linux Distro, and Should You Use One?". HowToGeek.com. https://www.howtogeek.com/what-is-an-immutable-linux-distro/.
6. ↑ "DistroWatch.com: NixOS". Distrowatch.com. http://distrowatch.com/table.php?distribution=nixos.
7. ↑ Dolstra, Eelco (2003). "Integrating Software Construction and Software Deployment". Software Configuration Management. Lecture Notes in Computer Science. 2649. pp. 102–117. doi:10.1007/3-540-39195-9_8. ISBN 978-3-540-14036-8. https://nixos.org/~eelco/pubs/iscsd-scm11-final.pdf.
8. ↑ Dolstra, Eelco (2006). The Purely Functional Software Deployment Model (PDF) (Ph.D.). Archived from the original (PDF) on 2019-06-09.
9. ↑ Jonatha Lorimer. "The Nix Thesis". https://jonathanlorimer.dev/posts/nix-thesis.html.
10. ↑ "Stichting NixOS Foundation". Nixos.org. http://nixos.org/nixos/foundation.html.
11. ↑ "Governance". Nixos.org. https://nixos.org/governance.html.
12. ↑ "Nix RFCS (Request for Comments)". 17 December 2021. https://github.com/NixOS/rfcs/blob/master/rfcs/0080-nixos-release-schedule.md.
13. ↑ "Release Announcements". Nixos.org. https://nixos.org/blog/announcements.
14. ↑ Dolstra, Eelco; Hemel, Armijn (2007-05-07). "Purely Functional System Configuration Management". 11th USENIX workshop on Hot topics in operating systems. San Diego, California, USA: USENIX Association. https://edolstra.github.io/pubs/hotos-final.pdf. Retrieved 2023-07-19.
15. ↑ "About NixOS". Nixos.org. http://nixos.org/nixos/about.html.
16. ↑ "NixOS options". https://search.nixos.org/options.
17. ↑ van der Burg, Sander; Dolstra, Eelco; de Jonge, Merijn (2008-10-20). "Atomic Upgrading of Distributed Systems". 1st International Workshop on Hot Topics in Software Upgrades. Nashville, Tennessee, USA: Association for Computing Machinery. doi:10.1145/1490283.1490294. ISBN 978-1-60558-304-4. https://edolstra.github.io/pubs/atomic-hotswup2008-final.pdf. Retrieved 2023-07-19.
18. ↑ NixOS Manual - Rolling Back Configuration Changes, Nixos.org, https://nixos.org/manual/nixos/stable/#sec-rollback
19. ↑ Dolstra, Eelco (2005-11-07). "Secure Sharing Between Untrusted Users in a Transparent Source/Binary Deployment Model". 20th IEEE/ACM International Conference on Automated Software Engineering. Long Beach, California, USA: Association for Computing Machinery. doi:10.1145/1101908.1101933. ISBN 978-1-58113-993-8. https://edolstra.github.io/pubs/secsharing-ase2005-final.pdf. Retrieved 2023-07-19.
20. ↑ DistroWatch Weekly, Issue 637, 23 November 2015
21. ↑ Hunt, Adam (28 October 2022). "Review - NixOS". Full Circle magazine. https://dl.fullcirclemagazine.org/issue186_en.pdf.
22. ↑ Proven, Liam. "NixOS 22.11 'Raccoon': Like a proof of concept you can do things with OSes". https://www.theregister.com/2022/12/13/nixos_2211_raccoon/.
23. ↑ "In memoriam: Eelco Visser (1966-2022)". https://sandervanderburg.blogspot.com/2022/04/in-memoriam-eelco-visser-1966-2022.html.

## External links

* v
* t
* e

Linux distributions

Android|

* Android-IA
* Android-x86
* LineageOS
* /e/
* CyanogenMod
* Remix OS
* Replicant

Arch|

* ArchBang
* ArchLabs
* Artix
* Chakra
* Hyperbola GNU/Linux-libre
* Manjaro
* Parabola GNU/Linux-libre

Debian|

* antiX
* Astra Linux
* Bharat Operating System Solutions
* deepin
* Devuan
* Elive
* Endless OS
* gNewSense
* HandyLinux
* Kali Linux
* Knoppix
* MX Linux
* Parrot Security OS
* SparkyLinux
* SolydXK
* SteamOS
* Tails

| Ubuntu|

* Official: Kubuntu
* Lubuntu
* Ubuntu Budgie
* Ubuntu Kylin
* Ubuntu MATE
* Ubuntu Studio
* Xubuntu

* Other: Asturix
* Bodhi Linux
* elementary OS
* KDE neon
* Linux Mint
* Pinguy OS
* Trisquel
* Uruk
* LXLE Linux
* Linux Lite
* Zorin OS

|

Fedora|

* BLAG Linux and GNU
* Korora

| Red Hat|

* CentOS
* ClearOS
* Linpus Linux
* Oracle Linux
* Qubes OS
* Rocks Cluster Distribution
* Scientific Linux
* SME Server

|

Gentoo|

* Calculate Linux
* Chromium OS
* Chrome OS
* Sabayon Linux
* Nova OS

Slackware|

* Austrumi Linux
* DeLi Linux
* DNALinux
* Kongoni
* NimbleX
* Platypux
* Porteus
* Salix OS
* Slax
* TopologiLinux
* VectorLinux
* Zenwalk

Mandriva|

* ALT Linux
* Mageia
* OpenMandriva Lx
* PCLinuxOS
* ROSA Linux

Other|

* 4MLinux
* Alpine Linux
* CRUX
* Frugalware Linux
* GeckoLinux
* GoboLinux
* GuixSD
* KaOS
* Kwort Linux
* Lunar Linux
* NixOS
* openSUSE
* SUSE Linux Enterprise Server
* Puppy Linux
* Source Mage
* Solus
* Void Linux
* Uruk GNU/Linux

* Category
* Comparison
* List
* Commons

* v
* t
* e

Linux

Linux kernel|

* History
* Kernel
* Linus's law
* Linux-libre
* Linux startup process
* Linux kernel oops
* Tux
* more…

Controversies|

* Criticism of Linux
* Criticism of desktop Linux
* GNU/Linux naming controversy
* Tanenbaum–Torvalds debate
* SCO and Linux

Distributions|

* General comparison
* Distributions list
* Netbook-specific comparison
* Distributions that run from RAM
* Lightweight
* Security-focused operating system
* Proprietary software for Linux
* Package manager
* Package format
* List of software package managers

Organizations|

* LinuxChix
* Linux Counter
* Linux Documentation Project
* Linux Foundation
* Linux Mark Institute
* Linux User Group (LUG)

Adoption|

* Adopters
* Desktop
* Embedded
* Gaming
* Mobile
* Range of use

Media|

* DistroWatch
* Free Software Magazine
* Full Circle
* Linux.com
* Linux Format
* Linux Gazette
* Linux Journal
* Linux Magazine
* LinuxUser
* Ubuntu User
* Linux Outlaws
* Linux Voice
* LugRadio
* LWN.net
* Open Source For You
* Phoronix
* Revolution OS
* The Code

* Linux
* Linux kernel features
* Portal
* WikiProject

0.00

(0 votes)

Original source: https://en.wikipedia.org/wiki/NixOS. Read more

|

Retrieved from "https://handwiki.org/wiki/index.php?title=Software:NixOS&oldid=3469220"
*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template