A couple of people (Ayende Rahien, Jeremy Miller and David Hayden) started to wonder why Open Source Software (OSS) isn't that big in Microsoft/.NET land, why the 'big' open source projects in Microsoft/.NET land aren't really big compared to commercial competitors or are dying away without large piles of support from the community and Microsoft.
The reason is simple: Money. Microsoft land and now also .NET land has been and will be for some time to come a land where people are more or less thinking like "Oh, I need a control/tool for this, let's purchase a license of a commercial one I saw in an ad.". In the Java land and also in other areas, like of course the Linux world, people think in general a little different: If you need it, you either download a free, open source one, and if that one sucks, either improve it or write a better one.
Honestly: how many people do you, dear reader, personally know who has actively contributed to an open source project (and with contributed I mean: wrote a piece of code which is now in the main trunk)? If you came up with a number larger than 0, were these projects .NET projects or java/other language projects?
Why is this? There are two reasons. One of the reasons why most Microsoft oriented developers aren't really busy working on open source projects and thus the reason why there aren't that many well supported open source projects for Microsoft platforms is IMHO pretty simple: academics. For a lot of years now, students most of the time learn Java first, and a lot later perhaps a Microsoft oriented language. This leads to a lot of potential open source developers who have no real commercial interest: they just want to code.
The other reason why open source software is more available in other environments than the Microsoft environment is that not a lot of big companies pay a large group of developers to write open source .NET software, like IBM and Novell do for Linux and Java.
A lot of Microsoft oriented developers in general think badly about Java land or for example PHP land. But I think that's a bit sad: "What I don't see, isn't there!". The thing is, in for example Java land, a lot of stuff is simply free, open source, and of very high quality. If you for example check the number of .NET controls which render graphs for you and you check the number of high quality Java controls which do the same, you'll see that on Java there are a couple which are of high quality which are all free, and on .NET just commercial ones.
In Microsoft/.NET land, it's simply paying off to ask money (perhaps even a little) for your work, as most people simply find it normal you won't give away your work for free. In Java land that's much less the case. A large group of very high quality tools and controls is available for every Java developer out there for free, complete with sourcecode. In a sense the opposite mindset is in control there: it's in general normal to give away your work to the community.
The people I quoted at the beginning of this post wonder how this can be solved, but I think it's very hard to solve. The mindset of the Microsoft oriented developer is pretty hard to break, as this mindset has been there for decades already. The other reason, large companies who pay developers to write open source software is also hard to break, unless Microsoft does it themselves, but I really don't think they'll do that, on the contrary: they'll more move towards the opposite. The same for commercial control / tool vendors on .NET for example: why would they start giving their stuff away if there are people willing to pay for it? (Yes that's more or less a chicken-egg problem)
If this really has to be changed, Microsoft/.NET land needs an IBM which employes hundreds or even maybe thousands of developers working on open source software. You see, a lot of the successful open source software projects on Java, Linux (and Linux itself!), PHP etc. are all driven by companies: the developers who write the open source software have to live too, have to pay the bills, the morgage etc. It might sound weird, but to make a project a successful product, or even a product in the first place, takes a tremendous amount of effort, and thus time and the bigger a project gets, the more time it will eat up. If you really want to move forward on a normal speed, you need either a heck of a large group of developers (which creates overhead, and they all do a small part, which creates even more overhead), or you need developers with more time on their hands, namely time payed by the employer: professionals.
It's not strange IBM employes a lot of open source developers and sponsors a lot of others, for example by investments in Red Hat which also employes a lot of open source developers: these companies have a different business model: it's not their core business to sell a lot of licenses. Their core business is to sell support contracts. The more stuff there is to support, and of course, it's key that you control the material supported by employing the developers yourself, the more support contracts you'll sell.
Take for example Hibernate and its little .NET brother NHibernate. These platforms are designed and developed for the most part by JBoss, which is now a part of Red Hat. All main developers (except Ayende ) work for JBoss. This isn't strange, JBoss sells a lot of support contracts each year for Hibernate, so to be able to do so tomorrow and next year, they have to control the life support of these projects and thus fund the main developers by simply hiring them.
As I now live for a long time in Microsoft/.NET land I don't see this happen very quickly in Microsoft land: In Microsoft land, licenses are sold commercially, and support comes with these licenses. So unless Microsoft will sponsor large groups of developers or another large company will support a large group of developers to write open source software, it won't happen: software will stay closed, commercial and not free. Because there's no need to: people will find it normal to pay for a license, so why not ask money for that license?
(for the people who think I'm greedy: I just released a couple of megabytes of sourcecode last week. Though I didn't write that in my spare time. I wrote that during work hours, because it benefits my company and my company's other work. We think that's OK, as everybody benefits, and I also think most of the OSS users think it's OK as otherwise they also should quit using most OSS, as most of it is written by developers employed by (large) companies who work on it full time).