Software I Use and Recommend
Distros
- Alpine Linux - As small and simplistic as it gets.
- Arch Linux - Modern, minimal, a good package manager, well supported, and ran by hobbyists.
- Artix Linux - Arch without SystemD.
Base Software
- busybox - The Swiss Army Knife of Embedded Linux.
- toybox - A rewrite of busybox with a focus on clean code.
- yash - A easy to customize, fast, yet minimal shell.
Compilers/Languages
- tcc - A small fast C compiler that later became QEMU.
- lua - The most portable, embeddable, small, flexible, principled, 30K lines of C I’ve seen.
- kdl - A human friendly documentation language.
- groff - A implementation of troff macros for making papers and such without LaTeX (or even worse; LibreOffice).
- graphviz - A simple graphing software that can be used for making UML diagrams, dependency chain maps, etc.]
- howard-bc - A fully GNU compatible bc implementation, with an inbuilt bignum library.
- wak - A awk implementation in 4500 SLOC of no dependency C.
Libraries
- musl - A minimal standard C library implementation that’s much more flexible than glibc.
- netbsd-curses - A implementation of ncurses that’s much smaller and less bloated.
Other Command Line Software
- hugo - Extensible static site generator based on templates.
- iamb - Vim Like matrix client with sixel image support.
- pass - A simple password manager written in bash.
- pv - Pipe viewer, view the data output of a pipe.
- sc-im - A simple spreadsheet and CSV editor.
- sunwait - Get the Sunrise and Sunset times
- tmux - Terminal Multiplexer, provides tabbing and session management inside the terminal.
- vis - Minimal yet extensible vi clone based on structural regex’s.
- earlyoom - Since the kernel can’t do its own job.
Xorg Programs
- dmenu - General purpose select menu.
- dwm - Dynamic Widow Manager.
- i3wm - Small window manager with different layouts and customization ability.
- nsxiv - Image viewer with gifs, scripting, and grid mode support.
- st - Simple terminal, does its job with as small a footprint as possible.
- xwallpaper - Simple wallpaper setter.
Wayland Programs
- sway - A fork of i3wm for wayland, integrates tasks that xrandr and xwallpaper would normally do into the window manager.
- foot - Foo Terminal, Minimal Wayland Terminal.
- swiv - A fork of SXIV for wayland.
- waybar - A highly extensible wayland bar.
General Purpose GUI Programs
- dunst - Minimal notification manager and daemon.
- drawing - Image editor with a simple UI, the MS paint of Linux.
- mpv - Minimal extensible media player.
- zathura - Vim-like document reader for PDF and other formats.
- dillo - A retro-style low footprint, although less than functional, browser with gemini and gopher support.
- ludo - A minimalist, sleek, painless retroarch alternative.
- i3blocks - Shell script based bar generator for i3wm’s bar.
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.