kaashif's blog

Programming, with some mathematics on the side

How to accidentally become a maintainer of a project

2020-04-15

I'm somehow one of the maintainers of rss2email, a popular Python program for reading RSS feeds and sending feed updates to your email address. I think I reached this point via an unusual route, so I thought I'd write a little about how it happened.

For those not familiar, back in 2004, Aaron Swartz (yes, that one, rest in peace) wrote a short Python script that would read an RSS feed and send you emails. It had a few options, but was fairly simple. It was a few hundred lines long.

After 16 years of features being added and being passed around various maintainers (see here for a complete list of contributors), rss2email is still around, with many more features, many more lines of code, and many (many) more bugs.

How did I get involved?

How I got involved

Back in 2017, when I was still studying for my Master's degree, I was looking for open source projects to take part in to pad my CV, mainly to impress interviewers for summer internships. This led to me looking at the list of software I used and trying to contribute to all of them, fixing any bugs that annoyed me, updating any packages that were out of date, and so on.

At the time, OpenBSD (which I've always had a soft spot for), had a severely outdated version of rss2email in its packages repository: 2.70. At the time, the current version was 3.9. I sent an email to ports@openbsd.org with some updates, expecting it to be accepted without fanfare. Since I was already a user of the new version, I didn't realise the sheer number of breaking changes introduced, so I couldn't predict the long discussion about how to upgrade that ensued.

Eventually, a consensus was reached that the changes were too breaking, so a new package would have to be made. Even worse, the new version had many more bugs than the old version, so existing users on the ports@ mailing list questioned why they should even upgrade.

The OpenBSD package was shelved.

Around this time, @wking's fork was the most updated fork of rss2email - there had been a Python 3 conversion, a test suite had been added, lots of features. However, the fork wasn't very active. Users would open issues, make PRs, but there weren't enough maintainers and not enough manpower to keep the project going. In the past, when this happened, another lone maintainer took over. This is essentially what @wking did, contributing in a big way for many years.

The bus factor

Python is the 2nd most famous example of a project which was run by a BDFL, a benevolent dictator for life, Guido van Rossum. In 1994, someone made this post on a newsgroup:

What if you saw this posted tommorrow.

Guido's unexpected death has come as a shock to us all. Disgruntled members of the Tcl mob are suspected, but no smoking gun has been found...

I just returned from a meeting in which the major objection to using Python was its dependence on Guido. They wanted to know if Python would survive if Guido disappeared. This is an important issue for businesses that may be considering the use of Python in a product.

-- Michael McLay (mclay@eeel.nist.gov)

This led to the popularity of the term "bus factor". A bus factor of n indicates that n team members would have to "get hit by a bus" for the project to stall. In our case a core team member had already passed away, before most of us had started contributing: Aaron Swartz. So the bus factor wasn't a joke - a low bus factor had already almost stalled rss2email for good.

Enter @jsbackus, who, in 2018, decided to create the rss2email GitHub org and add some erstwhile contributors to the project, in the hopes of revitalising it and increasing the bus factor.

Probably by accident, I was included in this effort. See here. I guess the strategy was to add anyone who had shown an interest in maintaining the project. Here's the fateful comment by @Profpatsch:

An update: Jeff has added @Ekleog, @kaashif, @Yannik and myself to the rss2email organization, so we'll hopefully be able to administrate the project with more manpower.

-- @Profpatsch

And there you have it, I was a maintainer!

What does maintaining a project mean, anyway?

After a sizeable effort by the other maintainers to migrate Linux distros to point to our repo, and to claim the package on PyPI, we were all set to start writing PRs and fixing bugs! Off to the OpenBSD mailing list to update to 3.9 (again), but this time with new and improved links to the new repo.

It didn't go too well, this package never made it. The objections can really be summarised by some feedback I received from an OpenBSD user of the old rss2email:

This is at least the second unreleased fix I noticed for newer python3+ versions. This begs the question as to how this newer version is better than what we already have in ports...

-- jca

Version 3.9 was the last version released by @wking, from before the effort to get all of the forks and maintainers under one roof to fix all the bugs. No surprise that it was riddled with bugs then. Back to the drawing board.

Eventually, a year later, we fixed a lot of bugs. The other maintainers put a lot of work in to incorporate forks and many users' personal bugfixes and we released our first version, 3.10.

This time I had a bit more success in my effort to get the package added to ports. At some point, I managed to convince sthen@ (or he decided independently of me) that rss2email didn't need a new package and could just work as a major upgrade. This was because there was a working upgrade path. So if you look at the OpenBSD port of rss2email, you'll see that:

  1. I am the maintainer
  2. It's not a new package: it's a straight upgrade

Amusingly, someone updated it from 2.70 to 2.71 one month before I updated it to 3.10.

Plans for the future

Nowadays, when I get time to work on rss2email, I respond to users' issues on GitHub, review PRs, merge PRs, fix bugs, and so on. It's not glamorous, but it's honest work.

Our plan is simple:

  1. Fix bugs
  2. Don't make users' lives difficult
  3. Add new features

In that order. If something's nonsense, sometimes you've got to break it to fix it...

As always, contributors are welcome! Happy hacking!