Size in loc of common software
Bloat is everywhere, in 2018 I started my journey on debloating my digital
life, so far I mostly use linux as my main OS (the mostly is due to uni
stuff I don’t want and/or have time to deal with), I don’t use a desktop environment,
got rid of systemd, pulseaudio and polkit just to name a few. I could go on
about how I debloated most of my computing life but that is not the goal
of this article, that is I recently started to wonder: how much bloat is really
there?
In order to answer that question I rolled up my sleeves and with the mighty
power of post-its, git and scc I cloned the repositories of many
common programs in order to check their bloat suckless style, with
lines of code. Let’s get to the data.
UPDATE: I changed the method for counting lines of code, that is I changed
utility from scc to cloc. The reason behind this is that cloc
allows to exclude a list of languages from the code count, that way I can count
only the lines that matter excluding stuff like documentation and so on.
So entries marked with “x” mean that they were re-counted using the following
command (that’s a big command):
$ cloc --exclude-lang='make,m4,YAML,SVG,CMake,DTD,Markdown,CSS,\
Meson,diff,Dockerfile,NAnt script,HTML,TeX,PO File,reStructuredText,\
vim script,AsciiDoc'
Init systems
Name |
loc |
systemd |
566K |
OpenRC |
14K |
s6 |
10K |
runit |
6.2K |
sysVinit |
8.7K |
Logging daemons
Technically systemd includes its own logging daemon but here is omitted.
Name |
loc |
rsyslog |
152K |
socklog |
3.7K |
metalog |
1.9K |
Network
Generic network management programs.
Name |
loc |
wpa_supplicant |
529K |
kea |
454K |
NetworkManager |
413K |
ModemManager |
192K |
connman |
98K |
iwd |
85K |
dhcpcd |
38K |
Music players
Name |
loc |
mpd |
93K |
cmus |
40K |
mocp |
35K |
ncmpcpp |
23K |
herrie |
7.1K |
Cron daemons
Name |
loc |
fcron |
12K |
cronie |
7.5K |
dcron |
2.1K |
scron |
1.0K |
tinycron |
117 |
Text editors
Don’t tell me you saw that one coming.
Name |
loc |
vim |
667K |
neovim |
550K |
vis |
32K |
kakoune |
30K |
micro |
27K |
nano |
16K |
Build systems
Name |
loc |
cmake |
774K |
tup |
243K |
meson |
68K |
GNU make |
31K |
ninja |
18K |
samurai |
3.3K |
Shells (POSIX or not)
Name |
loc |
bash |
161K |
fish |
157K |
zsh |
115K |
ksh93 |
72K |
tcsh |
65K |
mksh |
30K |
ash |
12K |
dash |
13K |
Boot loaders/managers
Name |
loc |
CloverBoot |
1.7M |
GRUB |
281K |
syslinux |
222K |
reEFInd |
27K |
LILO |
24K |
Display servers
Dependencies are counted two levels “deep” excluding duplicates, from
the alpine linux x86_64 package repositories.
U: Not built, protocol code not generated
B: Code generated
Name |
loc |
dependencies |
xorg-server |
422K |
44 |
- |
- |
- |
wayland + |
|
|
wayland-protocols + |
|
|
wlroots |
U: 97K, B:268K |
27 |
SSH servers/clients
Name |
loc |
dropbear |
101K |
OpenSSH |
123K |
TinySSH |
13K |
Terminal multiplexers
Name |
loc |
tmux |
57K |
GNU screen |
32K |
dvtm |
4.1K |
Terminal emulators
Name |
loc |
kitty |
174K |
alacritty |
18K |
wayst |
31K |
havoc |
10K |
wterm |
10K |
st |
4.3K |
Kernels
Name |
loc |
netbsd |
32M |
linux |
19M |
FreeBSD |
16M |
OpenBSD |
15M |
DragonflyBSD |
887K |
Permission managers
Name |
loc |
sudo |
140K |
polkit |
22K |
OpenDoas |
2.8K |
PAM |
60K |
Compilers
Name |
loc |
gcc |
9.0M |
llvm |
8.0M |
zig |
2.1M |
rust |
801K |
tcc |
93K |
Torrent clients
Name |
loc |
qBittorrent |
743K |
transmission |
282K |
deluge |
118K |
rtorrent |
22K |
Web browsers
Does not include libraries, only the main repos.
Name |
loc |
chromium |
too large |
Firefox |
19M |
SeaMonkey |
17M |
Webkit |
12M |
qutebrowser |
92K |
min |
20K |
vimb |
9.4K |
Lynx |
177K |
links |
166K |
dillo |
66K |
badwolf |
1.8K |
Window managers
Name |
loc |
awesome |
65K |
i3 |
44K |
openbox |
40K |
bspwm |
12K |
2bwm |
3.3K |
dwm |
2.5K |
Audio systems
ALSA
Name |
loc |
alsa-firmware |
133K |
alsa-lib |
93K |
alsa-tools |
43K |
alsa-utils |
36K |
alsa-plugins |
12K |
alsa-oss |
4.0K |
Wayland compositors
Name |
loc |
weston |
117K |
sway |
42K |
wayfire |
27K |
hikari |
15K |
river |
5.9K |
Application launchers
Name |
loc |
rofi |
20K |
bemenu |
5.3K |
wofi |
3.6K |
nwg-launchers |
2.2K |
dmenu |
1.2K |
Device managers
NOTE: mdev is only one source file, so loc count doesn’t
include anything but that file.
Name |
loc |
eudev |
27K |
mdevd |
1.6K |
smdev |
697 |
mdev |
751 |
Initramfs generators
Name |
loc |
dracut |
28K |
tinyramfs |
448 |
Code counters
Name |
loc |
scc |
41K |
tokei |
5.7K |
Package managers
Name |
loc |
apt |
98K |
xbps |
40K |
pacman |
28K |
apk |
17K |
kiss |
1.0K |
Webservers
Name |
loc |
apache |
419K |
nginx |
144K |
hiawatha |
105K |
lighttpd |
70K |
caddy |
27K |
Syncronization and backup programs
Name |
loc |
borg |
86K |
syncthing |
129K |
git-annex |
77K |
rsync |
51K |
restic |
43K |
casync |
31K |
Others
Stuff that doesn’t fit any other category (for now)
Name |
loc |
openssl |
642K |
bluez |
373K |
libressl |
374K |
elogind |
137K |
dbus |
115K |
tint2 |
33K |
lowdown |
15K |
pass |
2.8K |