GrooveStomp

Linuxing

2016-05-26

Have you ever heard of suckless1? I think I stumbled onto suckless
sometime while reading K. Mandla2, though there’s a reasonable
chance it might have happened before then. suckless immediately resonated with me because of their
philosophy3. Their software also looks good, very accurately
reflecting the idea of minimalism4; often requiring you to rethink
how you typically interact with software to do what you want to do. Sometimes this process of re-evaluation
is fruitful, sometimes maybe less so, but it’s always interesting to experience. They have their own Linux
distribution, called stali5 which I really recommend reading about.
I’ve found a couple of other distributions that are similar in various ways:
CRUX6, Tiny Core Linux7
and Morpheus8. Morpheus in particular looks to be faithful to the
suckless way. I think CRUX and Tiny Core Linux are both full GNU stacks, so they’re less interesting to me
personally, but if I struggle to be productive with the more experimental stali and Morpheus, then I wouldn’t
hesitate to give them a try.

There are multiple facets to minimalism. Morpheus and stali both adopt non-GNU tools like
musl9, sbase10 and
ubase11. (Though stali doesn’t officially adopt all of these yet.)
I like the idea of this, because GNU tools are often huge, complicated pieces of software with all kinds of
support, sometimes for legacy systems that are practically ancient. The idea is also novel to me. I had
simply never considered using a runtime libc other than glibc before. Clang isn’t new, so the idea of using a
non-GNU compiler isn’t quite as novel, but in practice it’s still not common. Have you ever thought about the
organization of a Linux distribution? Prior to reading about stali, I hadn’t. Linux distributions ship with
dynamic libraries in common locations and programs are built to dynamically load these libraries at runtime.
This can cause some problems:

Programs can, ironically, be larger because they are now requiring all APIs in a given dynamic library even
if they only use a small subset.

You have to build your program with a compatible compiler and with the proper library versions.

Armed with this new knowledge, I’m really curious to try building statically linked programs with a non-GCC
compiler using something other than glibc. Tiny C Compiler (TCC)12
caught my eye, but I had issues doing what I wanted. I can’t recall exactly what I encountered. I also gave
Clang a whirl13 but that similarly didn’t want to work for me. I
did get something going with musl and GCC14, but that’s clearly
just a piece of what I want.

Okay, sorry, minimalism. Another aspect here is system initialization. I guess there’s a conflict in the
larger Linux community over systemd. I’ve never really been curious about init systems before and my only
prior exposure was invoking systemctl or /etc/init.d/... or service [start|stop|restart] .... When I
started exploring Manjaro Linux, I also saw two variants (regardless of the specific desktop environment
being included): with systemd or with openrc. I had no idea what that meant at the time, so I didn’t
learn anything from it. suckless link to information about systemd on their stali page and I learned a lot
from that. I can’t say I actively dislike systemd because it’s in my Arch installation and it appears to be
working well enough. However, I’m now curious about alternative init systems and especially in trying to pare
things down to their simplest minimal subset. suckless have sinit and all the distributions I linked above
use something other than systemd.

So all of these things are very interesting to me and I’ve been downloading images and trying to use
alternative Linux systems for just the tiniest amount of time now. It’s a learning experience for sure. Both
Morpheus and stali lack less, more and various other tools I’ve come to rely on. We’ll see how things
continue.