107 lines
4.9 KiB
Markdown
107 lines
4.9 KiB
Markdown
|
As you guys may know, I am a huge fan of suckless software such as dwm, st
|
||
|
and dmenu, not to mention the suckless philosophy. But with that said, I have
|
||
|
never agreed with suckless on everything, and some parts of their philosophy
|
||
|
is very frustrating.
|
||
|
|
||
|
## systemd
|
||
|
|
||
|
suckless has a page dedicated to software that
|
||
|
[sucks](https://suckless.org/sucks) but more importantly a section dedicated
|
||
|
to [systemd](https://suckless.org/sucks/systemd). Problem is, most of the
|
||
|
information on this page is either out of date, not relevant, not an actual
|
||
|
problem or simply a bug that was patched YEARS ago.
|
||
|
|
||
|
It is completely fine to dislike systemd, but have a valid reason for it,
|
||
|
such as simply preferring another init system or the resource usage
|
||
|
or something. I personally use Gentoo with systemd because while systemd
|
||
|
isn't an init system (it's a lot more than that), I find that it does
|
||
|
everything I need an init system to do, with a great logger on top of
|
||
|
that. The full package provides an awesome experience for me personally.
|
||
|
|
||
|
## sucks
|
||
|
|
||
|
Generally their sucks page does list out some programs that I don't really
|
||
|
like, such as texinfo, subversion and cmake. But I think saying programs
|
||
|
suck simply because it's written in C++ is ridiculous, and this is where
|
||
|
I disagree with suckless.
|
||
|
|
||
|
suckless doesn't like C++ very much, and they definitely show it. I
|
||
|
really like C++ though, and I don't think I'm actually going to write
|
||
|
much C when I can use C++ instead. I may get into why I prefer C++ in
|
||
|
the future, but disliking a program because it's not written in C is
|
||
|
stupid, provided the language is fast enough to do the job well.
|
||
|
|
||
|
## Their codebase
|
||
|
|
||
|
A lot of new users talk about the awful suckless codebase, and I think
|
||
|
this is totally fair. The reason dwm is considered "hard" is not because
|
||
|
C is hard, it's because you don't document your codebase at all and use
|
||
|
variable names that only the people who wrote the code can actually
|
||
|
comprehend without spending a very long time learning the codebase.
|
||
|
We're fortunate enough to be blessed with
|
||
|
[dwm-commented](https://github.com/bakkeby/dwm-commented) but what about
|
||
|
the other suckless software? How will you ever learn the codebase inside
|
||
|
out?
|
||
|
|
||
|
Can you guys tell me what `showhide()` means? What about `recttomon`?
|
||
|
`r`? `lrpad`? `da`? `dl`? Unless you are familiar with the dwm codebase
|
||
|
and Xlib functions and types, of course not. This is exactly why
|
||
|
new users find dwm and st intimidating. The C language isn't hard,
|
||
|
but your codebase is not documented (and you have refused to do)
|
||
|
which isn't terrible, but the variable names mean absolutely nothing
|
||
|
and there is no cheatsheet or anything, which is very bad when you're
|
||
|
a community focused on users writing their own patches and contributing
|
||
|
them to the wiki.
|
||
|
|
||
|
I am quite familiar with the dwm codebase I'd say, but I stepped away
|
||
|
from it for a few months to work on personal projects. As soon as I
|
||
|
went back I ended up forgetting what most functions and variables
|
||
|
do as well as where they're actually set and called from.
|
||
|
|
||
|
suckless is focused on clean, readable, well written code but while
|
||
|
their code is relatively clean, it's anything but readable, and in
|
||
|
my opinion such code cannot be called well written either.
|
||
|
In general, suckless software also tends to prioritize less code
|
||
|
over efficiency and speed. I have to disagree on this as well,
|
||
|
and I would much rather have 10k lines of fast code than 2k lines
|
||
|
of slower code.
|
||
|
|
||
|
This is just personal opinion though, but why do they feel
|
||
|
it's necessary to place a line break after the type name
|
||
|
(such as `int` or `void`) and then ANOTHER line break before
|
||
|
the opening bracket. This just leads to less compact code,
|
||
|
which seems like it would contradict their goal of well written
|
||
|
code.
|
||
|
|
||
|
## Documentation
|
||
|
|
||
|
Many people seem to complain about the lack of documentation
|
||
|
for suckless software. I don't think this is completely justified,
|
||
|
because most if not all suckless software comes with a man page,
|
||
|
but when you actually want to hack on the dwm codebase, you
|
||
|
are totally screwed.
|
||
|
|
||
|
If you are completely new to C like I was when I got started
|
||
|
with suckless software, you're going to hate your life and
|
||
|
constantly complain about how awful C is when really suckless
|
||
|
just can't document their code. So people complaining about
|
||
|
the documentation most likely just want better documented
|
||
|
code, but naturally suckless being suckless they consider
|
||
|
documentation "bloat" which is a shame.
|
||
|
|
||
|
## Conclusion
|
||
|
|
||
|
Will I stop using suckless software? No. Do I agree with the
|
||
|
suckless philosophy? Yes, to a certain degree. Software bloat
|
||
|
is a real problem, and it does need to be solved. But if you
|
||
|
want to actually avoid software bloat, at least write well
|
||
|
documented software yourself.
|
||
|
|
||
|
While the suckless community has in general been quite nice,
|
||
|
suckless themselves most likely secretly wants an elitist
|
||
|
community. This is a fair belief to have, but I think they
|
||
|
take it a bit too far.
|
||
|
|
||
|
With all of this said, I will write software in C++, I will
|
||
|
use systemd and Gentoo. Have a good day!
|