Sunday, June 1, 2008

Do not offer money!

Money and open source, always an interesting combination. But how do we, simple developers (with no ambition but to make beautiful stuff and live from it), deal with this? Let me offer you my opinion.

Lets start with a real example on what you should not do. Here is a quote from an e-mail that was sent on the user list of well respected project xyz (which it is, is not important):


I was wondering how I could make a contribution for xyz. I'm not talking about a code contribution but rather a small money contribution. I have got a lot of help here on this forum and in fact I don't think I have ever experienced this kind of help elsewhere!

Thanks to all that have helped and especially core xyz coders.

The author obviously has good intentions, so how can this be so disastrously wrong? Suppose you are celebrating Christmas (or any other traditional family event) at your mother-in-law´s house. She cooked really well and everything tasted just wonderfully. You stand up and say, "Mother, this was excellent. This must have been worth at least 400 euros. Here, this is for you." and you hand here 4 fresh 100 euros bills. You will probably understand that your mother-in-law will not be happy, and in fact she will likely not forget this for a long time. Will she have the same pleasure in cooking for you next year? I think not.

So what is the problem? As Dan Ariely, a professor of behavioral economics wrote in his excellent book Predictably Irrational (I read the Dutch translation "Waarom we altijd tijd te kort komen") there are 2 sets of norms, market norms and social norms. Market norms regulate how we interact with each other when money is involved. Social norms regulate all other interactions. So eating at a restaurant will fall under the market norms, eating at your mother-in-low falls under the social norms. It is both about eating, but if you think about it, there are vast differences in what you expect, how you deal with bad food, etc.

The coders of xyz do all of their hard work in their free time. They are not getting paid, they do this purely out of love for what they are creating, and perhaps because of the idea that it is useful to others, and perhaps because of the respect they will receive. Any social interaction therefore falls under the social norms. Now if you start to offer money, you will move the social interactions to market norms. Luckily the core coders of project xyz are wise and responded with a request to donate to a charity project. But suppose they accepted the money. Now why would they do their best next time when no money is involved? They might as well go drinking beer with friends. Or worse, why would non core contributors do their best if they do not get paid? If you know somebody else is getting paid for the same task, even if it only takes 1 minute, why would you spend any brain power on it?

What is even worse, after switching to market norms, it takes a lot of time before the social norms are reinstated. Here is quote from Eric Daugherty, author of the Java Email Server, on JES version 2.0:

I started down this path with passion and drive. After I'd completed the SMTP (I think) portion of the code base, I was contacted by Andrew Oliver about my interest in working on a JBoss mail server. He was working on a new project to build an enterprise class mail (and calender, etc) server build on JBoss (where he was employed at the time). This project, JBossMailServer at the time, seemed to eclipse what I was attempting, and given my already slowing momentum on the 2.0 branch, pretty much brought it to a screeching halt. I had a bit of interest in working on the JBoss version, but in truth some of the motivation for the projects that I work on is ego. Working on a project that wasn't 'mine' didn't quite have the same appeal, even if it was JBoss (remember, this was 4 years ago).

Apparently JBoss had found someone interested in the server, as they approached me with an offer to pay me for the task of completing the SMTP (or POP, I don't recall) functionality. Since I was a pretty easy task for me (I'd done it once already), and hey, they were paying me, I jumped on board. I worked through the deliverable they wanted and earned a little spending money.

However, a funny thing happened. Once I'd worked for pay on the project, it was really hard to get excited about working for free. Combine this with the lack of real ego payoff, and I drifted away from the project.

So when the previous state is restored (the money is gone), the market norms stay for quite a while. This is proven by Dan and colleagues and this is also Eric´s own observation. A troubling conclusion: by offering money for free services the result is less services.

Suppose you care for the success of an open source project, what can you do? My answer is simple: contribute by writing documentation, by answering questions, by writing patches, provide hosting and otherwise interact according to the social norms. If you are not able to do any of these things, it is better to stay out!

Thanks to Dan Ariely for his research. The Christmas dining example is from his book.


  1. Obviously, there is some truth in this story. On the other hand, there are some open source projects which are helped with money donations. But they are not used for paying developers, but purely for maintaining the project, such as hosting or buying equipment supporting the development (obviously, this latter mainly holds for projects which are hardware related, such as phone software). Therefore, the advise to stay out a project when the only thing you have to offer is money, is not a general rule.

  2. Martin, you are right. The point is indeed that no money ends up at a person. 'Gifts' should either be goods, services, or money to allow the project to buy these goods or services.

  3. What are you smoking, I've been doing open source for money since day 1 and have always quickly lost interest where there wasn't money involved. My first project ( made money, JBoss made money and I very well think my last project will make money. I'm a professional software developer and I don't work on business software just for fun. I like what I do, but I love my little boy and family and living in a nice house more. I do open source because it is how I prefer to work and because debugging a large project without all of the sourcecode is just too painful.

  4. Wauw. Amazing to be contradicted like this. Nice. However, I have the impression you are in the minority. But it might be just what I encountered. (BTW, I never liked JBoss for various small reasons.)

    How did you make money doing open source?

  5. Name a major open source project, and I will point out who pays most of the major contributors. From Linus on down. POI was an effort to land local consulting business, I was contacted to do things related to it and paid to do them. Many of the features I added to it were paid for. The JBoss case is more well documented.

    Michael Tieman (Cygnus/Red Hat/president of the Open Source Initiative) has said that "most people working in open source do so because they're paid to" or something very close to that effect.

    There are of course many more hobby projects with as many developers as users, but I can't think of a major successful project where most of the core developers aren't paid for their work. Linux Kernel, BSD, Apache, Red Hat Linux, Ubuntu Linux, MySQL, Drupal, Eclipse...nope all have core development teams that are paid.

  6. Andrew, if your point is "you can make money with open source" I agree completely. Indeed, many people earn a salary somewhere while writing open source code. However, not so many get donations for providing documentation and support. The latter had the focus of my article.

    So to be more precise, the advice of the article is: if you run into a project that is being run by volunteers and that offer support services for free you should not offer money as you will corrupt their motivation.

    Just to prove such projects exist and can be large too, I will name a few I know of: Ruy on Rails, Wicket, PostgreSQL and Log4J. There are many more, but not many just keep on running.