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 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:
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]):
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:
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