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.
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.
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.
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.
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.
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 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.
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.
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.
|Notebook||HP 250 G5|
|CPU||Intel Core i3 5005U|
|RAM||4 GB DDR3L SDRAM|
|SSD||128 GB (M.2) SATA 6Gb/s|
|Graphics||Intel HD Graphics 5500|
|Wireless||Intel Dual Band Wireless-AC 3165|