I’ve been thinking a lot about better ways to fund open-source software development. Lots of software that underpins huge amounts of technology today is developed, essentially for free, by people who are super talented and who have a really high opportunity cost for their time. Frequently, valuable (or, at least potentially valuable) projects are started and then abandoned because the original developer or maintainer no longer has the time to invest in the project.
Many of these open-source projects are also widely used by for-profit companies to their own advantage. The value asymmetry is striking — open-source developers create tons of value, of which they capture only a very small amount while for-profit companies often contribute nothing to the software but are able to capture large amounts of value from it.
A few months (years?) ago GitHub released a feature called “GitHub sponsors” which allows companies (or individuals, I suppose) to sponsor open-source contributors or process on a recurring monthly basis.
I love the idea, but I think one problem is that it can be hard for a company to justify sponsorship out of either a positive commitment to open-source or being guilted into it somehow. Unfortunately, that means that the biggest companies, where it’s hardest to get approval for something like that, often end up not contributing and it’s left to smaller companies (operated by leadership that happens to care about open source) to do most of the funding.
An Alternative Proposal
As opposed to simply funding an open-source project or contributor on a monthly basis, I’d love to see GitHub (or whoever, really) develop a system whereby project maintainers could set a price for the development of certain features — companies (or individuals) invested in seeing those features developed could then commit to funding them partially or completely.
The system would work something like:
- For every GitHub issue, the project maintainer can set a price for either building the feature or fixing the issue.
- Potential funders can then commit to funding that issue for up to a certain dollar amount
- Github should then put that dollar amount in escrow
- Once the issue is resolved and the feature is shipped, the money gets released from escrow to the maintainer
- If the issue isn’t completed within some time frame (a year?), the money can be (optionally) released back to the funder.
- Of course, the maintainer can choose to work on an issue at any time, if it’s fully funded or not — even if the issue isn’t yet “fully funded” whatever money is in escrow will be released to the maintainer
I believe this will incentivize much more support of open-source projects as it ties the development of the tool directly to features that companies want or need. They can pay a fraction of the price set by the maintainer, or really whatever they value the feature at. Instead of sorting issues in GitHub by how many “thumbs up” emojis an issue has, the maintainer can start sorting by how much users are willing to pay for a given issue. This both helps prioritize the most important issues and helps incentivize the maintainers.
I’m an open-source maintainer (of a small, infrequently used project) and I know that I would love to see something like this for the project that I maintain — even if it was just an extra $50 for a feature, if 10 people all chipped in $5 they could get the feature they want and I could buy myself a bottle of Mezcal.
I’m also an entrepreneur that relies heavily on open-source projects. There are some issues and features that I find in the backlog of these projects that I would love to see developed, but other than dropping a GitHub comment and a thumbs-up emoji I don’t have a lot to contribute (I’d love to pay something for the feature, but I don’t have the budget to fund the entire thing myself).
This feature solves a big coordination problem amongst multiple potential funders so that they don’t need to hire anyone, they don’t need to manage the development, and they don’t need to pay 100% of the cost — they can commit to however much they value the feature and then if there are enough other folks out there who want to see the feature built, it’ll happen and everyone gets the benefit.
The Potential Issues
The biggest issue with this idea, and the reason that Github probably didn’t implement it this way, is that there’s no “approval” process for when an issue gets completed and the money released. A nefarious maintainer with plans to abandon a project could go through and mark every issue with money in escrow as “completed” and then abscond with the money without ever having shipped the features that the funders contributed to.
I actually think that sort of egregious example would be rare enough to not really have to worry about, but the more subtle case where a funder contributes to a feature but the feature is created in a way that doesn’t actually solve the funder’s problem — what if the funder is upset that they didn’t get what they expected? In the current world, the funder can leave a nasty GitHub comment but that’s about the only recourse they have. Once money is on the line, would they have justification to do more? Would they sue Github? The maintainers? These are all things that Github justifiably doesn’t want to be in the business of adjudicating, and is probably an extra headache for open source maintainers to worry about.
That being said, I believe that that problem is solvable (e.g., via however Kickstarter does it?) and I truly believe that a feature like this could open up so much value in the open-source ecosystem that it’d be worth the cost. Maybe not to Github, but to someone?
If you’d be interested in thinking more about this idea, drop me a line.