|I love the hidden champions||2020-02-14||[english]||[ilovefs fsfe bash]||/blog/hidden-street.jpg||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 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 pojects 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 it2?
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]):
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
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):
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