With all the talk about open source sustainability, it’s easy to focus on “hard currency” contributions to a project. You know, code or cash or documentation or something that the project maintainers can see or touch. But in a conversation with Rich Felker, the founder of the musl libc project, he said something that initially seemed provocative, even shocking, but then felt exactly right:
Users, not code contributors, are the most important part of an open source project.
More specifically, he said, “The users, the testers, the adopters, the bug reporters [are] so much more valuable than writing any code.” In other words, rather than contributing code they’re contributing insights into how that code should be developed (by those closest to it and hence best able to implement the suggestions).
Unpaid, highly effective evangelists
This reminds me of something former MySQL CEO Marten Mickos (currently HackerOne CEO) used to say:
At MySQL we LOVE users who never pay us money. They are our evangelists. No marketing could do for us what a passionate MySQL user does when he tells his friends and colleagues about MySQL. Our success is based on having millions of evangelists around the world. Of course, they also help us develop the product and fix bugs. And the few times that they say that they hate MySQL, that helps us too because complaints usually contain some good suggestions for improvement.
It’s become standard to denounce so-called “takers” in open source, conveniently forgetting that every single company and individual uses far more open source than we contribute. Zero exceptions. Gatsby JS, for example, recently rolled out some amazing new open source code, but also acknowledged its debt to a plethora of open source projects (React, Webpack, Babel, GraphQL, etc. etc.). This is always how it works. For every open source project, for every contributor, there are thousands (millions?) of users.
And, as Felker would say, that’s a Very Good Thing.
The under-appreciated open source user
For Felker, perhaps the most “under-appreciated” group in open source is the user. When I tried to highlight the importance of contributors to musl, he stopped me in my tracks. The most important contribution to musl wasn’t code contributed to the project, he said, but “the people who’ve built distributions based on musl and reported every problem they found in musl, [who] reported things to upstreams of other projects when they found portability problems that needed to get fixed, [who] did all that work of coordinating between different parties.”
Zero code to musl, but huge value for musl. So much so, he says, that “we’re now [to a point] where most things you get and you just build out of the box and they work.” Not because of any code contributions, but because of user feedback.
Felker went on to say he would have had to spend 10 to 100 times the amount of time building musl had he not been the recipient of so much feedback. “With lots of people using it and wanting things to work and not wanting to have to maintain their own outer tree patches with their own builds, it all happened.”
This jibes with something Thomas Caswell, Matplotlib project lead, told me recently. When he first became involved with Matplotlib it was as a user, answering Stack Overflow questions. In fact, he says one of the best ways to learn a project is by answering questions on places like Stack Overflow because it puts you in a position to encounter others’ use cases. It was also an ideal way to start “fixing” bugs in the code without touching the code. This eventually led Caswell to contribute code to the project, but his insight into what code to contribute came from learning from users of the code.
In short, while we rightly put open source contributors on a pedestal, perhaps we need to rethink the hierarchy of “contributions.” If someone contributes code to a project but no users are there to use it, does it “make a sound”? Not really. Users are the lifeblood of an open source project.