OSS & Duplication of effort

time to read 4 min | 662 words

David Hayden responded to my and Jeremy Miller posts about OSS in Microsoft world. He raised the following issue:

One of the things that I have noticed in the Microsoft OSS Community ( and this may not be unique to this community ) is the duplication of effort. This duplication of effort is no doubt slowing the overall progress of all projects, but it also makes it dang confusing and sometimes utterly impossible to know what niche a project fulfills, the amount of community support around it, how it overlaps and differentiates itself with similar projects, etc.

He lists several competing OSS projects:

  • NUnit or MBUnit?
  • StructureMap, Spring.NET, or Windsor?
  • NHibernate, Gentle, IBatis, Retina?
  • dasBlog or SubText?
  • log4net or NLog?

I don't see an issue here. The OSS community isn't a well coordinated place by defination. Each of the above solve its developers problems best, as a user of those projects, all you need is to decide what you want to do with those.

Take NUnit vs MbUnit, MbUnit has a lot more extentions, [RowTest] is a good example. NUnit was there first, and it have excellent tool support.

In the IoC world, Spring.NET is for those who doesn't have enough XML in their life :-) and want to control every bit & piece of the system explicitly. Windsor take a whole different tack and StructureMap was there first (sorry, never looked at it closely enough to say what its advantages are).

If you want to write your own SQL, and have the OR/M map from the data reader to objects and vice versa, iBatis is probably the thing for you. If you want to give up SQL entirely, NHibernate will fit the bill much better.

dasBlog is a blog engine that doesn't require a database backend, which was quite important to me when I first built this blog. SubText has a database backend, and it means that people can do all sorts of nifty things with it that are harder with dasBlog.

log4net vs NLog, I think you can see the pattern.... (and I never used NLog, so can't comment, except that the config looks simpler).

They are advantages to doing things twice, in different ways, for one thing, you get several solutions that you can choose from. The other interesting thing is that because they are OSS projects, it is not a walled garden where one project has built a feature that isn't in any of the other projcets, and they compete on that.  Take dasBlog and SubText as a good public example, they are borrowing each other code fairly often. This is a very good thing, in my opinion.

There isn't an issue with having competing projects, quite the contrary, having several projects on the same subject, often solving similiar problems in wildly different ways, gives the community at large a whole lot more to choose from. This wish for a single project per subject, one to rule them all, is not healthy in the long term, as I see it. I don't lose anything from having another OR/M framework on .Net, even though I am a heavy contributer/user for NHibernate, for instnace.

This is not a sum zero game.