hisham hm

Anatomy of a (failed?) free-software fundraiser

UPDATE 2014-05-02: The fine folks at Bountysource extended the fundraiser for a few more weeks! Hurry up!

After more than 10 years developing free software (htop, GoboLinux, LuaRocks), this month I made my first organized attempt to get some funding for a project. Or rather, am making, since the fundraiser is still up at the time of this writing. But with 2 days to go and 22% of the funding goal met, I think it’s already a fine time to take a closer look at the experience and see what we can learn from it.

The idea, in short

htop is a text-mode process viewer. The backend code is Linux-specific, so unlike most free software, it’s not a portable project. Still, some people run it unmodified on FreeBSD (and GNU Hurd!) by using Linux emulation layers. There’s no such layer for Mac OSX, so one user ported htop by replacing its backend with a native implementation. There’s nothing wrong with that, of course — the source is open precisely to allow this kind of thing!

The problem is that, due to the way this fork was done, it couldn’t easily be merged back. So, it hasn’t kept up with the development and bugfixes of htop over the years. This hasn’t stopped it from making its way to Homebrew, through a series of forks. They’re all based on that version of htop 0.8.2 from five years ago, though. The result is that I keep getting bug reports from Mac users, some of them for very old bugs!

My time for free software is short as I usually take on lecturing and freelance jobs in addition to my PhD, so I though that, if there was enough interest, I could take on solving this situation as this season’s “freelance job”. I had just learned about BountySource through the neovim fundraiser so I thought “why not”, and created a fundraiser titled “Mac OS X support in the official htop 1.x tree”.

First contacts

I went through Github and searched for every fork of AndyA’s original htop-osx repository (when this fork was made my own htop repository was still in SourceForge, so his fork is not a “Github fork” of mine) and contacted every author to make them aware of my project. I also looked at the update history of the htop-osx formula in Homebrew and contacted everyone mentioned there. My goal was to reach everyone connected to htop-osx, let them know about the fundraiser (I didn’t want it to look like a “hostile fork” (even though I’m the original author!) ) and ask them how to better reach the OSX community.

Everyone was fine with the idea and nice to me, but unfortunately nobody had any tips on how to reach out to the audience. Fork authors suggested contacting Homebrew; Homebrew told me to contact the “htop-osx project”. Having had already contacted both, that didn’t take me far.

The general advice was to go through word-of-mouth. The thing is, I’m a Linux guy, and so I tend to gravitate around that universe in my online communities. I posted links on Twitter and I’ve got some pledges from friends, who were sure not that interested in the port but wanted to help out (thank you!). Then I posted in the htop mailing list, from which I also got some pledges, as shows of support.

Trying to reach wider audiences, I posted on a few Mac-related subreddits, where I got some pledges from /r/apple (and also on Hacker News, where it instantly tanked of course). After a couple hundred dollars in initial pledges the first few days, the fundraiser sat mostly dormant.

I wondered what else I could do to shake things up, but at the same time I couldn’t dedicate a lot of time to promote the fundraiser, between preparing classes and other commitments. This is a sign of a classic mistake: I didn’t do any planning beforehand. In particular, I was taken by surprise that once went through the BountySource fundraiser signup process, there was no option to set the duration of the campaign (yes, that means I didn’t read the fine print carefully; I guess I just skimmed it to see what was the percentage of their cut — 10%, by the way). It was only when I was up and running that I realized I only had one month to go. With only one month, I’d probably have set a lower goal.

BountySource has since remodeled its site to deemphasize “fundraisers” and focus more on developer teams and “bounties”, which are feature/bugfix requests for which one can set a value but, as I understand, can stay open with no time limit. I think that’s a better model.

An unexpected gift

Things were pretty quiet for a while, when I got a notification from none other than the original author of the Mac fork, AndyA. He got my email early on but could only respond a few weeks later. He apologized about the bug reports that were sent my way (mostly because htop’s segfault handler outputs a message directing the user to report bugs at the main htop website — something that none of the various Mac forks actually changed!) …and was extremely generous to pledge $500 to the fundraiser, which essentially doubled the amount I had raised at that point!

That was really kind of him, and it made me especially happy to know that my porting project had full support from the author of the original Mac fork. With that spur of motivation, I rushed to put to practice an idea I had a few days earlier. I thought of the best way I know to make the userbase of a free software project take notice, which is…

Making a release

htop is a mature piece of software, over ten years old by now. It had been over a year since the last release. There were some new features, bugfixes and performance improvements already sitting in its repository, that I had implemented and merged from contributors over the last year. So, I combed through the bugtracker fixing other pending issues and packed version 1.0.3.

I announced it at the usual places and made a post on /r/linux where it got a quite nice reception. That didn’t translate considerably into pledges, but at that point I didn’t really expect it would shift the fate of the fundraiser.

I even got a comment saying “I do not need a MacOSX version so I donated a few bucks on the regular site”.

What was learned

That comment above sums up a lot of what happened in this fundraiser. My userbase consists of Linux users, not Mac users, so they weren’t really engaged by this project.

Also, there were some fundamental problems with the idea of turning this Mac port into a fundraiser:

With that in mind, I think the fundraiser would have had much better chances if it were aimed at Linux users and proposed cool features, such as

Those are things I keep meaning to do at some point, but they require care in their implementation, in order to keep htop focused and lightweight.

What now

Even though the campaign hasn’t reached its funding goal, I think it has been a positive experience and a learning process (and the raised money is surely welcome, especially because there’s a particularly nice feeling in being compensated from developing free software). And at the very least, if I get new Mac bug reports in the future, I can point them to this and say “I tried!”

Aside from the mistakes listed above, I think the main thing I did right was contacting everyone related to the htop-osx fork. Not because the largest donation came from that, but because it opened a positive channel of communication with other developers, which will hopefully be fruitful for the project in the future.

With the current level of funding I will still have to take other freelance jobs this season, so I won’t have the time to produce a full Mac port. But the raised money will be used in sponsoring the development of the platform abstraction layer, which is the first step. Once I isolate the Linux-specific parts, it should be easier for the Mac development community (some of whom I was able to reach out in this project) to contribute a native backend and hopefully we’ll get the situation of htop on the Mac sorted out sooner rather than later.

UPDATE 2014-05-02: The fine folks at Bountysource extended the fundraiser for a few more weeks! Hurry up!