Jeremy Kahn's Dev Blog

There's always a method to my madness.

Open Source Does Not Mean Free Labor

Everyone loves to get something for free. It’s just human. Additionally, people have a tendency to maximize the return on an investment as much as possible. When something appears to require no tangible resources from a consumer to produce, said consumer will try to get as much of the potential benefit as they can. Once a limit to the return on free investment is established, or a cost to obtaining the benefit is imposed, reasonable people will respect the rules of the transaction and either pay up or opt out of the transaction altogether.

None of this is new, it’s as old as currency itself. Open source is a relatively new concept, and is often misunderstood in a variety of ways. A common misconception is that open source is equivalent to free labor, that users are entitled to having feature requests implemented, and that open source developers owe them something. Essentially, open source has bred a new form of entitlement.

Open source is not same as free software

First, let’s clear up the most common misconception: “open source” is not a synonym for “free software.” Open source means that a software project is developed openly. Generally, this means that people who have a license to use a piece of software also have access to the source code. That typically means, at minimum, software license holders are free to modify the source code for their own means. Many open source licenses also entitle license holders to redistribute the source code, modified or unmodified, but this is not strictly required.

Free software, in the FSF sense of the term, refers to the rights of the users of the software. It’s “free” as in “freedom.” I suggest reading about the four freedoms on the FSF’s website for a more detailed explanation. Monetary price is orthogonal to the concept of free software. The only real problem with this is the confusion resulting from the terminology; it’s not immediately clear that free software can cost money. This immediately calls into question how anyone can make money with free software, but that is outside the scope of this blog post.

In any case, neither open source nor free software means anything with regards to the monetary value of software or obtaining a license for it. The former term describes a development model, and latter is a philosophy. The confusion behind both of these terms is primarily exacerbated by fact that the majority of both free and open source software is distributed at no cost. But, nobody is really complaining about that.

Why people work for free

Considering how much good free and open source software is available, it’s reasonable to wonder why so many talented developers would work for free. This is a question with many answers that vary from developer to developer. Personally, I create open source software for fun, to learn, and as a form of civic duty. Others have different motivations. Believe it or not, giving software away for free can be a key business strategy (again, the “how” of this is outside the scope of this blog post).

No matter how or why a person might spend their time developing software, it is challenging and takes time. Code that has no monetary cost is as hard and time-consuming to produce as code that costs millions of dollars. Additionally, maintaining and managing code requires the same mental and temporal resources regardless of how much money is made by the software or how much it is sold for. This is not immediately clear to end users. After all, when something is done well, it appears to have been done effortlessly.

In addition to the challenge of writing code in the first place, bug fixes and feature requests take time and effort. When you are paying for a license for software, or there is some form of an SLA, it is reasonable to expect a certain level of reciprocity and response time for bugs and feature requests filed against a project. That level of service is not necessarily appropriate to expect from software projects for which a developer has no stated or contractual obligation to provide. This is the case for many free and open source projects; you are using the software at your own risk. This is clearly stated in just about every open source license.

That being said, open source developers do not owe you a feature when you request it. They are not obligated to fix a bug, no matter how trivial or severe it may be. Especially for hobbyists like myself, free and open source software is created, maintained, and distributed based on goodwill. The open source development model empowers you as a user to make fixes and implement new features yourself. This is why open source software is better than closed source software. With open source software, you are free to solve your problems instead of artificially being limited to the whims of the developer. If the developer isn’t available to or interested in adding a feature you need, you are free to do it yourself. It’s comparable to the wiki model: Anyone can make changes. If you see an error or want to add or change content, you can do so yourself, rather than depend on the author or maintainer. This is critical for businesses that have deadlines.

Being a good open source citizen

Just because open source developers are not obligated to do much of anything to help you out doesn’t mean that they shouldn’t. Part of participating in a healthy community means that you help your neighbor when you can. Particularly with bug reports, developers should respond to and address issues quickly, clearly, and effectively. It’s not a matter of being professional, it’s a matter of being a decent human being. Feature requests are a little different, since what a user may want from a project may not be consistent with what the developer wants. Or, as is often the case with my own projects, a user wants a feature that I don’t have any interest in, therefore I have little motivation to implement it. In those cases, I do my best to provide a workaround. Additionally, assuming that the proposed feature does not negatively impact the project, I also invite the user to submit a Pull Request implementing the feature if they are willing to put in the time to do it themselves.

I take the idea of “Pull Requests welcome” seriously. It’s not a cop-out, it’s an invitation for users to contribute patches and improvements they need that I don’t. I want what’s best for my projects, but I don’t have time to build features for strangers on the internet that I don’t have sufficient domain knowledge or personal interest in. However, if someone is willing to contribute code, I will bend over backwards to review their code and get it merged in expediently and effectively. I feel that I owe them that much as a member of the developer community, not as a project maintainer.

Again, it’s similar to the wiki model. The beauty of it is that anyone can improve the product, and people who would prefer to stew about a project not meeting their needs only have themselves to blame. Open source projects belong to the entire community, not an individual or group. Open source projects are different from wikis in that there is a maintainer (or a group of maintainers) with ultimate power to accept or reject contributions. But, as they say, with great power comes great responsibility.

Open source is about building better software, faster

Open source is better because it empowers the developer community. If you don’t like how a developer manages a project, you have to power to fork and take the project in another direction. If the original maintainer is cooperative and willing to work with you and merge your changes into their fork, awesome. If not, then you are still able to make progress. As a user of software that you didn’t pay for, it’s important to recognize that open source developers have limited resources to implement features that are not relevant to them personally. Open source is not charity work. Open source is a software development model that enables the community to build what one person cannot.