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 |