Greetings! Today we're going to explore an extraordinary Linux distribution that too few have heard of - NixOS.
The Revolutionary Duo: Nix and NixOS
Nix is a robust package manager for Linux and other Unix systems, which distinguishes itself through a unique approach to package management. It was created with the objective to offer reproducibility, reliability, and flexibility, the holy trinity of package management.
Where most package managers deal with packages in a mutable way, Nix treats packages as immutable values, similar to how functional programming languages treat variables. These packages are stored in the Nix store, a directory usually located at
/nix/store, with unique directories for each package version.
Now, here's a fun tidbit: each package in the Nix store has a unique path that includes its hash, which is generated from all the inputs used to build that package. This means that differing build inputs result in a different hash, leading to a different directory in the Nix store. This results in an excellent handling of package versions and dependencies, ensuring that different versions can live side by side without interfering with each other. Talk about harmony!
On top of this solid foundation stands NixOS, a Linux distribution powered by the Nix package manager. The central concept here is that the entire operating system – from the kernel, applications, system packages, configuration files, to the system startup scripts – are built by Nix. And just like Nix packages, NixOS system configurations are immutable and declarative. You specify what you want in a configuration file, and NixOS takes care of making it happen.
A Look Back: NixOS Development History
NixOS came into existence in 2003 as a component of a Ph.D. thesis by Eelco Dolstra. His ambition was to resolve the persistent challenges in package management in Unix systems. He created a system following functional programming principles, where packages are seen as "immutable values".
Today, NixOS enjoys the backing of a dynamic community of developers and users, continuing to gain popularity owing to its fresh approach to package and configuration management.
Why You Should Consider NixOS as Your Go-To Linux Distribution
If you crave an innovative, flexible, and reproducible method for managing your Linux systems, then NixOS is worth your consideration.
Reproducibility: NixOS allows you to clone your system configuration across different machines. What's more exciting than having your development environment as an exact copy of your production setup? It's the silver bullet for the infamous 'works on my machine' syndrome.
Atomic Upgrades and Rollbacks: Fear system upgrades no more! NixOS's upgrades and package installations are atomic, so in case of any missteps, you can swiftly rollback to the previous version. You might find it interesting that rollbacks are so easy because Nix never overwrites packages in-place but adds new versions in a different directory.
User-specific Packages: With NixOS, each user can maintain their own package profile, effectively saying goodbye to dependency conflicts. You'll appreciate the fact that these user profiles are also garbage collected, meaning if a user removes a package, it only removes the reference to the package, not the package itself from the system.
So, dear DevOps professionals, NixOS provides a refreshing, effective, and enjoyable Linux experience. With its innovative package management system, this distro is well-suited for solving many of the challenges that DevOps teams face. Time to give NixOS a whirl!
NixOS in Action: A Command Line Tour
One of the many perks of NixOS is its command line experience. Let's take a little tour through some key NixOS commands that demonstrate its power and flexibility.
Rolling Back or Forward Generations
In NixOS, a generation is a state of the system configuration, which gets created every time you make changes to your configuration and rebuild the system. This enables you to quickly roll back to a previous state if something goes wrong. To switch between generations, you can use the following commands:
List all the generations that currently exist:
Rolling Back to the Previous Generation:
Switching to a Specific Generation:
nix-env --switch-generation 2
Installing a Package in a Devshell
Nix provides the nix-shell command which allows you to enter a new shell environment where the specified package and its dependencies are available. For example, if you need Python for a quick project, you can create a shell with Python available like so:
nix-shell -p python3
You will now have a shell where Python 3 is available for use. Once you exit this shell, the Python package won't affect your global system state, maintaining the cleanliness of your system.
Using the Nix Store
As mentioned earlier, NixOS stores all packages in the Nix store, usually located at
/nix/store. Each package is located in a directory whose name contains a unique hash derived from the package’s build dependencies.
You can query the Nix store using the nix-store command. For example, to list all paths in the store that a package depends on, you can use the
-q) operation with the
nix-store -qR /nix/store/...-some-package
This command will list out all dependencies of the specified package.
By leveraging these powerful commands, NixOS allows you to manage your Linux systems with an unprecedented level of control, flexibility, and reproducibility. Remember, the examples provided here are just a tip of the iceberg; NixOS has a lot more to offer. So go ahead and explore NixOS – it might just become your new favorite Linux distribution!