How We Paid Our Open Source Taxes

How We Paid Our Open Source Taxes

Open Source libraries tend to have two problems:

  • Not enough funding
  • Not enough contributors*

*Particularly concerning when you consider the Bus Factor.

When you're maintaining an open source library, and you're not getting paid for it, and nobody's helping you, and you're constantly fielding complaints from users that this or that is broken, and "why isn't it fixed yet I need it now!", it's easy to get frustrated:

And as the maintainer of several open-source libraries, I sympathize with these notions. That said, there is an extremely good rebuttal:

At the risk of sounding like a traitor, I think we Open Source developers sometimes talk out of both sides of our mouths. For one, most of us are extremely fond of the MIT license and its derivatives because of its simplicity, compatibility, and lack of restrictions, but then we get our feelings hurt when somebody comes along, takes the code we wrote, profits from it, and doesn't contribute back. IE, complying 100% with the stipulations of the MIT license. If we wanted to force them to contribute back, shouldn't we have used something like the GPL instead?

But I don't think it's as simple as that. Open Source communities are built on trust and the spirit of cooperation, and like all human communities, have both written rules (licenses, contracts) and unwritten rules (social conventions).

At the same time we have to consider the users. We're constantly trying to convince them that they should consider open source alternatives over proprietary ones, but we have to hold up our end of the bargain. After all, waving the open source wand doesn't magically make your software better. For instance, I would desperately love to dump Photoshop but the Gimp, despite heroic strides, just isn't there yet and I need to get my work done today. And if someone switches out their tech stack for ours based on rosy promises about the delights of open source only to find out a month later that OMG the database calls are BROKEN and we need to ship to production TOMORROW, well, I get that, I really do. At the same time, if I'm not getting paid and I'm not getting help, then I'm not obligated at all to throw aside my entire life and fix your problem for you for free, right here, right now.

Open Source developers need financial support and contributions.
Users need useful software with reliable support.
Both of them need trust and cooperation.

Users:

The bottom line is you get what you pay for, and as I am so very fond of saying, money is not the only thing you can pay with. You can pay with contributions, you can pay with documentation, you can pay with detailed & helpful bug reports with reliable reproduction steps, heck, you can pay with a warm "thank you" so a developer can know someone actually cares about their work. And most of all, you can pay with patience and understanding.

Developers:

The bottom line is if you want something, you have to ask for it. There are almost certainly people standing by ready and willing to help, but you have to reach out first, and the best way to ask for something is to engage them in a positive emotional frame. For instance, notice this article is titled "How we paid our open source taxes", not "Why haven't you paid your open source taxes, you ungrateful parasite".

So today I'd like to present a case study for how the HaxeFlixel community was able to successfully collect its open source taxes with smiles on all sides.

What is HaxeFlixel?

HaxeFlixel is a free and open source, cross-platform, 2D-focused game framework, written in the Haxe programming language. It started as a port of the Flixel framework, which was perhaps the most popular flash game framework of its day. Whereas Flixel could only make Flash games, HaxeFlixel can export to Windows, Mac, Linux, iOS, Android, Flash, HTML5, and more.

HaxeFlixel turned five years old this past Sunday, and in that time a lot of games have been written in it, including my own Defender's Quest. It's now one of the most popular Haxe libraries of all time and has attracted many contributors, but participation rates still follow a power law, with the majority of contributions coming from just a handful of people, and most crucially, all of them are volunteers. We started thinking about a fundraiser a while back, but many of us wondered whether we would be able to raise much.

Fast forward to today, about 24 hours after our IndieGoGo campaign launched, and we've already raised 111% of our goal. There's still 29 days left on the campaign, so only time will tell how much more we can raise, but I think there's plenty of interesting lessons to be learned already.

Know what you need

The big reason we reached our goal so fast was that we didn't ask for much -- just $3,000 USD. As it turns out, HaxeFlixel's founder, Alexander Hohlov, lives in Russia and apparently only needs $6K to live on. Not only would that let him quit his current job, but it actually represents a step up in income. As soon as we heard this we knew there was an opportunity -- surely we can put together $6,000 from the community. Between HaxeFlixel's patreon savings and pledges from the core contributors, we knew we could guarantee $3,000 ourselves. That means we only had to ask for $3,000 more. I would have never imagined that we could have done something useful with this small amount of money, but simply by asking we uncovered a wonderful opportunity, and a compelling human interest story, to boot.

"Help Open Source" is a nice call to arms, but "Help Open Source and change a young man's life" is even better.

Know your resources

Since we're a game framework, it stands to reason that game developers are using our software. We started asking developers if they would be willing to donate copies of their free or commercial games, and suddenly keys and download links started rolling in. Our fundraiser quickly went from being just a way to raise money, to also being a showcase for highlighting and celebrating community games.

Soon we were able to set up limited quantity pledge tiers with game keys, ranging from simple freebies made for game jams, to successful commercial titles developed over several years. When you think about it, this is actually a better immediate value for your average crowdfunding pledger -- when you back game project XYZ, that project might never finish, and at best you're going to get that one game. When you back the HaxeFlixel fundraiser at one of the game pack tiers, you immediately get a bunch of great games, regardless of whether all the core contributors get hit by a meteor two months from now.

Say Thank You

Since we knew we would run out of game keys eventually, we needed to offer some meaningful reward for higher value pledge tiers that wasn't limited in number. So any one who pledges $15 or more gets credited as a "Funder" on the HaxeFlixel website. But can we go further than that? It occurred to us that we could ship a text file with the game library itself, that includes a list of all the "Funders" from the IndieGoGo campaign. After the fundraiser, we'll add some API to the library that makes it easy for developers to include these people in the credits for their games. It'll be purely opt-in for developers to do so, but many developers have already said they'll definitely be doing it for all of their games. I certainly intend to do so for the Defender's Quest series.

Don't undersell yourself

At the very last minute, we added "corporate sponsorship" tiers. We knew there were some people out there with serious money who might want to help the library out, and as businesses rather than individuals, our top $125 tier (featuring a bunch of games) either wouldn't seem very enticing or would anchor them well below their total willingness to pay.

So just spitting into the wind, we added Silver ($250), Gold ($500), Platinum ($1000) and Unobtanium ($3000) sponsorship tiers. Each of them gets your logo on a new "sponsors" page of the HaxeFlixel.com website, and the higher tiers get you a bigger logo, more prominent placement, and another logo on the front page that also increases in size and prominence with the pledge level.

It's a good thing we added these tiers, because in less than a day we've sold one Platinum sponsorship and two Silvers, accounting for nearly half of our total pledged funds.

Keep Going

Having blown our original goal out of the water, it goes without saying that we'll be setting new goals to motivate people to contribute further. That said, I don't want to fall in the trap of explicit "stretch goals" that over-promise specific features like, "HaxeFlixel will add a fully open source re-implementation of Dwarf Fortress to the addons library". Instead, we'll focus on general categories of things that we will be able to do with additional funding, focusing on long-term maintenance and support. Final decisions will depend on the HaxeFlixel leadership, but ideas include:

  • Giving Alexander a raise
  • Hiring additional help from core contributors
  • Posting public bounties for specific features or tough bugs
  • Giving back to the other libraries we depend on (OpenFl, Lime, Haxe, etc)
  • Investing in tools (HaxeDevelop, Visual Studio CODE Haxe plugin, etc)

And finally, we've been experimenting with a service called Thunderclap that I've heard good things about. Basically, it lets you gather a bunch of people together to schedule a coordinated social media burst at once -- you sign into the app and give it permission to post to your social media account once at a pre-ordained time, then cache your message, and at a specific time it goes out all at once, helping cut through the social media noise and increasing your chance of going viral.

Our campaign is here and it'll be interesting to see what the results are and whether this is something that other developers should consider using to promote their fundraising campaigns.


It stands to reason that those of us in the West can't live on $6K -- supporting a western contributor would take a lot more. But had we not done a little internal investigation, we would have never uncovered Alex's opportunity and we would have continued limping along on a purely volunteer basis. I see this as the first stepping stone towards future, more ambitious, fundraising projects, as our community continues to grow.

So that's how the HaxeFlixel community paid it's open source taxes. If developers ask for what they need, users can get what they pay for.