The Problem of Open Source in the Microsoft World

I hope that this post will reach more than the usual readers of this blog, so let me introduce my open source resume:

I am an active member (committer) of two big open source projects, NHibernate and Castle, own an open source project, Rhino Mocks (which is a part of Rhino Tools, a bigger OSS effort), and a semi-active member of an open source lagnauge on .Net, Boo. I am a heavy user of open source tools (Subversion, trac, log4net, nunit, nantcuyahoga, dasblog, to mention just a few).  I have been actively involved in the open source community in the .Net world for over three years.

I am not a zealot , you will not find me waving the GPL flag and stroming Microsoft HQ to liberate the captive code there. I do believe in open source software, and in the value of a community around the basic blocks of software.

The open source community in .Net is big, but it is only a fraction of the size of the open source community in other environments (Java, for instnace), compared to the number of users. This issue has been raised several times, it is certainly not a new one. Enough time has passed since .Net 1.0 was released to make the old excuses about ".Net is new", or "the Java guys has a lot more time to experiment with stuff" to lose any strength.

This disparity can be explained by looking at the basic facts of the .Net community. .Net has a central vendor (Mono is marginal at best), Microsoft. This puts Microsoft in a position where they have the ear of every .Net developer, team lead and architect (to say nothing about PHBs). And Microsoft isn't doing anything to foster a healthy OSS community around .Net.

What do I mean by not doing anything to help build an OSS community? Let us look at the Java land, and take a couple of OSS projects there, shall we? JUnit and Ant are two good examples, both of those are examples of projects built by the community, to solve problems that their developers were facing. What is the current status of those projects in the Java land? Well, they have excellent tool support by all the major IDEs, they are accepted as the way you do things in Java. This is a common theme in the Java world, actually. Hibernate and EJB 3.0 are another example, and I am pretty sure that I can carry on for quite a while.

Due to the distributed nature of Java (no single source, even though Sun can dictate stuff), the libraries and tools are competing on merit, and usually the best tools (best may also mean the first, btw) are accepted as the basis from which further work is done.

In .Net, however, the situation is far different. Let us take the same example  in .Net, we have both NUnit and NAnt in the .Net world. In 2005, Microsoft came with Visual Studio 2005, which included similar technologies to both NUnit and NAnt.

The answer to NAnt was MsBuild, which is based on the same principals of NAnt (xml based, declarative, extendable, etc). Now, to be fair to Microsoft, NAnt is GPL'ed, so technically they can't use it for Visual Studio. I am sure that they could have work something with the developers.

The answer to NUnit was MS Test, which has the same model as NUnit (attributes based, etc). It has incompatible syntax with NUnit (or any other .Net Unit Testing framework), and is severly limited compared to NUnit. In this case, NUnit has a commercial friendly license, so Microsoft could certainly have used it.

Now, a developer on the .Net platform has to choose between NUnit vs. MS Test, NAnt vs. MsBuild, etc. Microsoft's tools tend to come with a lot more tools, including fancy UI, wizards, etc. The problem is that when you need to make a change in those tools, you have a lot of wieght to move. Take for example the Abstract Test Case which MS Test doesn't support. At the core, it is an issue of removing BindingFlags.DeclaredOnly from the code that selects the test methods to execute. The problem is that Microsoft can't do that, they need to change the UI, the wizards, etc to be able to support this. Suddenly a very easy change turns into a big undertaking, with implications that can cost quite a bit of money and time.

You can see this pattern repeated over and over if you just take a look at the OSS tools that Microsoft is trying to replace with its own. Some quick examples from the top of my head:

  • NDoc and Sandcastle (again, NDoc is GPL'ed, again, I am pretty sure that they could have talked with the developer to change the license).
  • Log4net and the Logging Application Block.
  • Castle Windsor/Spring.Net and Object Builder.

I get the sense that a lot of time, a functionality that already exists in the open (often with license that allows commercial use) is being passed on because it is not from Microsoft. The only OSS Project that I know of that is going to be integrated into the toolset is the WIX installer, which is a Microsoft project.

What I would have liked to see is Microsoft working with the OSS community to provide better tools for developers based on the best-of-breed tools that already exists. There is nothing more annoying than having to learn (again) how to write a build script to automate the deployment of a project, but in MsBuild instead of NAnt. Or remembering to put [TestClass] instead of [TestFixture].

I do not want new products from Microsoft that does the same thing as existing OSS products. They don't have the same level of maturity as an OSS project that is several years old, and I hate the answer "Well, it may not do [critical feature that I need] like [oss does], but this is Microsoft, and it will definately do it in the next version." (which I got for several times, for several different products, from Microsoft people / consultants).

I think that saying this is tantamount to saying: "We built an inferior product, missing critical features that you need. We inversted in [better UI / integration with Office / etc] and didn't get to this. We are Microsoft, so you will use our stuff anyway, and maybe we will fix it next version". I want to see official Microsoft people recommending the use of OSS products like NHibernate, instead of saying "do it manually, or wait a year and do it in LINQ". There are a good number of projects that sprung up in the .Net ecosystem to fill in voids in what Microsoft is offerring. Duplicating this functionality is a waste of energy. Both for Microsoft and the community.

Microsoft should leverage the successful open source projects to make life easier for developers. The Java model is a very compelling one. Let us take leave of ours senses for a moment and assume that Microsoft has decided that it wants to add support for NHibernate in Visual Studio. What would happen? Better documentations, a lot more samples, probably better, easier tools. The core functionality would remain, and a whole new fucntionality would be added. Everyone would benefit (well, maybe except the DLinq team :-) ).

Returning to the real world, the OSS community in .Net biggest weakness is that the OSS community doesn't include Microsoft itself. And no, CodePlex doesn't really count. CodePlex doesn't bring Microsoft and OSS togetherer in the sense that it is not a place from which things go into the CLR or into the standard tool set. To take a simple example, the Mvp.Xml project. It contains functionality that is essential to heavy users of XML on .Net (of which I am not, btw). Was there any code migrated from Mvp.Xml to System.Xml? Would there be any such code?

As it stands today, I don't think that this is likely. I would like to change this attidute from Microsoft.

Some interesting links on this subject are from a discussion a few months back about whatever microsoft should financially support OSS projects (link 1, link 2, link 3).

Print | posted on Saturday, December 09, 2006 2:06 AM

Feedback


Gravatar

#  12/9/2006 2:26 AM hammett

IMHO this is only going to change when someone (read big company with $$ money) invest on an IDE to compete with VS.Net and that provide that niceness that we are hungry for.

I do think that Eclipse would be the perfect base for such support. JetBrains could also take their chance (although the latest R# versions were very disappointing).

But the bottom line is: it's up to us - community - to change that.


Gravatar

#  12/9/2006 2:27 AM hammett

Btw, Sun does not dictate things, they have the JCP.


Gravatar

#  12/9/2006 2:57 AM Ayende Rahien

The only candidate that I can think of to provide an alternative IDE is JetBrains.
Eclipse is a potentail candidate, the problem is that is has a very different model than VS.Net, which is going to be difficult.

Sun is the nearest thing that Java has for Microsoft. I am aware that they can't put down the law, but they are the most influencal ones in the JCP. Of course, this is from general knowledge, and I am likely to be mistaken


Gravatar

#  12/9/2006 6:21 AM mnichols AT cei-az.com (Mike Nichols)

This is the most well-written explanation of the dillemas which are caused by MS lack of support for OSS. The contributions folks like you and the NHibernate team and Castle team have made has actually saved my job ! I'd definitely like to see MS embrace the hard work folks who are in the trenches have invested rather than continually operate with the NIH syndrome.


Gravatar

  12/9/2006 10:09 PM Steve

I wasn't aware of all that was available in the .net world until I talked to a java guy awhile back and he was talking about 'spring' and 'hibernate', etc... It sparked my curiousity and I found out about NHibernate and Spring - then Castle AR and Windsor, etc... and was amazed at the technology. It's made me less 'microsoft' oriented and more 'best practice' oriented. I'm glad for people that devote this time, otherwise these projects would just die out. At times I've wondered if I'd be better off in a java environment, but thank goodness for all these OSS .net projects.


Gravatar

  12/9/2006 10:46 PM DonD

It's not just NIH (though they have the biggest NIH company of any I've seen), but a general business sense that they must either buy, compete, or ignore every technology related to them. It doesn't help that no one in MS uses OSS (partly because they're generally forbidden to), and I hope that messages like this can reach the tools teams and help them realize the usefulness and pervasiveness of what's out there. The enterprise blocks, for example, give a feeling of just meeting somebody's marketing feature checklist, since they are unused and virtually unusable to practically anyone. Still, even if they really wanted to, the business has to allow them to see the ecosystem out there, even OSS, as being a good thing worth supporting.


#  12/10/2006 2:44 PM Simone Busoli

Ayende, you are absolutely right. That is the attitude I would like to change too in Microsoft. We don't need new tool from MS which do the same things of OS tools. It goes without saying that this attitude is furthermore highly deleterious for OS developers, which see their tools left behind by developers in favor of Microsoft tools. NDoc is the example.


#  12/10/2006 5:59 PM Oran

For the most part, I agree. I am also a fairly heavy user of the same OSS .NET stack and am peeved that MIcrosoft insists on their own poor imitations of the same stack. But here's a post from another blog I follow that has an interesting counter-example in the Java camp: http://blog.unto.net/programming/two-weekend-days/


Gravatar

#  12/11/2006 12:40 AM Paul Mendoza

I've worked on some projects that are over at CodePlex and my realization is that the .NET community that does open source projects isn't large. It's not one of those exciting languages and I think a lot of hackers are using non-Windows machines which eliminates many potential projects for .NET.


Gravatar

#  12/11/2006 5:10 AM Luke Melia

WiX (http://wix.sourceforge.net/) is an interesting case study here. It's an XML-based toolset for making Windows installers. It's one of the first (if not the first) open source projects out of Microsoft. We use it extensively and it's pretty good -- I like it because it integrates easily with NAnt. Contributing code to the project actually involves signing (snail) mailing a copyright assignment agreement to Microsoft. (See http://blogs.msdn.com/robmen/archive/2004/04/14/112970.aspx).

Speaking broadly, OSS is largely a competitor for Microsoft -- think Windows vs. Linux and Office vs. free office suites. I think this competitive worldview filters down to areas where supporting OSS wouldn't take a dime away from M$ -- most ancillary developer tools and frameworks.

I'd love Microsoft to change their tune on this, and indeed to release source for the .NET librarie, but I'm not holding my breath.


Gravatar

#  12/11/2006 6:46 AM Ayende Rahien

@Paul,
I disagree with you completely. There are a wide array of OSS projects in .Net, and they are quite exciting. The problem is with their adoption, not with their creation.


Gravatar

#  12/11/2006 6:52 AM Ayende Rahien

@Luke,
The problem with WiX is that is an MS controlled project. This means that they don't have a lot of issues with using it. The lead of this project is getting paid from MS. I don't even want the source for .Net, I can get Rotor, and reflector is quite enough.
What I want is recognition from Microsoft, and that they would avoid building half-baked solution where there are good OSS tools on the market already. If they can make a better effort, wonderful, but so far I don't see any MS project that is head and shoulders above the OSS projects in the same category.
What is worst, they are using the same "by version 3.0 we will be better" appraoch, the problem is that they want developers to start using this stuff now! I don't see a reason to use a product that doesn't have all the feature that I need, but because it is Microsoft that produce it, a lot of people take it on blindly, and I end up having to either work with it or work around it.
Both are extremely painful.


#  12/11/2006 7:37 AM Simone Busoli

[quote]
What is worst, they are using the same "by version 3.0 we will be better" appraoch, the problem is that they want developers to start using this stuff now! I don't see a reason to use a product that doesn't have all the feature that I need...
[/quote]

We shouldn't use Visual Studio either then ;)


Gravatar

#  12/11/2006 10:01 AM Ayende Rahien

@Simone,
What exactly gave you the impression that I like using VS.Net ??
I am using it because there isn't another choice. The other IDEs are even worse when it comes to stability / features.
VS.Net is the best IDE for .Net, that doesn't make it a good IDE, IMO


Gravatar

#  12/11/2006 11:23 AM hammett

Yup, when there's no competitor, it's easy to "win"


#  12/11/2006 2:01 PM Simone Busoli

I agree with you Ayende, I was just kidding. If they only worked on bug fixes instead of releasing new versions even before releasing a service pack for the previous one...


Gravatar

  12/11/2006 5:49 PM Antao

I've been using Microsoft tools for a long time and .Net since Beta1. I really love Visual Studio and, especially, .NET.
I've recently implemented the development procedures at our company and, besides VS.NET, I don't use a single Microsoft tool.
We are using Subversion, Trac, Cruise Control .NET, NAnt, MbUnit, NCover, NDoc, FxCop and many open source .NET libraries.
Thanks a lot to all the guys involved on this projects. Their tools are superb and life saving...
Actually, I've been thinking of proposing to management a donation program to these projects.


Gravatar

  12/11/2006 9:57 PM Jonathan Allen

The reason nDoc failed has nothing to do with Microsoft's SandCastle. It failed because the person working on it wasn't getting enough financial or technical support to justify the time he was spending on it.


Gravatar

#  12/11/2006 10:36 PM Alex James

I thought I should join the conversation... I mean it is a good one.


  12/12/2006 9:28 AM Massimo Iacolare

Do you know x-develop from omnicore (http://www.omnicore.com/xdevelop.htm)? It seems a good IDE although I've never used it. It has on-the-fly error checking, refactoring, unit test support and many others features. Maybe it can be a starting point...


Gravatar

#  12/13/2006 7:23 AM dudu

The Chinese .NET Community talk about this in the http://www.cnblogs.com/dudu/archive/2006/12/12/589031.html .


#  12/14/2006 9:31 AM Pascal Lindelauf

I agree with your excellent post, Ayende! It immensly frustrating how Microsoft actively puts the brakes on innovations in .NET development. I think the best innovations on the .NET platform the last couple of years have mainly come from the OS community, which in turn have used the OS Java community as its main source of inspiration. It would do the whole .NET development community so much good if Microsoft would endorse all these great innovations so much more instead of trying to do everything themselves, but only at half the speed and half the quality.

Maybe we should take the extreme route and completely cut ourselves loose from Microsoft: could anyone get us a decent .NET plugin for Eclipse!?!


Gravatar

#  12/14/2006 5:40 PM Bryan Kirschner (MS)

Ayende,

>I hope that this post will reach more than the usual readers of this blog

I guess this worked - I hadn't seen your blog before. You spurred a bunch of questions I'd like to ask but I figure I'll cut right to the chase: if the community of .NET OSS developers feels like we don't care, I'm doing a bad job (--I work in the MS OSS Lab, http://port25.technet.com, and lots of folks here think the MS OSS ecosystem ROCKS, not to mention is a great asset to MS).

Here's the challenge I'll pose: I haven't found a 'magic bullet' for how companies "support OSS". In fact, all of our legwork to date has made "how vendors support OSS" look pretty depressing to me ; Harvard B School just published a paper (link - http://www.hbs.edu/research/facpubs/workingpapers/papers0607.html#07-028; OSS guy Matt Asay blogged about it (http://asay.blogspot.com/2006/12/open-source-corporate-investments-very.html) that basically says financial support of OSS has been (the way I read it) self-interested outsourcing of some dev & exploiting projects for commercial profit.

That's just business--but my gut is that isn't what'll make our communities feel great...I hope there can be more interesting relationship than that (--I think back to before I joined MS, when I was a "partner of 1" and the community of developers was one of the coolest things about using MS technologies. Tat was pre- .NET and pre- the popularization of OSS, so today things should only be *better*...How do we get that mojo back?)

What do you think? I want to hear more--here, on my blog, in mail-- but selfishly, because I care a lot about this topic, I'm going to point you to the below : if you want to raise the visibility of the .NET OSS community, pkease use this killer opportunity below- (--I don't think questions I submit to the folks I work with carry much weight! :) )

"...the ball is in your court to pose whatever Linux, Windows or OSS-related question that’s buzzing in your brain...We’ll take the top 7-10 questions and get Sam, Kishi, Bryan, Hank and Anandeep all together right after the New Year, and tape a roundtable discussion of the Q&A session. We’ll post the resulting conversation on Port 25, in totality, afterwards. If it’s a productive discussion, we can schedule more – or even think about a live Town Hall chat with more folks from across Microsoft. The tone of the conversation is really up to you."

http://port25.technet.com/archive/2006/12/13/festivus-for-the-rest-of-us.aspx


Gravatar

#  12/15/2006 3:55 AM Marcos Meli

I think that another point is the old Application Blocs, now called Enterprise Library..

I test it a lot of Applications Blocks and my conclusion was that all them were OVER DESIGNED, not bad, simply too complex to use, all with XML configuration and a lot of things that I personally don't like.

I was always thinking what makes Enterprise Library better for Logging that Log4Net for example, and the answer is, if Log4Net is enough for you so use it, is easy to use, easy to found info in the net about how to use it, you can learn from the code, and a lot of other advantages.

So this is other point to what Ayende said, M$ is always doing their version of the things, I’m happy to avoid MS´s new technologies of moment some examples are Remoting, WS1, Typed Datasets, and so on… and now WPF, WWF and the most utopia SOA. The problem is not that the technology is bad the problem is that M$ want to impose it at all cost saying in all the training that you must use WebServices as Middleware to get info for the Db and a lot of other things that in the real world ARE COMPLETELY ridiculous, the same for SOA now, all must be service oriented, can you tell me what is “ALL” in the enterprise are the Client-Server architecture is the most solid and proved architecture I believe that is good to provide some plugs via WS but not use SOA for CRUD operations !!!!

I prefer to found an Open Source alternative or create some Code Smith templates to do the job because maybe in the next version MS would trim from VS.

Cheers
Sorry for my English =(


# mrkeuvou 3/8/2007 3:19 PM mrkeuvou

mrkeuvou


# xbiskgbi 3/8/2007 3:20 PM xbiskgbi

xbiskgbi


# Generic xanax 2 mg no prescription. 3/12/2007 4:28 PM Generic xanax 2 mg no prescription.

Generic xanax 2 mg no prescription.


# A song for the lovers » About me and .NET, Atom.NET and stuff like that 4/7/2007 2:43 AM

A song for the lovers » About me and .NET, Atom.NET and stuff like that

Comments have been closed on this topic.