Overview: Void Linux

It's the little things that make me feel comfy.

Services are Simple

Systemd is fine, but I have to look up how to make a new unit file every time, and then input the path to the executable, which is generally some script I've written. With Void's runit, the service file is the script. There's nothing to learn or look up - you just write out a normal script, put it in a file called run, and runit will run that script.

Here we have the at service in its entirety:

1#!/bin/sh
2exec atd -f

And the network time protocol daemon, running as the ntpd user:

1#!/bin/sh
2exec isc-ntpd -g -u ntpd:ntpd -n >/dev/null 2>&1

And while this is a difference that really makes no difference, it's nice that the service executable itself is called sv, rather than systemctl. It's easier to type, and fits in with the other traditional Unix utilities.

XBPS

AUR Comparison

There's a lot of good things to be said for the AUR, but speed isn't one of them. It can take an hour to update once you have a few packages (especially if one is a browser), and you can either baby-sit the build by repeatedly typing in your password, or look up all the --no-babysit flags for that particular AUR installer.

The compiled packages occasionally require manual intervention, and while it's not a great hassle to see that something's gone wrong, then compile it cleanly, it also seems a bit pointless for everyone to compile their own packages. The binary packages just download and run - no hassle.

The AUR has everything that any nerd has ever wanted. Once someone shares their WiP idea for a new music player on Reddit, it's on the AUR within an hour. XBPS is far more selective; it won't always have what you want.

  • hyprland was not available for over a year because one library used was marked as not stable by the maintainer, so all of hyprland was also considered not stable during that time.
  • graph-easy is an old perl script that uses old perl libraries. It will never be available unless someone updates it.

But if Void does have something, then the package will be up-to-date and stable.

Has the Stuff I Like

Void doesn't have huge numbers of packages, but there's something comforting about the fact that it has all the packages I care about. Things like sc-im (the terminal spreadsheet editor), typst, and glab-cli suggest that the people maintaining Void Linux have a similar workflow to me.

Proprietary Packages...but separate

I've never used Void's proprietary repositories, but I appreciate that they're there in case I need one. However, while I don't need any, it's nice to feel the separation. When proprietary packages sit next to the others, the only way to know what you're getting is to enquire about the licence for each package, which nobody wants to do.

Small Packages

When you first fire up Void, a lot of packages which you might consider basic aren't there. However, the name of the package is typically the name of the program, so a simple xbps-install ifconfig iw sorts the problem immediately. Installing some 'basic' packages serves as a nice reminder that there are plenty of other 'basic' packages which you don't need and aren't on your system.

The x-binary packaging system also has lots of sensible defaults built into the commands. On Arch, if you want to remove orphaned packages, you need to type sudo pacman -Rsn "$(pacman -Qdtq)" - an unreasonable mouthful by any benchmark. On Void, it's just sudo xbps-remove -O.

If you still use X for display, it has xorg-minimal - a meta-package to make sure you get all the X you need, and no more.

Going even smaller, you can see small package splits. w3m comes in two parts - w3m browser, and w3m-img (for those that don't need pictures in their terminal).

And instead of lolcat, Void carries lolcat-c. It works the same, but it's 23KB instead of the standard 134KB.

Architectures & Compilers

There's a time and a place for musl, but when people are using systemd, there's no option to try out different compilers. Void is agnostic towards architectures and compilers, so you can make any selection, and find broadly the same packages in the repositories.

This also means the community is less fractured. On Ubuntu, you'll be running Ubuntu on the main machine, and Raspbian on your raspberry pi. With Arch, you'll be on Arch Arm, and woe betide anyone who goes onto the Arch Linux.org forums and requests help for Arch Arm because it is 'a totally different operating system'. Despite this, Arch Arm uses the standard AUR, and just tries to build packages in the normal x86 way. For most packages, this succeeds, but for others (e.g. gitlab-cli, it fails). Void may often just fails, but I think I prefer hit or miss to guess-work.

Then we have the alternative flavours of Arch, which have their own default desktops, along with Ubuntu derivatives, such as Kubuntu, Xubuntu, et c., each with their own communities. Void's a lot easier; it's just Void. If you want a Void ISO with a pre-installed desktop, one is available, and if anyone wants to build something on top of Void, they could add another version with a few things preloaded.

Stable

I've run Arch and Void for about eight years. Void is the most stable system I've ever run. No random X problems, no grub nonsense, no nonsense with the wrong glibc version with all those Haskell packages. The maintainers test everything before anything goes out.

Void also avoids the problems people find on Debian, where the system is only stable until you want to run something that's not so out-of-date that it simply doesn't work with the outside world, and have to create a hybrid machine, with some modern programs stuffed into /opt/ and maybe some modern libraries.

Small is Fast

Void and Arch have roughly the same idling RAM and CPU usage, but Void is just a tad faster. It doesn't come with automatic system logging, has fewer binaries installed from the outset.

When running a Void Linux server on a Raspberry pi, the start-up RAM was 35MB.

Problems

Documentation

The documentation might be better. This hasn't been a real problem, since one can usually just use the developer's documentation for non-obvious items, like lxc or nginx. Void has a website with documentation, and you can download that site as a package with xbps. However, this package is very out of date, and the developers on IRC think that this is not a problem. I have no idea why.

Limited Packages

The biggest surprise was nmap. This is not in the main repository because it is non-free software. (seriously)

End Notes

I can't imagine recommending Void to anyone, given the obscurity, and the fact that most people don't really care about losing 2-seconds start-up time, and 10 MB RAM. But I'll be sticking with it, as it's been comfy as all heck.