GuixSD review - The herdless GNU

At the end of last year, I decided to install an interesting looking operating system named GuixSD. This was to be my first experience of running a system consisting entirely of free software. Unfortunately, the absence of non-free firmware also meant that I in 2018 would be giving up on wireless internet.

Guix System Distribution

The Guix System Distribution running on a Linux-libre kernel.

What is GuixSD

GuixSD is a distribution of the GNU operating system centered on the GNU Guix package manager. It uses the Linux-libre kernel, and support for the Hurd is being worked on. As a GNU distribution, it is committed to respecting and enhancing the freedom of its users.

Installation

GuixSD does not currently provide a graphical installer, so you’ll need to configure networking, perform disk partitioning and create the necessary filesystems. The final part of the installation consists of declaring a configuration file which Guix will use to install system services, create users, provide desktop environments and configure the bootloader. The configuration I employed for my HP 250 G5 notebook is available as a gist from this address.

I watched in awe as Grub successfully booted up in UEFI mode and presented me with a fully working GNOME 3 desktop. After playing around with GNOME 3 for a while I noticed that my swap partition was not active so I enabled it and echoed it to /etc/fstab.

On the next boot, my swap partition was gone, making it abundantly clear that I hadn’t really paid attention to how GuixSD works.

Package management

My first order of business was to install Firefox (IceCat) so I switched to the root account and issued guix pull followed by guix package -i icecat. This did not turn out as intended because Guix provides per-user profiles and thus IceCat ended up being installed for the root account.

GuixSD Icecat

Package management with Emacs Guix.

My initial misstep highlights one of the most remarkable features of Guix, namely per-user profiles. Per-user profiles allows users to install packages in an isolated environment without requiring additional privileges.

In addition to per-user profiles, Guix supports transactional updates and rollbacks which I’ve got increasingly accustomed to. It’s far more functional than uninstalling broken updates and hunting down scattered files and dependencies.

Anyhow, I’m barely scratching the surface of what makes Guix great so please refer to the GNU Guix reference manual for the gritty details.

General package management with Guix is pretty straight forward and Guix will build packages from source when there is no prebuilt binary available. However, the vocabulary might be a bit confusing to new users so here is a quick round-up:

  • Substitutes are prebuilt binaries.
  • Grafts / grafting is how Guix manages deployment of critical updates.
  • Recipes are build scripts.
  • Derivations are packages (not entirely accurate).
  • Collisions occur when separate packages provide identical files.

Package management recommendations

Based on my experience with GuixSD I would recommend to occasionally issue guix pull and guix package -u as the root user to keep the guix-daemon and dependencies up to date. It might also be advisable to delete old generations from the store and subsequently run the garbage collector as a lot of disk space will get accumulated.

I would also recommend to install and use the Emacs Guix interface to have a pleasant and functional interface to work with. Install it by issuing guix package -i emacs-guix.

Usage

GuixSD is free software and adheres to the Free System Distribution Guidelines (GNU FSDG). I do honestly appreciate the drive and ethics behind FSDG and I’m all in on leaving proprietary software and DRM behind. The lack of wireless internet due to the exclusion of non-free firmware is a harder pill to swallow though. I’ve, erm, solved this issue by sharing wireless over ethernet from my primary laptop, but that’s a silly solution and limits my time using GuixSD.

My most memorable experience with GuixSD and free software was probably my initial run with the IceCat browser. It’s bundled with several plugins that will preserve your freedom while making 90% of all websites inaccessible. I’ll admit I was not previously familiar with the concept of libre JavaScript.

Icecat with LibreJS

No sir, I wont be running any non-free software in my browser (stallman.org checks out).

My current desktop environment is GNOME Shell 3.24.3 and it works really well. If you don’t appreciate the GNOME way of doing things then there are also XFCE, MATE and LXDE. KDE/Plasma is off the table for now though.

GuixSD is technically in beta but I’ve experienced only minor issues. My last stumble occurred while (unknowingly) transitioning to the GuixSD 0.15 release. Suddenly guix system options failed with a message about the system command not being found. These issues were easy to fix but they caught me off guard as I don’t follow GuixSD on a daily basis.

GNU Shepherd

GuixSD uses the GNU Shepherd as its init system and service manager. Interestingly, the GNU Shepherd was intended for use with GNU Hurd kernel while GuixSD (currently) ships a Linux-libre kernel. For the record, there is no systemd to be found in this distribution.

Conclusion

I do really enjoy GuixSD but unfortunately I don’t have the right hardware to be running a purely free software based distribution. Using the Guix package manager has been an eye-opener, and I’ll definitely be trying to install it on some of my favourite GNU/Linux distributions in the future.

I’m also considering investing some time in Guile Scheme to be able to unlock the powers of the build system as I currently don’t possess the required skills to package the additional software I need, which I believe is a first.

I’m also doubtful if GuixSD will achieve a broader appeal than being a suited platform for Guix and free software developers. GuixSD have a strong technical focus and even their documentation reads like something written by and for developers. It’s probably not a coincidence that Guix is pronounced as geeks.

Anyhow, I would definitely recommend giving GuixSD a spin, or at least take the time to watch an online presentation of the distribution.

*Gnu Guix is derived from the Nix package manager.

Hardware

NotebookHP 250 G5
CPUIntel Core i3 5005U
RAM4 GB DDR3L SDRAM
SSD128 GB (M.2) SATA 6Gb/s
GraphicsIntel HD Graphics 5500
WirelessIntel Dual Band Wireless-AC 3165

The Guix System Distribution
Guix Reference Manual
User support for GNU Guix and GuixSD