Stagit & Suckless Software

I recently made some changes on my personal build of stagit so that Markdown README files are rendered as HTML using libcmark — see 61460e506560a79800ea75ea8d2dddbbcb3e50e6 and the following commits for more information. The changes are quite trivial, so we won’t be discussing them in here, but I thought this would be a great opportunity to share some of my thoughts and knowledge on suckless programs.

I also had to modify the source code of CMark to get the results I wanted. You can find my personal build at git.pablopie.xyz/cmark and the commit with the changes at f5f7efaa74b56f732bc67adcd69b8e7b5c582ebe.

The thing is, I’ve just implemented a whole new feature — namely README pretty printing — and other users could probably benefit from it, so novice free software users probably expect me to submit the changes I made to the official stagit repository. I won’t do so though, and here’s why: stagit is a suckless program. But what even is a suckless program?

What?

In short, suckless programs are programs designed for simplicity, clarity and frugality — i.e. programs that suck less. You can find more about the suckless philosophy at suckless.org, but what I want to get across in here is that suckless programs are featureless by design. In other words, confy features and sugar coating is something members of the suckless cult explicitly avoid.

The clearest example of this is the fact that suckless programs do not have configuration files: configuring a suckless programs usually involves modifying the source code and recompiling it. In fact, users of suckless programs are expected to change the source code so that it fits their needs, and most of this changes aren’t expected to ever get merged to upstream. Why would anyone do that though?

Why?

Well, it turns out software engineering and maintaining software over large periods is extremely hard. Minimal programs are easier to maintain, and therefore more robust. Furthermore, exposing the internals to regular users allows them to explore and learn there way around code, as well as implement new features on their own.

None of that is suckless-specific of course, but minimal programs are much more accessible and hacker-friendly than big old monoliths of code. To me the point of the suckless philosophy isn’t that suckless programs are somehow better than regular free software, but that they promote a culture that brings users closer to the developers of the programs they’re using.

This was a radical perspective shift for me, and one which I believe that came for the best. I hope my most likely failed attempt at explaining this realization could blow your mind as much as it blew mine the first time it occurred to me. 😛️