After few years on Arch Linux, I was curious to try a new OS. My needs are increasingly less year after year, I focus on features, and try to keep my system as light and rock solid as possible.
I heard about Void Linux, a rolling release distribution without Systemd.

No more systemd, use the system D

The Void Linux documentation covers the basics, the wiki is deprecated, but you get everything you need to make your system run perfectly.
A system without systemd is a paradigm that I forgot, it makes me rediscover how many things it manages, sadly.

Without systemd, no systemd-journald, no systemd-resolved, no systemd-networkd, no systemd-boot, no systemd-logind, no systemd-timer…
Documentation gives lighter alternatives, known for some, for all of those components. Two important ones are:

Init and services

It uses runit by default.
I don’t miss systemd services, runit ones are simple shell scripts, back to basics.
Per user services are possible. To enable a service, you only need to symlink service directory /etc/sv/$service to /var/service/$service.
Each directory contains a run shell script.

$ sudo sv start vpn
ok: run: vpn: (pid 2686) 0s, normally down

$ sudo sv status vpn
run: vpn: (pid 2686) 5s, normally down

$ sudo sv stop vpn
ok: down: vpn: 1s

$ ls /var/service
acpid        agetty-tty3  agetty-tty6  dbus         libvirtd       seatd         udevd      vpn
agetty-tty1  agetty-tty4  chronyd      dhcpcd-eth0  nanoklogd      socklog-unix  virtlockd
agetty-tty2  agetty-tty5  crond        iwd          runsvdir-user  tlp           virtlogd

$ cat /var/service/libvirtd/run
#!/bin/sh
sv check dbus >/dev/null || exit 1
[ -f ./conf ] && . ./conf
exec libvirtd $OPTS 2>&1

Logs

Socklog is made by the same dev as runit and manage logs as plain text files, not binary files which need a specific tool to be queried…

$ ls /var/log/socklog/
cron  daemon  debug  errors  everything  kernel  lpr  mail  messages  remote-udp  secure  tty12  user  xbps

$ grep dnsmasq /var/log/socklog/everything/current
2021-05-20T20:19:16.77340 daemon.info: May 20 22:19:16 dnsmasq[2141]: reading /etc/resolv.conf
2021-05-20T20:19:16.77344 daemon.info: May 20 22:19:16 dnsmasq[2141]: using nameserver 1.1.1.1#53
2021-05-20T20:19:16.77345 daemon.info: May 20 22:19:16 dnsmasq[2141]: using nameserver 9.9.9.9#53
2021-05-20T20:19:16.77346 daemon.info: May 20 22:19:16 dnsmasq[2141]: using nameserver 192.168.0.254#53

What about the filesystem ?

Void Linux community developed a powerful tool, to let you manage ZFS root system rollbacks far better than zectl on Arch Linux does.
zfsbootmenu uses dracut to generate a kernel/initramfs couple with zfs module packed into an efi file. It lets you point directly to it with efibootmgr which removes the need to use a bootloader.
Booting this gives you a nice menu to manage your ZFS pool, you can create clone from a dataset snapshot, chroot a dataset, etc…
To boot the OS, kexec is used to load the kernel from the chosen zfs dataset.

An OS is nothing without its packages

The first step to know if switching could be a good idea was to check if my applications was already packaged.
On Void Linux, there is no AUR-like, all packages are validated, this is great as my AUR list on Arch Linux was growing more and more.
99% of my needs was already packaged, and I used the missing one to learn how to package as xbps packages. I sweated a bit trying to package x2go client and server packages, but the community helped me a lot on IRC and Github, to finish my first Void Linux Pull Requests.

For proprietary softwares, I use flatpak packages.

Finish me…

On Arch Linux, by default, you cannot upgrade your kernel and load a new kernel module without rebooting, the modules directory is managed by the package, so the directory is cleaned when upgrading. The workaround exists as an AUR package, kernel modules hook. Void Linux is again smoother.

$ sudo rmmod kvm_intel

$ sudo xbps-install -Su

Name              Action    Version           New version            Download size
linux5.11         update    5.11.21_1         5.11.22_1              112MB
[...]

$ sudo modprobe kvm_intel && echo ":)"
:)

Partial updates are possible, on Arch Linux pacman -Sy $package is forbidden if you don’t want to break your system.

I ported my arch-config repository to void-config with automated install scripts and an ansible playbook to configure the full system.
Flatpak and xbps ansible modules exist, no need to deal with AUR run as user and a sudo tweak to be able to automate package installation with ansible anymore.

Any negative point ?

The only possible improvment is the lack of xbps hooks to be able to trigger a post flatpak upgrade or a pre ZFS snapshot. An issue already exists about that point.