---
title: I love the hidden champions
date: 2020-02-14
categories:
  - english
tags:
  - ilovefs
  - fsfe
  - bash
headerimage: /blog/hidden-street.jpg
headercredits: The unknown Free Software contributors. Photo by Kaique Rocha

---

A few days ago I've sent an announcement email for today's [I Love Free Software Day](https://ilovefs.org) to a large bunch of people. Most of the remarkably many replies have been positive and a pure joy to read, but some were a bit sceptical and critical. These came from Free Software contributors who are maintaining and helping projects that they think nobody knows and sees – not because these software projects are unused, but because they are small, a building block for other, more popular applications.

When we ask people to participate in #ilovefs (this year for the 10th time in a row!) by expressing their gratitude to contributors of their favourite Free Software projects, many think about the applications they often use and come up with obvious ones like Mozilla's Firefox and Thunderbird, LibreOffice, their Linux-based distribution, or CMSs like WordPress and Drupal. Not that I think this is not deserved, but what about the projects that actually form the foundations for these popular suites?

I researched a bit on my own system (based on Arch Linux) and checked on how many packages some of the aforementioned applications depend (including dependencies of their dependencies)[^1]:
* Firefox: 221
* Thunderbird: 179
* LibreOffice: 185
* GIMP: 166
* Inkscape: 164

Phew! Looking through the list of dependencies, there a dozens of programmes and libraries that I couldn't even imagine what they could be about. But they make a big application, be it Firefox, Thunderbird or GIMP, actually possible. Isn't it a bit unfair that we often don't see these small (or sometimes huge) projects and the people who take care of it?[^2]

I decided to change that, at least for one day! I've analysed which packages are most used as dependencies of other packages (similar for Debian/Ubuntu [^3]):

```bash
for p in $(pacman -Q | cut -d" " -f1); do
  echo "$(pactree -r -l $p | tail -n+2 | sort | uniq | wc -l)–$p–$(pacman -Qi $p | grep "^Description" | grep -oP '(?<=: ).*')"
done | column -t -s'–' | sort -nr
```

Output:

```
1621  iana-etc                   /etc/protocols and /etc/services provided by IANA
1620  tzdata                     Sources for time zone and daylight saving time data
1620  linux-api-headers          Kernel headers sanitized for use in userspace
1620  filesystem                 Base Arch Linux files
1619  glibc                      GNU C Library
1349  gcc-libs                   Runtime libraries shipped by GCC
1287  ncurses                    System V Release 4.0 curses emulation library
1267  readline                   GNU readline library
1261  bash                       The GNU Bourne Again shell
...
```

As you might expect, on the very top I found a lot of GNU and Linux sub-projects, some widely known (like bash), some which I as a more-user-than-developer never heard of before (like libffi). This alone has been an interesting journey during which I learnt a lot about projects and their maintainers which play a crucial role on my laptop.

In the end, I decided to express my thanks today to the following projects and people:

* The development team behind **acl/attr** which controls access permissions
* The four initial creators of **argon2**, Jean-Philippe, Samuel, Dmitry and Daniel, for their password hasing function
* Jan Dittberner (who also is a FSFE supporter!) and Nathan Neulinger, developers of **CrackLib** which checks and enforces strong passwords
* Reuben Thomas and Dom Lachowicz for their **enchant** project, a wrapper for various spell checking engines
* Maintainers of **glibc** and **gcc**, important tools for the C library and compiler
* The **HarfBuzz** team which can shape glyphs from Unicode texts
* The **libmnl/netfilter** people, who provide tools for network-related operations
* The contributors of **libxml2** for their library and tools that are crucial for the FSFE website
* Martin Mitáš who more or less alone maintains **md4c**, a Markdown parser
* Thomas Dickey who maintains **ncurses** which provides a text-based interface for the command line
* Chet Ramey as representative of **readline**, a programme for interactive user input
* And last but not least Lasse Collin who maintains **xz**, a compression tool

But of course, that's only a small fraction of the many interesting Free Software components that enable my daily work. However, if we all do the same and think about the hidden champions – not only during #ILoveFs day but beyond – we can make the humans behind it enjoy their invaluable contributions a bit more.

Happy I Love Free Software Day everyone! ❤

PS: If you want to try the same with apt (with another separator):

```bash
for p in $(dpkg --get-selections | cut -f1 | cut -d":" -f1); do
  echo "$(apt-cache rdepends $p | tr -d '|' | tail -n+3 | sort | uniq | wc -l)*$p*$(apt-cache show $p | grep -m 1 "^Description:" | grep -oP '(?<=: ).*')"
done | column -t -s'*' | sort -nr
```

[^1]: During the writing of this blog post I remembered Matthias [hugging Peter Stuge for #ilovefs 2013](https://k7r.eu/hug-a-developer-today-peter-stuge/) who also contributes to widely used Free Software projects.

[^2]: `pactree -l firefox | sort | uniq`
