As part of the xz discussion, some asserted that “paying maintainers doesn’t work—we tried to give people money and they wouldn’t take it.” Suffice to say, at Tidelift, we think that’s wrong, and we have been proving it for years. Unfortunately, it is a surprisingly complicated topic—we spent nearly a year talking to maintainers about what they needed before we wrote our first check, and paying maintainers is core to our mission.
It is no surprise that lots of well-intentioned people have failed to figure out how to effectively pay maintainers. In the name of lifting all boats, I thought it was finally time to write down what we’ve learned about paying maintainers in the past seven years of doing it at scale at Tidelift.
Background: we do, in fact, pay maintainers
Yes, hi, we’re Tidelift. On behalf of our customers, we pay hundreds of maintainers millions of dollars. If you’d like to read some specific stories about what maintainers have done with the money, start here. If you’d like to read more about the value customers get from paying maintainers through Tidelift, start here.
So how can you pay maintainers to improve their projects? Here are some of the key lessons we’ve learned from paying maintainers at scale.
There are a lot of open source projects out there, and you probably have limited money to pay them. How do you figure out where your investment will have the most impact?
“Pay small projects, not big ones” is not a universal rule (and we do have some successful examples of paying bigger projects where they can use the income), but it has become central to our approach. There are a few reasons why, including:
I have lost track of the number of times CTOs have told me “but I donate to $BIGPROJECT.” This is often because a senior member of the engineering team, or perhaps even the CTO themselves was once a contributor to that project, but it’s always because the CTO simply knows the name of the project. That isn’t a bad thing, but it presents a kind of myopia.
If you’re a CTO, your stack depends on thousands of projects—for Tidelift’s average customer, it’s over 5,000. In no other industry would it make sense to only pay 0.1% of your suppliers for their products; you would correctly assume that 99.9% of your suppliers are teetering on the edge of bankruptcy.
If you’re paying only well-known projects that are so well-known that your CTO can name them, those projects are also well-known to others. That means they have options for receiving income. It’s the ones that you don’t know about that need the attention the most—the xzs, and log4js, and leftpads of the world.
Instead of giving to the famous projects, you need to give money to the projects that are widely used. If you’re a huge company, you have some ideas from your own dependency trees, but for most people looking to give money, it is best to pool data with other groups or companies to objectively identify what is most widely used in those dependency trees. (Bonus points if you can use data on proprietary products, rather than just in open source library repositories, since the proprietary application-level dependency data will better reflect real-world usage).
First things first: it’s important to pay, as much as possible, the actual maintainers, not people who say they’ll help out. This helps on a lot of levels, among them:
If maintainers can’t take money, that is a very important signal. Among other things, you might learn the following things—each with different solutions:
This is perhaps the section that is most counter-intuitive for a lot of people, especially those who like their software to be as cheap as possible. The bottom line is that the more you treat paying the maintainers for maintenance like a professional, commercial transaction, the better it is for everyone, and the cheaper it may be for you in the long run.
If you treat your payments to maintainers as a donation, maintainers may be more reluctant to accept it for a few key reasons:
Paying maintainers, in contrast, is something they are all used to — and can more readily accept.
Trying to do one-time “airdrops” of money is one of the most common mistakes that would-be FOSS “sponsors” make. Most maintainers have full-time day jobs as well-paid professionals. We have found that they aren’t particularly interested in taking one-time payments to deliver specific new features or work, unless they already have steady, flexible income that gives them the time to take on new work.
In addition, one-time airdrops, no matter how critical the work is, don’t address one of the core problems of maintenance—the need for important packages to be maintained on an ongoing, long-term basis. Ongoing payments align the form of payment with a critical problem to be solved.
So if we’re paying, not donating, what do we recommend paying for?
First things first: complementary to “don’t donate,” we’ve learned it is best to pay maintainers for the value they are delivering. The list of requirements can be pretty lightweight (our list of tasks is brief and impact-focused), but maintainers want to clearly understand what they’re delivering and to whom. This helps them feel confident that they can commit the time required to do the work before they accept payment.
A lot of the ongoing maintenance work needed to keep projects secure and well maintained is, bluntly, not always as much fun as writing new code. But it is important to enterprise consumers that software they use follows these practices, and documents compliance. Because this work is valuable to enterprises, but time-consuming for maintainers, it makes sense that we should pay them to do it.
To do that, at Tidelift we’ve aligned our maintainer tasks with industry standard best practices like those found in the NIST Secure Software Development Framework (SSDF) and OpenSSF scorecards, including things like enabling two-factor authentication, creating a discoverable security policy, and providing fixed releases to address vulnerabilities. Maintainers not only complete this work as part of getting paid by Tidelift, but they agree to document these practices and continue to uphold their projects to these standards over time, which is extremely valuable to enterprise users who can use these commitments to make long-term decisions about relying on those packages.
We know this works! Last year, we ran a pilot with maintainers where we paid them to complete a specific set of tasks related to improving their OpenSSF scorecards scores. We gave them a concrete list of tasks to complete, and the paid maintainers improved their scores by 57%. Those maintainers who joined the pilot ended up with an average scorecard score of 7.2 out of 10, compared to 3.3 out of 10 for packages that were not part of the pilot.
Paying for “feature improvements” and bug fixes have deep fundamental challenges, which is why these efforts have been attempted repeatedly in open source (starting in the late 1990s!) but rarely succeed. What are some of the key issues with paying maintainers to add features or fix bugs?
We explicitly tell maintainers that our customers don’t want to control their projects. Conveniently, this is true! One of the virtues of trying to pay “middle of the stack” projects is that the main interest of our customers is that the projects continue to stay healthy, giving them a fighting chance of meeting enterprise requirements in the long term. “Big” projects require strategic control. If that’s what you want, forming a 501(c)6 is a much better model—but has too much overhead for most small projects.
Ultimately, as with many things, HOWTO pay maintainers comes down to wanting to do it. If you enter the field with a preconception that maintainers don’t want to get paid, or that most maintainers shouldn’t be paid, or that maintainers only merit payment when they agree with your corporate priorities, then it should be no surprise that you find it hard going.
If on the other hand you find that maintainers generate literally trillions of dollars of value, and you think it’s important to society—and to the very for-profit software industry!—that this be something that works in the long run, we promise—you too can pay the maintainers.
In our experience, open source maintainers often start projects for non-monetary reasons, like the classic “scratching an itch,” or because their bosses tell them to.
But after starting projects for various reasons, they often maintain projects out of a sense of obligation—at least until the burden becomes too much and they burn out or quit. To put it another way: no maintainers started their project because of the love of ensuring it complies with your company’s definition of enterprise secure software development practices for no pay for the rest of their lives.
If your company needs the level of secure practices (2fa, fixing vulnerabilities) that you require of the code written by your in-house development team, you are leaving the realm of “software downloaded for free from the Internet” and entering the realm of “economic transaction offering value for income in return.”
Not really. I love charity and do a lot of it, but the day when open source was primarily an ideological, charitable effort is past—and critically, maintainers know that. Maintainers do still have many noble motives, like pride and craft. But they also know it’s part of the very lucrative software economy—and if you pretend it’s somehow untainted by money, they know you’re either naive or trying to exploit them.
We’ve learned a lot about how to pay maintainers successfully over the past few years. Our specific approach involves paying maintainers to implement industry-leading secure software development practices, validate the practices they follow, and contractually commit to continuing these practices into the future so that organizations can confidently make long-term investments in the packages they use.
We’d be happy to tell you more about it, and have stories we can share with you of the benefits customers have received from paying maintainers through Tidelift.
We’re also not the only ones successfully giving money directly to open source maintainers, and other examples you might want to explore include the Digital Infrastructure Insights Fund, the Open Technology Fund, and others.
But if you take away only one thing from this HOWTO, please make it that “paying maintainers does work, you just have to do it right.” At Tidelift, we continue to learn, we hope you will too (and will share your experiences for others’ benefit).
Because it’s simply too risky to not pay maintainers for the incredible value they create.