Before getting into the topic at hand, I would like to give the reader a small history of my journey in the land of operating systems.
Like most of us that caught the early 90's, I've started with MS-DOS, then continued with Windows (95, 98, Me, 2000, 2003 server), then switched briefly to Linux, then switched briefly to FreeBSD, and from around 2004 I've switched permanently to Linux (first Debian, then Gentoo, then ArchLinux, and currently OpenSUSE). In the years to come I also had the displeasure of fiddling with OSX and Windows.
The main reason I've switched to Linux (and earlier to FreeBSD) was not because of the FOSS ideology, nor the gratis software (as in no payment needed), nor the abundance of good software packages, nor the perceived security superiority...
The main reason I've switched to Linux
was because it was an operating system
that was so transparent,
so (relatively) simple to debug and experiment with,
that I felt I could grasp how it all worked
(though perhaps not the actual low-level kernel details).
I understood everything (at least on a basic level),
from the bootloader
(at that time the simpler GRUB version which didn't try to be an OS itself,
and later my favorite SysLinux),
through the early boot with initrd
(now initramfs
),
through the /etc/inittab
and /etc/rc.*
system boot,
through the display manager
(although you could have just used xinit
straight from the terminal),
through the desktop environment,
up-to the way Firefox got to connect to the network and play sounds.
Contrast this with Windows (at that time and since after): you've got an opaque bootloader, opaque bootup process, presented with a single-user login prompt (that was a mandatory part of the OS), up to the startup menu (another mandatory part of the OS). How did everything get to that point? Perhaps only a Microsoft engineer would know... Add these days the mandatory TPM, mandatory Live account, and the fog is even thicker...
Also, contrast the Linux (and other unices)
/etc
configuration with the Windows registry,
/var/log
debugging with the Windows event log,
installation via a simple rsync
clonning vs the "1 hour slideshow Windows installer",
ssh
vs Windows Terminal Services (a.k.a. remote desktop).
Unfortunately, to round-trip to Linux, as the title suggests, I feel more and more that the current (as of 2023) Linux distributions are becoming the open-source alternative to Windows (and OSX), or even perhaps Android (and iOS).
Why?
Well, at the moment although I do have a vague idea on how everything works on a modern Linux distribution, I can't actually say with certainty what happens at each step. Nor can I say with certainty what each process running on my system does...
In fact, taking as example the whole system bootup process, my "vague idea" boils down to something like these phases:
UEFI magic; (although I do understand the big picture, and it's nothing quite that outlandish, the implementation of the whole thing is overly complex, full of bugs, and apparently full of security issues...)
Linux kernel and
initramfs
is loaded;Linux kernel initializes;
and then the
systemd
magic starts (either loaded from theinitramfs
or from an actual disk)...sure, various processes start as part of systemd service units, various file-systems are mounted as part of systemd mount units, all required as dependencies of some systemd target units, various other systemd units are started as triggered by various other systemd activation socket / path / device units, various other systemd units are generated and loaded; rinse and repeat until everything settles down into a hopefully working system;
but noboy can say for certainty what starts when and why...
mix in some
udev
rules here and there;sprinkle in some
dbus
service activation as required;start all sorts of non-root-user enablements and mediators like
polkit
/upower
/udisks2
; (does anyone still rememberhald
?)bring up the network via a mix of
systemd-networkd
,systemd-resolved
,systemd-timesyncd
;(am I missing some other
systemd-*
components likesystemd-homed
? who knows...)then, when it comes to anything desktop environment related, for me nowadays it's all black magic involving
systemd-logind
, systemd seats, systemd scopes, lots ofdbus
service activations, lots of small other daemons, etc...
In fact, especially looking at the desktop environments, I feel that a running Linux system resembles more some OEM-mangled Android, or some Kubernetes-deployed-micro-services-cluster, than anything which doesn't require a reboot on the next update...
And I haven't even tasted the immutable OS coolness that seems to be all the rage with Ubuntu / RedHat / SUSE nowadays...
Before I continue, I want to caution the reader against labeling me a "systemd-hater"!
I don't hate the core concepts of systemd
,
and in fact I think that systemd
has brought us out of the dark ages
of /etc/rc.*
mess
of tangled and poorly written sh
scripts.
However, I do believe that
the whole systemd
project
has overstepped its initial purpose
and has become a sort of mandatory "second userspace Linux kernel",
that doesn't suffer running along anything else touching the kernel
(see the cgroup-v2
takeover),
and which has tainted so much the Linux ecosystem
that nowadays almost nothing more complex than a terminal tool
works anymore without "systemd-enablement"...
In fact I don't even criticize
the "Linux project" (as in the "Linux kernel"),
because in all fairness it works fine without any
systemd-*
, udev
, dbus
, polkit
,
containers and other silliness.
I criticize most of the "Linux distributions" (thus the generic term "Linux" in my title) that in the later years have become such a monoculture (all being clones or refinements of a few downstream projects like Debian, Fedora, or ArchLinux), that the only differentiator between them has become which "app container runtime" they offer by default, if they use Gnome or KDE, and what theme they sport out of the box...
Granted there are other Linux distributions like Gentoo, Alpine, Void, NixOS, etc. that are still conservative in some of these regards... However, these are not the popular ones, thus not the ones where the most development effort goes into.
I also somewhat understand
why we've gotten where we are today.
Namely, that developing and supporting nice software
costs quite some money (or lots of free time and energy),
and having nice desktop environments and GUI applications
means we need the RedHat's and Ubuntu's and SUSE's
to burn that money on development and support...
And these for-profit companies
in turn need flexible, extensible, pluggable,
and enterprise friendly building-blocks
to base their offerings upon.
Thus, the proliferation of systemd
as a "sidecar userspace kernel"
that Linux distributions have nowadays,
which supports a wide range of use-cases
from desktops to servers to embedded.
Then add to all this the whole container cornucopia
and we require even more complexity and silliness.
Sure, one can still take the Linux kernel, pretend like it's 2010, and concoct something resembling a workable distribution. But that distribution wouldn't have Firefox, VLC, Discord, Slack, WebRTC, and other nice software without adding back in all the complexity and silliness...
As a side-note, I've started looking at OpenBSD or FreeBSD as alternatives, but they came short of filling Linux's shoes... They are great general purpose server or desktop OS's.
However, they have shortcomings of their own, mainly being so conservative that they've almost been left behind by the overall open-source community. For example, many of the modern development languages or runtimes (like Rust or Erlang/Elixir) don't even treat OpenBSD as a first-tier OS target.
In fact, getting back to systemd
,
none of the BSD systems have done anything
to solve the /etc/rc.*
shell scripts hell.
I don't want the current systemd
,
but I also don't want sh
scripts to initialize the next Mars mission helicopter;
I don't want to rely on double-forking daemons without supervision.
When it comes to userspace virtualization (a.k.a. containers)
all the current development happens mainly in the Linux ecosystem,
meanwhile FreeBSD sticks with its jails,
and OpenBSD has dropped all efforts and focuses on their unveil
/ pledge
mechanism.
Which perhaps isn't that bad either,
because I do prefer full VM virtualization
as compared to shared-kernel containers;
but even in this regard
virtualization isn't a strong feature of either BSD project.
In the end, I think I'll end-up with only one choice: use any OS that gives me an SSH terminal into a headless desktop running a simple Linux system.
Because I think in a couple of years, I wouldn't be able to tell the difference between an Android tablet and a Gnome desktop (and perhaps even KDE). Both insist on me installing self-contained "apps"; both insist on me living with their "UX and design choices", granting me only the choice of "accent colors" (from a predefined set); both (in fact the "apps") will demand that a 2 year old OS is "unsupported", and then in turn the OS will demand that a 2 year old hardware is "unsupported"...
And this trend has already started with Ubuntu dropping support for any browser and guiding users into using the Snap equivalent, then continued with RedHat dropping support for LibreOffice and guiding users into using the FlatPack equivalent.
(Granted when I say "Gnome" and "KDE" I actually mainly mean the "distributions that package this or that desktop environment", but perhaps some of the fault does stem from the choices these desktop environments have made over the years.)
In fact, the overall dumbed-down and closed-up -- sorry I meant to say "optimized for the enjoyment of our customers" -- Apple OSX seems to be a better alternative...
In the interim I'll continue using i3
until the various distributions drop support for XOrg,
or perhaps switching to sway
(or other i3
equivalents)
if Wayland becomes mandatory,
all with minimal systemd
-ness.
But I fear that the technical support burden of such a deployment
would become just unbearable.
Want to read what other people have to say?
- Has modern Linux lost its way? (Some thoughts on jessie)
- Reactions to 'Has modern Linux lost its way?' and the value of simplicity
- systemd, 10 years later: a historical and technical retrospective
- Some of the great GNU/Linux distributions
- Why you should migrate everything from Linux to BSD
- A promising mess
- Flatpak Is Not the Future
- A Trip into FreeBSD