Blasting open source
In the latest installment of the Elegant Code Cast, David Starr talks with Darrel Carver, a local .NET developer and member of the Elegant Code group. I found the talk quite fascinating, but do want to pick on Darrel for one of his comments.
Repeatedly through the podcast, Darrel mentioned that open source is guilty of continuing the re-invention of software, simply because someone may not like the project owner, or that just one additional feature is needed. After all, as Darrel puts it, why do we need 10 IOC containers? While this may certainly be true, I do not think that it was fair for Darrel to state that this was purely a trait of open source.
Microsoft itself is guilty of continuing and enabling this behavior. Rather than reach to the open source community and leverage the great tools that are already there, Microsoft insists on rebranding tools that have been created in the open source space (NAnt/MSBuild, MonoRail/System.Web.MVC, NUnit/MSUnit, NDoc/Sandcastle, etc). They do this because it is far easier to have enterprises adopt a toolset when it is supported by a company like Microsoft. What I fail to see is why enterprises that use Java do not have the same problems. I also fail to see how the open source community can be faulted without mention of the identical behavior from the platform vendor. After all, had we been blindly following the tools given to us by a vendor, many of us would have never even been exposed to IOC, xUnit or many of the other principles that ALT.NET developers hold dear.
The primary difference is that the majority of different open source projects add their own value in ways. Take for example StructureMap vs Castle Windsor. The essence of both is the same; they are both IOC containers. StructureMap has been around a bit longer, but Castle Windsor has many more features, including interceptors, facilities and such. These diverse feature sets are where the value of multiple projects comes to bear. However, simply re-branding the best of breed projects does nothing to add value.
It is these re-branded projects that make Darrel’s point: many projects that do not add value do much to clutter up the developers toolbox and should be eliminated.
I just relistened to this podcast and it does come across as my accusing open source of this alone. You are right although that is not what I meant. It is a problem acrosss the industry. How many different rdbms do we really need. If you had one that implemented the ansi standard would that be enough?
The elegantcode web site got 2600 page hits last month by 5 different web browsers. Can you imagine the amount of code it takes to accomidate this? Two or 3 I can see to promote some competition, but 5? This was from 74 different countries so I guess I can be happy it was only 5.
How many different source code control systems are out there? How many different make systems? Admittedly there are some cool features in SVN over CVS but come on.
Actually I cut open source systems the least slack on some of this. After all we do have the source code for these systems. Do we have to fork them? Or worse reinvent the wheel time after time?
I think that the diversity of Open Source is why it’s successful. It’s very simplistic to say that we don’t need very many systems, but each have their unique selling points. For many users, just license type can be an issue so that’s one reason to fork. If there was no forking there would be no innovation…
It may be interesting to consider your point when applied to cars, or houses or anything else that varies quite considerably. Often companies will apply rules like no RDBMs apart from Oracle etc. Doing this reduces you to a lowest common denominator, meaning you can’t take advantage of better technology, or you use the wrong tool for the job.
Justin Rudd posted some interesting stuff on the various IoC containers for .NET (http://justinrudd.wordpress.com/2008/02/10/state-of-the-art-for-net-dependency-injection/). I think that the descriptions speak for themselves. Has anyone ported Google Guice to .NET yet?
@darrel: Thank you for your thoughts. Again, I found your talk with David fascinating. I’m glad that you responded to my comments and able glad to continue the discussion.
You ask how many rdbms we need. I would ask you why we wouldnt have more than one? What is wrong with some good competition? After all, we have more than one brand and model of automobile (as @brian says). Should everyone drive a Ford Festiva, for example, since all a car is supposed to do is get you from point a to point b?
I am not sure what you mean by “reinvent the wheel time after time”. I do not see the open source community doing that as often as another enterprise organization.
@Brian
The diversity and choice of Open Source is also a bit of it’s problem. There are too many choices. My argument is one of trying to make applications simplier. Although a developer may enjoy the freedom of choice and driversity in Open Source products does that really help you solve the business problem?
@Matt
The large number of alternative databases is actually a symptom of the problem I mentioned above. In the commercial space this gets taken care of by competition. In the open source space there is no such driver.
So much time and energy goes into creating our skill sets and there are so many problems out there to solve. Wouldn’t it e better to tackle some of those instead of creating yaet
another database?
Another reason Microsoft has all those Microsoft flavors of third party tools is because we need to recreate the wheel in order to use some of these tools within our products. Getting the legal department to OK a license is a hassle. It is easy to use a third-party tool, but once you extend it or modify it, we need to own it (and that means documenation, SWI reviews, support, et cetera).
@alex: so, let me get this straight. Rather than fix the issues to getting a license approved through legal, it is easier to re-implement an entire software package that already exists in the open source world?
Seems to me that this is a very poor business model and actually makes Darrel’s point. Wouldnt it be better to tackle some of the other problems out there instead of reinventing the wheel?
Lastly, why are the legal implications only an issue for Microsoft. Sun seems to have no problem embracing the open source community with Java.
You are preaching to the choir. Legal is a factor and it can be painful. In some cases a port is easier than jumping through hoops. I was recently OK-ed to use MB Unit and Rhino Mocks, so that is a step in the right direction.
I would guess legal issues are not just an MS thing, I would expect Sun would have similar issues.
@alex: Sun may have similar issues with legal, however, they have not let it affect the thriving open source community. They are not re-branding every good open source tool just to put it under their organization’s namespace.
Regarding your comment about being ok-ed to use MBUnit, is this the start of a Microsoft acknowledgement that MSUnit (or whatever you want to call it) is lacking?
@Darrel The open source community suffers just as much from the effects of capitalism and competition as commercial software. Successful open source efforts need money to thrive, and less successful open source efforts don’t get money. Just because there are more than two open source databases doesn’t mean that there isn’t a market for them.
Its as if you are arguing against a free market for software. If I am to follow your reasoning to the logical conclusion, I have to think that you believe the current software is “good enough” and we should stop all our damn innovation. I wonder what you think about Occam’s razor.
@Mike
Actually I am not arguing against inovation. What I am arguing for is Inovation. Not reinvintion. By this I mean I see very little reason to have a version of Make (for example) for every new IDE or programming language. The requirements for this product have not changed and the new version don’t do anything significant.
I find it very difficult to tell the difference between, Apples UI, MS WIndows, KDE and Gnome. They are all the same WIMP interfaces that came out of PARC in the 1970’s.
What I would like to see is more inovation. Where is that killer Voice Recognition app? How about a new voice driven UI that is not something like saying file / open. I want to say something like “take a memo” and have the application know what I mean.
My feeling is there is so much wasted effort on creating another RDBMS or IOC Container or IDE that we are not progressing to take advantage of all this new hardware and computing power that is becoming avialable. We are so busy quibiling over the accidents of software creation we are not concentrating on the essentials.
If you don’t mind there being multiple open source projects on the same topic why do you mind Microsoft having their own? To distill what your saying in one sentence:
“Its ok to make a yet another ____ as long as your not Microsoft.”
Every microsoft product you mentioned has different features than the open sourse variety. Why shouldn’t Microsoft be able to control its own destiny specially with something as important as MSBUILD? With MVC you can use the castle project bits if you want its extensible. If you want to use NUNIT there are templates for Visual Studio. Want your new fangled project to have templates in VS. Develop them using the Visual Studio SDK.
I think Microsoft has very good reason for providing its own products in spaces already occupied by open source. For enterprise customers its a lot easier to get something approved from microsoft than from some random project. Some developers have to get everything approved. Also Microsoft has an existing community to distribute to. If there are multiple players in a space. Microsoft would make enemies if they said project x an y are projects we approve of that do _________. They rather give an opt in both for projects and for people who use Visual Studio for products they do not support.
Just because you can’t tell the difference between the Mac, Windows, KDE, and Gnome doesn’t mean there aren’t real differences. Some of those differences are technical, and some are purely conventional for their platform. What makes a good Windows UI does not make a good Mac UI.
I suppose I just fundamentally disagree with your definition of reinvention, and I consider your view of acceptable innovation to be a tad myopic. Just because you want to see giant leaps in functionality doesn’t mean we won’t get there if we continue to make small improvements to existing systems. And sometimes we _need_ to create new systems; when the assumptions made by existing systems are faulty. It _is_ possible for a new system to be heads and tails better than an older system, and for one programming language and platform to be heads and tails better than another programming language and platform.
I have a feeling that deep down in your core you wish the entire technical world would just choose Microsoft and standardize already. That’s the only point of view I can attribute to you that makes your statements understandable and consistent.
@josh: I think you incorrectly distilled my point. I think it is perfectly ok to make another ___, even if you are Microsoft, *as long as you add value*. The problem comes from re-inventing the wheel. There is not value (to the community) to having the same tools branded under a different namespace.
@mike: I have a feeling that that is a general perception and one that the ALT.NET folks are trying to break free from. Utilizing the Microsoft development framework does not and should not mean strictly utilizing their tools.
My last comment was directed at @Darrel Carver. I’m sorry for leaving that out.
@Matt I don’t think I fully understand. Which perception are the Alt.NET folks trying to overcome? There have been alot of perceptions thrown around here. :)
I am slowly coming to the conclusion that the Elegant Coders are not fond of Alt.NET… I find that surprising because I find nothing at the core of Alt.NET disagreeable. I think that the (very real) problems with the Alt.NET movement are endemic to the problems of the larger .NET community, but the core principles that started Alt.NET are sound.
@mike: ALT.NET advocates choosing the right tool for the job, even if that tool does not come from Redmond. The ALT.NET folks have realized that there is a great value in principles that may or may not be consistent with Microsoft’s.
I would not say that all Elegant Coders disagree with ALT.NET, but I tthink that there are certainly a few. I, too, do not disagree with any of the core ALT.NET beliefs. What are the problems that you see with the ALT.NET movement?
The problem with Alt.NET is its full of .NET developers. :)
I think that in general, the .NET community looks to Microsoft for guidance way, way too often. Its endemic to the culture apparently. And because of that its very easy to take a movement like Alt.NET and cast it into something it wasn’t intended to be. At the core, Alt.NET is about moving developers from good to great. And I find it sad when the Alt.NET community forgets that.
@mike: As a .NET community in general, you are right. However, isnt that what ALT.NET endeavors to solve? Not really moving developers from good to great, although that is a side-effect of looking at other directions to solve problems, which is what I think the core belief of the ALT.NET folks is.
Obviously, Microsoft could support and allow this community of alpha developers to prosper, but instead of embracing the community, they continue to enable the general community to look to them for (mis)guidance. It’s not the ALT.NETers that are enabling this or forgetting this.
Do I think that the ALT.NET group is perfect? No. Is it a step in the right direction? Absolutely. Anytime you blindly follow an ideologue (whether its technology, political or whatever) you are bound for trouble.
I would encourage some of the ALT.NETers to join in this conversation.
@All
Wow! Wander off for a day and the discussion goes crazy on you :-).
@Josh
Actually I do mind MS having a new flavor of the week for this stuff. I should have included MSBuild in the list of things that annoy me. NANT, ANT and MSBuild. So now my build file is XML instead of a flat file with cool Macros. How does that make it better?
In some ways you are correct. MS takes the best of the Open Source tools and adds them to there stack (sometimes, other times they don’t quite get it right). It puts the mantle of respectability on the product and blesses it. But really guys thus us not so different then a lot of other companies in the last 30 years. There used to be a saying “you can’t get fired for buying IBM”. When they lost favor I think the saying transferred to Sun in the 90’s. Has it now gone to MS?
@Mike
I guess I look at this a bit differently then you. I have more history. In the mid to late 80’s I had a UNIX PC from AT&T. A early WIMP machine with it’s roots in Xerox PARC. That was 20 years ago. PARC machines were 30 years ago. We have had steady change (and the chance to buy incremental upgrades) for over 30 years. In some ways all the WIMP interfaces I listed came from a fork of the PARC design. Relational databases were described by date in the 1970’s. Heck I was using Informix SQL by 1988. Some of these tools have gotten better but I say that can be attributed to the hardware. Most of the stuff we see today either came from Bell Labs, IBM or Parc in the 1970’s.
Your comment that I am a MS bigot tickles the heck out of me. So far in my career I have got to be a Unix bigot, a Apple bigot, a DEC bigot and now I am a MS bigot. I seem to re-bigot myself every 8 years or so. As for Open Source, news flash folks we have had this since the 1970’s also. Unix was originally free in source to Universities (hence the roots of BSD UNIX). DECUS was around in the 70s and 80’s. ARPANET (the Internet) has been around since the early 70’s as Usenet. Alt.Sources and Alt.Sources.binaries has been around forever. A lot of what we think of as standard UNIX tools came from there.
I have been around through all of these and enjoyed the ride. But really the core functionality of most of what we have today was made available in the 1970’s. We have slowly evolved it since then. For 30 years we have been slowly updating and changing these systems and ignoring some of the essential issues of software development as we argue over the accidents.
If I am becoming anything anymore it is pragmatic. I hope that by getting near a common runtime and having languages utilize the same base we maybe able to stop worrying about the differences and concentrate on how to come together to solve the bigger problems. I guess I am being optimistic here though. AT&T could not do it and neither could DEC. I have to say I doubt MS will pull it off either. Sigh :-).
@Matt
I applaud the vision of the Alt.Net guys and would be even more impressed if it was new. Read the usenet and Decus charters sometime. They felt the same way.
@Darrel I never called you a bigot. I simply stated that your labeling of various efforts as redundant and unnecessary made it seem to want everyone to agree on your choice of platform and approach. And you said as much in your latest in your latest reply. So as far as I can tell I was telling the truth. But there has been no name calling.
I’m not sure why you gave your history, but I suspect it is a way to say, “Shut up little boy. When you’ve been around as long as I have you will know a thing or two.” But I still find your central point confusing. On one hand you say there are no new ideas, on the other you bemoan that we aren’t innovating the way you want us to innovate. But that criticism is just a little too easy to make for me to take it seriously. I mean, what stops me from saying, “Why are we still on pneumatic tires?!? Where is my hover car?” Or, “Why are we still on fossil fuels?!? Where is my ‘Mr. Fusion Home Energy Reactor’?”
But the really frustrating thing is when you dismiss the real innovation and the improvements that are made as “accidents”. I really don’t understand that, and I find it horribly insulting. You insult the what-we-have-now that doesn’t fit into your preferred world view as you pine for the what-should-be. I don’t find that pragmatic (or accurate) at all.
As for Alt.NET, I haven’t met anyone in the Alt.NET world that believes that Alt.NET is anything new. For example, in the many, many discussions on naming the movement there were those that wanted to call it Agile.NET because it can be argued that the movement is really is just Agile applied to the .NET world. The only thing new to the larger Agile/XP/OOP movement is a sizable contingent of developers from the Microsoft ecosystem. And its getting the Microsoft developers into the Agile/XP/OOP movement that is the problem, not the Agile/XP/OOP movement.
Because most of the folks in Alt.NET don’t have alot of experience with Agile/XP/OOP, they tend to focus more on the tools and less on the developers. And the intense focus on tools at the expense of the developer is what I find frustrating. They have the cart before the horse to an extent, but at least they are moving in the right direction.
The diversity and choice of Open Source is also a bit of it’s problem. There are too many choices. My argument is one of trying to make applications simplier. Although a developer may enjoy the freedom of choice and driversity in Open Source products does that really help you solve the business problem?
Sure, if all of those different projects implement standard protocols or APIs properly.
Looking at a few HTTP daemons, Apache, nginx, Lighttpd.. they all have their own niche, even though Apache could be strongarmed into doing everything. They all use HTTP though, so they’re not too difficult to switch around if necessary, and clients don’t need to worry about it. I don’t see anyone claiming a variety of HTTP servers causes confusion.. and if it does confuse someone, they probably shouldn’t be involved in deployment anyway.
Same goes for POP3 and SMTP servers. There are quite a few alternatives in those areas, and they’re all the richer for it.
@Mike
Sorry, I guess I am not explaining myself well. I respect your opinion although I try not to tell you that because I think it gives you a swelled head :-).
I was not trying to give my history; I was trying to give a bit of computer history and trying to put some perspective on why I think there has been no real innovation in computers in the last 40 years. The primary things I see as the backbones of what we use computers for are:
1) Databases - CODASYK defined the standard for network databases in 1969 (RDMBS were first described by Codd in the 1960’s and 70’s at IBM)
2) Word Processing - The Unix Concepts of text formatting for publishing came around in the 1970’s (as a matter of fact UNIX was first designed as a text editing and text formatting system)
3) Spreadsheets - First patented in 1971, VisiCalc was actually being distributed for the Apple II in 1979
4) General Programming via high level Languages -
a) Interpreted Languages (If you want the full deal Smalltalk was around in the 1970’s. Object oriented, dynamically typed and reflective)
b) Compiled Languages (Cobol was created in 1959 and C in 1972)
5) WIMP Interfaces - (Pioneered by the Xerox Alto in 1973)
So if you take as a baseline of 1980 we have had these systems around for at least 28 years. Most have been around longer. Sadly I have only been programming for 30 so I have played with some of these at one time or another in my career so a history of computing may sound like a personal history. Believe me it depresses me much more then you :-).
Maybe you are right I expect too much. I can’t help but see the feature set of these products though and say that on the whole the pace of innovation in computers disappoints me. Those advances we do see to have picked up come about more because of hardware advances then software advances. As Brooks says in No Silver Bullet
…the anomaly is not that software progress is so slow, but that computer hardware progress is so fast.
I think you are misinterpreting what I call accidents. Again I quote from Brooks
If we examine the three steps in software technology development that have been most fruitful in the past, we discover that each attacked a different major difficulty in building software, but that those difficulties have been accidental, not essential, difficulties.
The three that he describes include:
• High Level Languages. Now this would include java and C#.
• Time Sharing. Now this would be the entire concept or personal computers, laptops, PDA’s etc… essentially ways to get the answer immediately.
• Unified frameworks. Here he talks about UNIX, but you can also include in this the .NET framework and the Java class libraries.
See my Blog entry I first learned about Agile Development… (http://elegantcode.com/2008/03/15/everything-i-ever-wanted-to-know-about-agile-development-i-learned/)for more details on this
So my contention is that one of the reasons software innovation is so slow is we spend too much time reinventing what we have had since the 1970’s and not focusing on advancing the art of computer sceince.
Sorry make that CODASYL not CODASYK
[…] in a interesting thread on Matt Berther’s bog on my podcast. I commented on his post Blasting open source because I felt my podcast was not meant to pick on up source projects although part of it could be […]
Darrel continues the conversation here:

[…] ordnas wrote an interesting post today onHere’s a quick excerptRepeatedly through the podcast, Darrel mentioned that open source is guilty of continuing the re-invention of software, simply because someone may not like the project owner, or that just one additional feature is needed. … […]