guix and nix logo

I have spent a few hours playing with both guix and nix.

The motivation to learn either of them is that current docker development is quite painful.

Currently I have to deal with terraform, docker-compose, docker, python virtualenvs, conda and ubuntu packaging regularly.

I believe that one of these packaging/declarative/environment definition systems will likely replace the need for docker, virtual environments and packaging systems individually and the overhead of learning all of them.

I think the intro of this presentation by Ludovic Courtes conveys these ideas succinctly

A taste of guix

The first thing I tried is guix living inside my debian system. It worked quite well except for some small issues about locales. I could easily install packages that weren’t available in debian

Something I really liked is the ability to create environments with guix environment. The ability to make them containers or virtual machines, restrict what is shared including network and files is remarkable.

Something I didn’t like is the uncompromising no nonfree attitude, although I understand why. There is some help via channels: .

I also didn’t like the excess of cpu/memory because of how many packages are compiled.

guix system

Guix system was much harder. The installation would not install grub properly and boot. I had to add some extra lines in my debian generated grub to get it to boot, and even with that I need to type my encryption password twice.

TODO: copy from computer

Installing software was relatively easy but compile times reminded me of my gentoo times.

I ran into issues with fonts in the browser, that required 30 minutes to find.

I managed to break the system by changing the graphics card from intel to a radeon

When I reported the boot problems, the bug reporting system was lagging (email based, no immediate response) and it was hard to figure out.

A taste of nix

Installing nix was easier than guix. The installer reminds me of the ubuntu live cd and the encryption lvm and encryption worked without issue. I couldn’t make it work together with debian either.

The default boot systemd-boot didn’t accept other OSs, and specifying grub as a boot loader had no effect.

TODO: copy from configuration

Inside the system though, i3 worked straight away and most packages I wanted are available. Every small problem I had was a few searches away.

I liked that every time I modify the system a new booting option appears in the menu. I don’t like that the guix shell environments can be isolated with flags.

Some external thoughts on both

My own thoughts

From what I have read plus my own experience, it seems like guix is developed from principles first. certain. It reminds me of emacs because of the tendency to reinvent existing tools but better and in lisp.

It creates a very step learning curve that pays dividends later but locks you in

The free software only is a bit of a problem for professional use.

nixOS seems more focused on getting the idea running and is more keen on messy implementations. The DSL is less consistent, changing from bash to something else is an issue.

It is older and has more users.