Software I Use and Recommend

Distros

Base Software

Compilers/Languages

Libraries

Other Command Line Software

Xorg Programs

Wayland Programs

General Purpose GUI Programs

Why systemd sucks

SystemD is actively harmful to the world of open source. An init system’s only job is to get out of someones way and to start up some background daemons. Before SystemD, no one had to care if a machine was running OpenRC, runit, sinit, or SysVinit. Those systems recognized their one and only job was to boot the system into a usable environment and handle shutdown cleanup, reap orphan processes, and start, stop, and track the dependency chain of daemons (whilst ideally taking advantage of SMP).

SystemD however, besides being a order of magnitude larger than other init systems, tries to invade userspace constantly by embracing and extending userspace-level APIs. A recent case study on this is their sudo replacement, run0, which exists because sudo is 250,000 lines of code, and instead of using the fairly simple and easy to understand API that is setuid. They rely on the systemd exclusive API (configured with javascript) polkit. Also see dbus, udev, and trying to shove systemd into other applications.

Microsoft made office open XML so complex because Microsoft doesn’t want you to have a choice, and now they’re dumping money into SystemD because SystemD doesn’t want you to have a choice. GCC mangled their project structure because the FSF doesn’t want you to have a choice.

There’s a widely accepted name for this. “Vendor lock-in”

Lets contrast this with other linux software. There are multiple implementations of the UNIX utilities in wide use, and I’m able to swap out them for each other to my hearts desire if I don’t like the fact GNU true can return 1 (/bin/true --help > /dev/full) or busybox dd doesn’t do status=progress. If I don’t like the fact glibc produces massive static binaries due to no -ffunction-sections I can use musl. There are multiple ncurses implementations. There were multiple X Implementations and that didn’t stop because of the vendor lock in policies that RedHat and GNU engage in. And on the other side, wlroots is far from being the dominant force in wayland (which is just a standard). Vi and Emacs both have more implementations than I care to name. As do HTTP daemons, POSIX compatible shells, and C library implementations. This prevents the type of monoculture and frog boiling we see in most enterprise software.