I don’t claim to be any sort of a guru, but I have managed to carve out enough of a niche through independent open source development to support myself (just barely) for the last ten years. Having worked as a full-time open source developer for a Fortune 500 company for four years prior to becoming independent, I can speak to why there are huge technical benefits to independent, as opposed to corporate, open source development. As a corporate developer (on the same projects, to be clear), I spent probably half of my time dealing with issues that were specific to the company’s (now obsolete) pet platform, and half of the rest of my time dealing with corporate administrivia that contributed nothing to the technology, the open source community, or my personal skills. As an indie, I can remain platform-agnostic, and although I still can’t spend 100% of my work day contributing to my OSS projects in meaningful ways, I can certainly spend a lot more than 25%. Also, because of the low overhead of being independent, I can charge about 1/5 the rate that my former employer charged for my time, and I can accomplish considerably more with that time. At least for me, this is the most efficient and meritocratic way to develop open source code, and it maximizes my ability to deliver what the community actually wants. However, it’s also stressful, because only about 1/3 to 1/2 of the money I need to pay my bills in a given year is guaranteed in advance (by corporate patrons.) I have to constantly hustle for the rest, which mostly comes from funded development of new features. Last year, that didn’t work out so well, I missed my target by 15%, and I went into debt that I am slowly but steadily working my way out of. It is a month-to-month existence, much like being a professional artist or author, so it’s certainly not for everyone.
One of the biggest challenges is figuring out how to avoid giving away so much free milk that no one will want to buy the cow. It’s a constant tightrope act, and it is not made any easier when people— including some large multinational corporations— have the expectation that free software == free labor. No. With few exceptions, if the open source project is higher-quality than science fair/hobbyist code, then someone somewhere paid for the labor. In the case of the projects I develop/manage, one of which was developed from scratch and the other two of which improved upon open source projects that have existed in some form since the early 1990s, millions of dollars/Euros/pounds/etc. of labor have gone into their development over the years. I attempt to attract patrons with the value proposition that, by sponsoring one of my projects or paying me to implement a feature, they are able to get the enterprise-quality functionality they need for hundreds or even thousands of times less than it would cost them to develop a proprietary solution from scratch. That has fortunately resonated with enough companies/organizations that I have been able to attract enough patronage and funded development to pay (most of) my bills for ten years. However, I have no delusions that this business model would work for most open source projects. Two of my projects are niche solutions, and despite being open source, they were also first to market in many respects. They are the sort of thing that, if you need it, you really need it, and since similar closed source solutions cost a lot of money, even if a company has to pay me to implement a feature they need, they still come out ahead. These niche solutions also require a lot of domain expertise in order to understand what the code is doing, so there is a steep learning curve for contributors. Thus, my other value proposition is that outsourcing the development to me and having a new feature officially supported as part of the main line of the projects will ultimately cost less than doing in-house development and maintaining an in-house fork.
The third project I develop/manage is libjpeg-turbo— a high-speed ISO-sanctioned JPEG library that is used by popular web browsers, most Linux distributions, many image viewing/processing applications (including some commercial ones), as well as my other two projects (eat your own dog food.) Ironically, though, even though libjpeg-turbo has probably thousands of times more users than my other projects, it is by far the most difficult project of the three to monetize. It has received by far the least amount of patronage and funded development, and I have donated the most pro bono labor to it. In general, people just seem to take infrastructure for granted until it breaks, and when it breaks, they expect the maintainer to drop everything, go out with a shovel and hot tar in the pouring rain, and fill in the potholes for free. That means that I can't just accept any and every contribution to the project. PRs that implement major new features have frequently required 30-40 hours of my time just to properly clean them up, regression test and debug them thoroughly across the spectrum of supported platforms, and integrate them into the code base. That has frequently put me in the awkward position of having to ask for money in order to integrate a PR that a company already paid someone else to develop, or to reject PRs from individual contributors who didn’t do a sufficient job of quality control. I won't apologize for that, because it's necessary in order to maintain the high quality of the code base without going bankrupt, but it has p***ed off some people in the past.
Self-employment in the U.S. is already challenging. My gross income is rarely more than the equivalent of a teacher’s salary (which, in the U.S., is shorthand for “not a lot of money”)— easily 1/3 to 1/2 of what a senior developer/project manager/tech writer/systems integrator/SysAdmin/computer architect/whatever-other-hat-I-wear-on-daily-basis is worth on the open market. However, due to self-employment taxes and health insurance premiums, I end up taking home much less of that salary than a corporate or government employee would, NTM receiving zero perks-- no vacation, no sick days, no retirement, no office space, no health insurance, no nothing. The other problem, being based in the U.S., is that many U.S. companies are unfortunately still skittish about open source. It feels like many of them are still referring to the Halloween documents, even though Microsoft has moved on from that. Thus, most of my income comes from European, Canadian, and Australian companies, and that means that my ability to attract funded development and patronage is subject to EUR/GBP/AUD/CAD exchange rates. Since those currencies have been on the decline relative to the USD, I’ve essentially been on a fixed income since about 2011— unable to raise my hourly rates to account for the ballooning cost of living in my adopted home town of 20 years, nor the ballooning cost of health insurance (irrespective of the problems with the U.S. health insurance system that are causing premiums to rise faster than inflation, health insurance here gets more expensive as you age as well.) In 2016, I restructured my retirement account from previous employers in such a way that I am taking distributions out of it (in the form of dividends) in order to offset the rising cost of living. That fortunately doesn’t cut into the principal, but it does limit the growth of the account. I am basically using some of my retirement money in order to keep developing open source independently, and I haven’t been able to contribute significantly toward that retirement account in ten years. I’m thinking of an Aerosmith song, here. Oh, yeah— “Living on the Edge.”
The other problem is that there is no real guarantee that this business model will be sustainable in the long term, because it depends on growing the user base, not on the size of the existing user base. I have to constantly hustle to attract new users, because new users are the primary source of funded development. Once a company/organization has paid me to implement a particular feature, I usually never hear from them again. I have to keep the projects moving forward in meaningful ways, solving new problems, giving people what they want, and thus increasing my user base (and the potential for funded development) while still maintaining the old features and the high quality that attracted my existing user base. Basically, every bit of funded development I get helps the projects move forward, and that helps attract new funded development. However, sometimes I end up in the awkward position of having to move the projects forward even though no funding is currently available, thus requiring me to eat sometimes hundreds of hours of labor in order to test, debug, polish, and put out releases. Last year, I had to do that with all three projects, which is why I went into debt. I usually don't get paid to do bug/security fixes, except in rare cases— such as if the bug was part of a feature that an organization funded, and I still have an active contract with that organization. I generally have to rely on the money that patrons/donors pay me every year (the "general fund") in order to fix bugs and security issues, put out releases, field questions from and provide tech support to the community, maintain/improve the build system and documentation, improve the readability and maintainability of the code, etc.-- IOW, to sustain the overall quality of the project. However, the general fund tends to only last 6-9 months, so it’s not uncommon for 50% of my labor on the open source projects I develop/manage to be pro bono. But if I didn't do that pro bono labor, then I wouldn't be able to move the projects forward, and thus I wouldn't be able to get paid for the other 50%. I could make twice as much money, or I could charge half as much, if every hour of work I did on these projects was funded.
I am not complaining, by any means. Despite the challenges, working independently is exponentially more rewarding than working for a large company. But don't think for a second that this is a hobby. It's hard work. It's work that a lot of people rely upon, but most of them— including many companies that profit directly from my work— have never paid a dime for it. The fact of the matter is: the current system of open source funding (corporate development) is not particularly meritocratic or efficient. It doesn't maximize the ability of developers who have the best skillset for a particular project to contribute to that project, and a more efficient and meritocratic funding system (independent development) lacks the necessary cultural and business infrastructure to be viable for most developers and projects. I’ve spoken to some of the Tidelift people, and they’re definitely taking a step in the right direction, but they’re not currently set up to handle C/C++ projects, nor can they really provide a pass-through enterprise support channel. What I really need and want to see is a web site that allows companies to pay me for enterprise support on a sustaining or per-incident basis, basically providing all of the business infrastructure (boilerplate contracts, etc.— lawyer stuff) that someone in my position could never afford to provide. I think that would greatly increase the efficiency and responsiveness of my projects, since I wouldn't have to spend as much time hustling for hourly work, and it would hopefully make my overall business model more sustainable. Again, not complaining. I do things this way because it’s the most effective way for me to give back to the world. It was the only way that I could continue working on these projects after my former employer laid off my entire team and killed the product that the projects were feeding into. I want to support the online communities that I’ve built. I want to solve problems for those communities. However, it would also be really nice if I could do that without the constant threat of financial destitution. The reality is not "profit for us, sustainability for you." The reality is "profit for us, sustainability for you if you're really really lucky." So many companies rely on my code for their products, but they are either blissfully or willfully unaware of the fact that my projects could go away at any time. The only thing that's keeping them going is my ability to pay rent by developing them, and that is riding the very ragged edge right now.