Why would someone use his own time to develop an open-source project for free and without compensation?
For small projects, reasons might be "hobby", "getting some experience", "fame", "joy" etc. but that's not how the big open source projects like Mozilla, OpenOffice, Linux work.
Why did Sun buy StarDivision and made StarOffice an open source program (called OpenOffice.org)? Why does Mozilla create a top-notch browser and give it away as open source? Why are there people creating Linux, writing drivers and whatnot, and make it available to everyone for free? Why does Microsoft create opensource drivers for Linux so it can run better in MS's virtualisation?
Because it makes some business sense for them. They make money that way, or at least plan to.
In some cases, the dominance of MS's products, i.e. Windows, Office, Internet Explorer, was the reason the create a competing product, so it would be harder for MS to use their desktop dominance to conquer other domains, i.e. servers, internet services, too. This explains, to some extend, OpenOffice.org and Mozilla.
In other cases, open source software is meant to drive sales of hardware, other software or services. Open Source drivers obviously help to sell hardware components to Linux users. RedHat sells support for their Linux distro, and they sell the fact that their Linux is genuine RedHat. Other products, e.g. Oracle, are certified for use on Redhat, but not on CentOS, even though it probably runs just-as-well. Server hardware is certified for Redhat, even though other linux distros probably run just-as-well. Big-money-clients don't care about the price, they want the certificate.
Some companies, e.g. Google, sponsor many open source projects, because it helps their business. They don't do it for altruism. They want a free internet, a pervasive internet, a widespread internet, where people use Google's services so Google generates revenue.
Why does everything have to be about money? How do you think wikipedia works? Nobody gets paid to put content on the Wikipedia, yet it is arguable the best encyclopaedia around.
Let's talk money.
Open source projects, as any projects, are written out of neccessity. You have a problem X and you write library Y or application Z to solve it, because
- There are not tools, that solve it or
- They are not good enough or
- They are not worth the money (writing your own tool probably "costs" more, but in the end you have exactly what you want and you can modify it as you want, so the cost amortized quickly).
So now you spent a few evenings and weekends (and/or paid time) writing the next hot thing until you reach a point, where the baby starts walking. You now have to chose between:
- Commercial distribution: this involves marketing, legal stuff, customer support, doing all the fixes yourself, getting tons of incredibly stupid feature requests and less than useless feedback. In the end you get what's left of the money once all the parasites get their piece of the cake. And probably noone will like your product because it costs way too much.
- Open source distribution: this involves ... uhm ... pushing the code to a public repository and making an announcement or two on relevant mailing lists. You will get acknowledgement or even some fame. You will get a user base, that provides constructive feedback, helpful bugreports and possibly even patches. You get some donations or get invited to some conferences or get paid to implement features a or b. And you produced a lot of value, albeit nobody paid for anything. And the next time you or your company needs something, chances are good, you'll get it and you'll get it for free.
Open source works, because it is a community. Because it is mutual. You do not get money by writing open source code. You get money by consuming open source code. So why do you write open source code? To give something back.
This is a hobby for some people; believe it or not.
Gillette will be happy to give you a free razor and sell you the blades.
Some people make money in other ways and want to give back to the community. I'm sure Linus Torvalds has made plenty of money 'off' of Linux without actually selling the code and probably turns money away.
Not all open source software was intended or designed for any user to just download, install and use, so you may end up spending more of your time depending on skill level and most people value their time.
There are several reasons to develop open source applications. In general, the more foundational the need is the better suited to open source it is. For example, ASP.NET MVC, Ruby on Rails, Django, PHP, and other web frameworks are all open source. That's right, even Microsoft has a fairly well known open source project. The need for a well organized web framework that lets you focus on building a web application is larger than the specific web application you are building.
Many people (myself included) contribute to open source because we use these frameworks in our day job. It's self preservation in a sense. If I don't have to keep reinventing the wheel just because I am at a new company, why should I?
As to making money with open source, that is a tricky subject. Most open source licenses allow you to sell your software. The specific license governs whether you need to share your modifications (BSD/ASL style licenses do not while GPL style licenses do in most cases), or provide attribution ot the original project.
The cases that I see work most often are:
- Selling support. MySQL, Spring, and a few others follow this model and do well with it.
- Selling convenience. RedHat, SuSE, and other Linux distros package a group of applications together for the user's convenience.
- Selling appliances. In short this is the way companies like Google, Nokia, Linksys, etc. make money packaging proprietary and open source products together and keeping them safe. It's probably the most lucrative option.
- Selling T-Shirts/Mugs/etc. Doesn't bring in a whole lot, but better than nothing.
Bottom line is that the source code may be open, but there are always people who need more than the raw code. I'm sure there are more ways to make money off of open source, you just have to be creative.
This question is not specific to open source, because you can write code, for free, and never release it to the public (although that would be rare because of all the known benefits of sharing code).
The real question is, why do anything for free? The answer is, because it makes you happy.
Personally, I love to learn, and I learn more working on open source than working on my paying job. Because learning improves my skills it also helps me to get better paying jobs.
There's a variety of reasons.
Some people get paid for writing it, because their employer thinks it worthwhile (and there's plenty of potential reasons for that). Some people start companies based on F/OSS because they can make money from it.
Some people use F/OSS and want to give back.
Some people treat it as a reputation game, like academic research or answering questions here.
Some people want a certain piece of software for their own purposes, and just release it because what they want is to use it, and they can sometimes get useful suggestions if other people can use it also.
Besides money, of course there is fame -- and then their is learning how something works by building it and constructing it yourself. Gaining valuable and marketable experience outside your normal work life. I think Ayende is a good example of this.
As an aside -- generally I've found some of the best, most intuitive projects and frameworks I've worked with to be open source -- I think that people who are truly passionate enough to spend their free time building a project up from scratch or simply maintaining it produce a better product then people who are just grouped together from 9-5.
It's not only for making money but more often for saving money. The vast library of good OSS libraries and tools make it a natural choice.
In same cases (GPL and friends) that means you're legally bound to make the resultant code OSS too. In other cases, it's just a personal choice, but you still get to receive other rewards (mostly some recognition, sometimes the chance of selling support, sometimes (happened to me) a good reference to show to potential employers)
One more than one occasion, I've contributed a patch to an open source project simply because I wanted to make sure that feature/fix would be included in future versions.
It doesn't seem like a stretch that someone would release something as open source simply because it offered the possibility that others would use it and keep it current.
I worked with one person who wrote code that (IIRC) validated CUSIPs. He released it on the net. Years later he downloaded a CUSIP lib for a different system. He was surprised to see a reference to the code he wrote years before.
The outfit I work for, started with a public domain code (written by the business owner) [Open source was years from being invented]. His original business model was to be a consultant on using it (use is not straightforward, and many hundreds of people make a living consulting). Of course the demands for feature enhancements were so great it became a proprietary commercial code(s)*. But, still most of the salaries earned are in rapidly diminishing numbers up the scale: (1) Users doing their jobs, (2) Consultants to group (1), finally (3) Developers/testers etc.
I use the plural, because several other proprietary codes sprang from the same public domain source code release.
You may find yourself in the following position:
- you need good software to do things for you
- you find you need much more control over how the software works than the configuration options of available offerings provide
- you have access to source code for software that almost meets your needs, and the expertise to modify it to exert the control you need
- you only need to make small modifications for your purposes, but you want to benefit from many more modifications made by others, and the development future of the software looks bright
- your modifications are not isolated and substantial enough to consider them to be assets worth protecting or selling, or the added overhead in doing so would outweigh the benefits
- you know your modifications can benefit many others with needs similar to yours; getting them incorporated into the main development line will save you effort, compared to maintaining your own forked copy
In this situation, participating in an open-source project is a perfectly sensible business decision.
It can be pretty good advertising, too.