The Virtues of Monoculture

by James Turner

I'm probably not saying anything that hasn't been said before here, but I thought I'd share a few thoughts on why people seem to be drawn to the Microsoft Way. I recently did something at the 'day job' that I've thought about doing for a long time, but never quite worked up the steam to follow through on, I signed up to participate in a a Microsoft-centric project, and to learn .NET.

I have made abortive stabs in the past to learn to code in the Microsoft Universe. I made a stab back in the bad old COM days, but the number of hoops I was being asked to jump through was more than I wanted to bite off at that time. Since then, I've carried that bad taste in my mouth, and resisted adding any Microsoft skill sets to my repertoire, even though it was sometimes a gap in my resume.

I've worked frequently in environments where there was the one Microsoft Guy, the evangelist who would constantly tell you how much easier it would have been in .NET. I've written them off as Kool-Aid drinking Gates worshipers. But, at the end of the day, I felt that if I was going to criticize them, I really needed to understand where they were coming from. Know thy enemy, and all that.

I spent last week learning in order C#, .NET and VSTO (that's Visual Studio Toolkit for Office, if you're not familiar with Microsoft's alphabet soup.) I used the O'Reilly 'Learning C#' book, and did something I rarely do, went through it pretty methodically (at least the first half or so.)

Guess what? Microsoft has a pretty good development suite on their hands. To be honest, C# is largely what I'd do if I could rewrite Java from scratch with no concerns for backward compatibility. It has a couple of really cool features, like the virtual, override and new keywords that let you specify what should happen when you cast a class to it's base class and then call a method on it that's defined in both.

Visual Studio is a slick tool that really does let you bang out applications (and with VSTO, plug ins for Office) is very little time. ADO.NET is no worse then JDBC, and is pretty seamlessly integrated into Visual Studio. I was able, by the end of the week, to develop both stand-alone applications and Office plug ins that could talk to back-end databases, having written very little code. From what I've seen, ASP.NET does the same for MVC web applications.

So what's good about a monoculture, and why does Microsoft win so often when people make a decision about platforms? Largely because what the open source community sees as a strength, people trying to get a job done in the real world see as a weakness. We celebrate the diversity of choices available to solve a problem and call it freedom. IT managers and CIOs look at it and call it chaos, confusion and uncertainty.

Should I use iBatis or Hibernate? XFire or AXIS? Perl, PHP or Ruby? Debian, Fedora, Ubuntu or Suse? Make the wrong decision, and you can waste a ton of time, as we found out on a recent project when we wasted a week try to make AXIS2 work for a web service project, only to find out that XFire was the right choice.

For the Microsoft Guy, no such confusion. You use ADO.NET, ASP.NET, C# and Windows. They all work, they're all well documented from the perspective of a developer's needs, with nary a disparaging 'go look at the source' blow-off. Every time I thought I was going to be stuck, there were a dozen articles explaining how to do exactly what I needed to do, with sample code that was up to date with the versions of the software I was using, and that actually related to the problem I was trying to solve.

Microsoft offers the certainty of no choices. Choice isn't always good, and the open source community sometimes offers far too many ways to skin the same cat, choices that are born more out of pride, ego or stubbornness than a genuine need for two different paths. I won't point fingers, everyone knows examples.

Now, least you think I've been turned to the Dark Side, there is one BIG problem with a monoculture, which is that you've essentially sold your soul for the stability of a clearcut set of choices. You go down the .NET path, you're pretty much stuck there forever, Mono not withstanding. You're always going to be running on a Windows platform. You got the pretty gold ring, but Sauron gets to pull your strings and make you dance. For many companies, ones that don't need to worry about deploying into heterogeneous environments, that's a deal they're more than willing to make.

The takeaway I get from this entire line of reasoning is this: that somehow, someway, we need to start doing some winnowing. The 700 lb clue-bat has to be available to pound on the head of those who fork for no better reason than a disagreement over a license, or who should get to call the shots. When we hear about two or more projects that answer the same question, we should be asking ourself "Why don't they pool their effort and produce one really good solution?", rather than celebrating diversity for diversity's sake alone.

Do we really need Ruby on Rails AND Groovy on Grails? When the April Fools' announcement of Python on Planes came out, it took me a second to realize it was a hoax, because it's just the kind of 'doing something for the sake of doing it' effort that fractionalizes the OSS community. There's no way to stop people from starting new duplicative projects, nor should we want to, but please God, do we have to actively encourage it?

We spend a lot of time complaining about all the evil ways Microsoft uses to foist themselves on the world. By doing this, we automatically remove any blame that we ourselves may bear for their successes and our failures. The reality is that there are good, practical reasons that drive people into the arms of the Redmond tool set, and we need to accept that as a fact and learn from it, rather than shake our fists and curse the darkness. For we have met the enemy, and it is us, not Microsoft, at least not all the time...


2007-04-24 12:04:40
Do we really need Ruby on Rails AND Groovy on Grails?

I'd say "yes" only because those who are entrenched in Java do not always have the option of using a different platform.

I think a better question is, do we really need Grails, Wicket, Struts, Stripes, Strecks, RIFE, Tapestry, JSF, Click, GWT, Echo2, etc. etc. etc. If you've chosen Java as your platform, then you're faced with the epitome of choice overload in choosing a web framework.

I'd say Grails is one of the best choices out of that ungodly list, even considering its immaturity.

2007-04-24 12:27:49
While I agree that they do offer a mostly complete stack and no choice is often much easier...

It *is* interesting that sometimes the no choice might be the wrong choice oddly enough. So, in the case where Axis2 was the wrong choice, what if the whole Microsoft stack turns out to be the wrong choice? Now that's a pretty expensive mistake... On the other hand, Axis2 versus XFire doesn't look so bad.

I guess what I'm saying is that making that one big decision at the beginning is arguably much more pivotal. If you are *stuck* in that no choice world in IE with activex or even stuff like Oracle extensions or whatever wholesale vertical stack or kool-aid you like, you are sacrificing a whole lot at the very beginning. Decisions are made for you.

I'm a Java consultant and am faced with a lot of questions like, "What's the industry standard for x or y?" so I have to do a lot of research for things like what you mention - hibernate or jdo, spring mvc or tapestry, etc. However, in the open source world and in the open framework world, I do appreciate at least that there is a certain level of pluggability at each level that has developed with open standards and methodology. That way, you can often choose what you like for the major decisions. It is sometimes a mess, but I do appreciate another way of thinking about it.

Anthony Cowley
2007-04-24 13:05:06
I think the confusing factor in this is what Jeremy identifies as the pivotal decision: to use Microsoft's products, or not? The problem is that someone may determine that one aspect of Microsoft's tool chain is not the best choice, and then, somehow, perhaps through the magic of the internet, the whole tool chain gets labeled as "crap." While the original post seems to dismiss Mono, it is quite a happy development scenario to use Visual Studio to develop C# apps for Linux and Mac via Mono.

I think a very productive mode of thought these days is to look for those few places where you can plug into the Microsoft tool chain.

2007-04-24 13:27:55
This article makes an excellent, clear headed case for using the microsoft stack. Despite my loathing for most things microsoft, I can't deny that such simplicity has some value.
2007-04-24 13:36:40
I have hopes that the Portland project puts some of these criticisms to rest. Portland should allow a MS .Net developer to rewrite an existing Windows-only application into a multiplatform application with the same functionality. One could do that while the current Windows-only applications runs under Windows XP as a virtual machine under a GNU/Linux distribution.
2007-04-24 13:42:11
Monoculture has its upsides: Unix + bourne shell + ANSI C go a long way and have been compatible over decades.
Hans Bezemer
2007-04-24 13:46:22
"IT managers and CIOs look at it and call it chaos, confusion and uncertainty."

Well, in my humble opinion it says more about the abysmal quality of CIOs than the virtue of choice. Note that Tom Gilb once said he didn't do congresses anymore, because "CIOs are just too stupid". Remember that Edsger Dijkstra was dismissed by a bunch of CIOs just because he was wearing sneakers and a sweatshirt. If stupidity is getting the norm, there is no hope for this business.

2007-04-24 14:01:36
An official bank in Brazil was hurt by an unusual circumstance.
It hired a team of MS Java programmers to implement their tax payment routine right before Sun sued MS for the "extensions" with which MS spoiled the "run everywhere" principle. This team did the job using the MS Java extensions and went away.
The bank does not want to reimplement the tax payment function, so every time a new taxpayer logs in, he/she needs to download and install a special library that fortunately the current bank personnel found in their server.
I think a way to avoid a situation like this is to provide source code for the libraries that make up any RAD system. In case of need, one can patch or rewrite the low-level libraries, and recompile them on a given platform to maintain the high-level language functionality, or something to that effect. When the function library is kept as a binary archive, then it will only work on the original platform, so all migration paths are closed. That is the requirement for multiplatform applications.
Joe S
2007-04-24 15:14:09
Here's the problem with the monoculture idea. Sometimes "the one solution" is the wrong one and if you're limitted to it "you can't get there from here". Let's look at the Rails example. Rails is good for what it's good go, but Rails is based on the assumption that there is a single primary key and that primary key is an integer. This assumption is engrainged pretty deep in the architecture. On the plus side, it simplified a lot of things and the Rails architects are correct in saying that any multi-key database can be converted into a single key database. On the down side, Rails is completely unsuitable for legacy databases, and just as important, but converting multi-key to single key primary keys, databases lose out on some of they're key relational algebra advantages. A database is little more than an array that just happens to be on disk. Now it is possible to work around the first problem by using triggers, views, mapping tables and other tricks to either serve as a translation layer or a bridge layer, but you've just added a bunch of bulk and ugliness to your code that really didn't need to be there. It hurts maintenance and performance and obliviates any advantage the monoculture gives you.

If instead you use the right tool for the right job (e.g. Rails for simple-key databases, iBatis/hibernate for complex or legacy databases), you avoid this issue completely.

The comment that there are several code samples that you can readily plug in is actually a disadvantage, not an advantage. Anyone familiar with Windows programming knows that many "you can't get there from here" problems are "solved" by doing a google search and putting the "voodoo solution code" into your application. Very often, you don't know "why" it works because it depends on some implementation specific feature of "the monoculture implementation", but you have a deadline to meet and it seems to work so you leave it in. The pressure to fix the "you can't get there from here" problem isn't there, so it doesn't get fixed. Pretty soon you start using this "voodoo solution code" everywhere and when it breaks, as is inevitable does when the implementation changes, you're screwed. With the polyculture, the "voodoo solution code" option is less of an option so architectural issues get fixed.

2007-04-24 15:15:36
I was able, by the end of the week, to develop both stand-alone applications and Office plug ins that could talk to back-end databases, having written very little code.

So the easy apps are easy to write. But does it scale? Do you get enough info to do more than merely adequate error checking? What about interoperability? How difficult is it to debug low level problems?

The seductiveness of the simple apps has led many a development team down the garden path. I have worked with Java and some of the Microsoft development tools and I have to say that once you get into real development, they slow you down because of the secrets. Those are undocumented and support tries to sweep them under the rug.

The first time I worked with OpenSSL, I discovered a problem with large file transfers. I start with the assumption that it's my code, but after a point, I had to question the library. When I found an unresolved bug report that sounded like my problem, I was able to troubleshoot the OpenSSL code myself and found the problem in a couple of hours (and sent them a patch file ;-).

Now I'm trying to use SSL in Java and I haven't been able to find the source code for, so I'm stuck. (At least some of the Java source is available, not so with almost all Microsoft code.)

"It's easy." "It's cheap." Your butt cheeks should automatically clench whenever you hear those phrases. "Trust me."

2007-04-24 16:11:47
There are tools in the toolbox that save the day every so often but appear as dead weight for the most part. And what about when that comet hits your company? When what always worked fails miserably. Will there be something fairly mature, if little used and slightly inefficient 80% of the time, that saves the day?

A monoculture is a shortcut. When it is working, you really are cheating the odds, but no one (nothing) avoids judgement day. The open source world won't live or die by Java. They won't live or die by parrot. They won't live or die by gcc10 or the next greatest and latest.

Now maybe Microsoft is destined to fulfill their role as a great niche player once their monopoly hold is destroyed, but you can't compare their limited products to the diversity in the FLOSS world. Top down central organization vs. bottom up etc. Look at USSR vs. USA. Weren't the USSR the first to orbit the Earth and had a number of other distinguishing accomplishments?

Sorry. .Net is out. In a few years time, .Net will lag behind a number of FLOSS options in most categories.

.Net may simplify some things. It raises the bar of the level of complexity that can be handled quickly, but comes to a screetching halt soon thereafter. Microsoft aims to appeal to the largest number of people and to increase productivity for the largest number of people. Microsoft does not build tools that challenge the work their own MS developers do. .Net is not great for infrastructure for example. Some things are best managed by the developer and not automatically. But this is not seen on the scale of most projects using .Net.

The FLOSS world can afford to do lots of projects and see where they lead. You need this investment to lead tomorrow. Microsoft doesn't have the resources to afford that. And soon they may not have the resources to afford very much.

To recap. Various groups at various times will always find Microsoft's products to be ideal. But overall and for long-lasting building, Microsoft is dead in the water: they are too small and have too few resources to match the larger community. I think this is true today. You see it by how fast one is growing (Linux) while the other seems to take steps backwards (Vista). Now imagine when Microsoft actually has to start tightening their buckle to cut costs? That day is coming. In short, Microsoft is one company (though very large today), but unfortunately for those that depend on them, they don't work with and leverage much of the rest of the FLOSS world. If IBM fails, FLOSS continues. If Microsoft fails, .Net takes a shellacking.

2007-04-24 16:27:50
The same argument can be used to show that dictatorship can be better than democracy for lazy and ignorant people...

Microsoft monoculture is better to ignorant and lazy people, who prefer that someone think for them.

The exercise of choice is the price for the freedom.

2007-04-24 16:30:20
The same argument can be used to show that dictatorship can be better than democracy for lazy and ignorant people...

Microsoft monoculture is better to ignorant and lazy people, who prefer that someone think for them.

The exercise of choice is the price for the freedom.

Brandon Fouts
2007-04-24 19:14:13
Hopefully Mono will be a good alternative to .NET

Seems the root of the problem is to find a way to help people make the right choice or is it avoid the wrong choice? How to get fair comparisons of pro/con strength/weakness of different stacks or languages.

Can Eclipse help?

Ramon Casha
2007-04-24 21:21:58
You mentioned that "For the Microsoft Guy, no such confusion". Wrong. There's lots of choices and it's interesting that you mentioned "iBatis or Hibernate" because both products are available for .NET as well. Not from Microsoft of course, but then the Java versions of these products aren't from Sun either. Microsoft offers the .NET platform in the same way that Sun offers Java - both try to make their respective platforms as comprehensive as is reasonable, but they don't provide everything. If you stick to the pure vendor product, there is only one Java just like there's only one .NET. In both cases however, once you start building something bigger than a HelloWorld application, you'll find you need something that the pure platform does not provide. Neither platform offers an inbuilt search engine, so you get Lucene and Lucene.NET. You get Hibernate and NHibernate, iBatis and iBatis.NET, Ant and NAnt, etc.

In the case of .NET, because it is a Microsoft product, you often encounter cases where a particular feature of .NET only works, or works better, when used with other Microsoft products. Some features only work if the browser is IE, or if you're using SQL Server 2005. The LDAP (System.Directory) features only work well with ADS. Personally, I don't like it when my development platform tries to force me to buy other products. At least that's one thing Java does not do.

Of course there's a flipside to too many choices - having no choices at all. So far at least, every time I try to find an API to do some task, I end up finding half a dozen different Java products but often find none for .NET. I was recently trying to find a Jabber (XMPP) client API for .NET. It took me ages to find a beta product, but I had whole lists of different Java APIs for it. Even when I do find such a product, it's most often a port from Java - such as NHibernate, iBatis.NET, Lucene.NET etc.

2007-04-24 21:23:59
A nice easy cross platform development tool.

One that runs on MS, MAC, UNIX, Solaris and Linux, and has plenty of hooks, one can always try Runtime Revolution.

The IDE costs money and the engine is proprietary, but the runtime is license free.

Pity some Linux application creators can't use their model and come up with an open source equivalent, then we could all use a new monoculture tool, even those with no programming experience.

2007-04-24 21:35:12
The problem you over look is that when MS decides to change you have no control so your code written in the past - is suddenly useless (Visual Basic). The other problem you face with MS is that MS may decide to take your business away from you at will. They have control over the environment you are using so they can use their special knowledge of the APIs and what is coming in the future to drive you out of the market.
2007-04-24 21:55:36
Should I use iBatis or Hibernate? XFire or AXIS? Perl, PHP or Ruby? Debian, Fedora, Ubuntu or Suse?

I see your point and celebrating diversity just for the sake of diversity may not be in everyones best interest. For the record; there are a few choices in the commercial world that can make people scratch their head. It may not be in development but the choices do exist. How many different types of:
1) Firewalls
2) IDS
3) A/V

exist in the commercial world. There are two or more in the above categories. Now keep in mind when it comes to MS and development; they do control the entire environment and it is easier to make everything "Just Work". Is it bad? Not totally bad, it makes it convenient.

1) Diversity for the sake of diversity may not be beneficial.
2) Diversity does have its strengths
3) Mono culture does have its strengths and weakness.

Just my .02 cents worth.

2007-04-24 22:02:47
"The same argument can be used to show that dictatorship can be better than democracy for lazy and ignorant people..."
No only "can be used", it's a fact:
After the fall of communism in Eastern Europe, smart, enterprising people still succeeded, while the lazy and ignorant fell behind miserably.
I grew up in one of those countries...
In this sense, Microsoft is very much like a communist dictatorship. They tell you what to do.
The problem is that their choice usually falls in the "mediocre majority" region, not unlike communism.
They're the McDonalds of the software industry: they don't make the best, they just make the most.

I do agree, however that FLOSS projects should strive more to simplify and consolidate.
I develop a 3D modeler application and I'm trying to do my part to extend the hands of collaboration...

2007-04-24 22:18:33
first off let me say that I'm the dot net dude, but, also, I started my life in Perl/PHP land and that whole thing. I wanted to move on to a more legit full fleged platform for general development from PHP web develpment and started looking at Java vs. the new .NET (which just had come out). I couldn't get Java to work to make pages the way I was able to in PHP--it was really painful to get the technology stack to make a freaking page, but I could easily do so w/ .NET and very quickly eclipsed (no pun intended) my ability in PHP. And that was that. I'd switched over to the dark side.

I should say that I was at the time a staunch anti-Microsoftite, but seeing the reality of productivity in .NET on the web made me think twice. I have to say, while my personal politics are solidly on the open source side, I find the .NET way just plain easier and more powerful. Do I personally have to pay for any of the tools to make .NET stuff happen? No. Is it an issue for the companies I've worked for? Not really.

And now that M$ has gotten it's legs under .NET, with the 3.0 release,the company if (finally) starting to turn its head towards doing next-gen stuff instead of just trying to do what the open source (mainly java) folks already did.

While I believe that .NET is the best solution most of the time for the problems I'm tasked to solve, if a new technology stack comes around that is both powerful and relatively easy to learn and solves the kinds of problems I'm given, I'd switch, as would every one else. I'd not be surprised if I, the C# guy, would be doing a gig when microsoft brews that up, just as an example, becuse of the ease that lang has for web dev.

2007-04-24 22:43:54
As they say in Matrix(Movie):
"The problem is choice"
2007-04-24 22:55:43
Good article. This sort of issue is also a large factor in bringing people "across" from a Microsoft OS environment to an alternative OSS OS. How do you know which one to go with. Even once you've found what you think to be a decent selection, it usually lacks one or two apps, which you subsequently find out, you can't get by without or rely on too much. Sure, these days things are getting much better with the likes of Ubuntu to help people like me who have been in a MS OS environment all their lives - due to development choices, typically - move across. This even comes via Ubuntu. But development... what can I do here? There's mono - but it's hard to convince management we need to migrate our existing C++ and C#, ASP.NET apps to mono. It *might* be supported ok but are the resources available the same as what's available for MS .NET apps?

It's also *very* difficult to justify writing it in Mono just-in-case we need it to run on an OSS OS one day. Where right now all our customers we know, for sure, run Windows... Not worth the migration effort for a "might".

I think you've laid the point out really well. Good read.


2007-04-24 23:05:15
I think you never used Microsoft stuff, that didn't work as advertised. There are a lot of Win32 and COM APIs that are buggy and/or badly designed. And sometimes I wish I could switch to another API...
So in that case having no choice is a bad thing.
But in general you are right. I guess there is a lot of need for open source projects, that make a reasonable choice for a stack of technologies and make it very easy to get this stack working smoothly.
2007-04-24 23:36:37
Hear Hear!

OSS is a good thing. Cooperation, collaboration, Free software. All good, probably better than corporation DRM and licensing hassles, but only if they serve a common goal. "United we stand, divided we fall", "live together, die alone", etc.

For all the zealots who are only pausing long enough to reload, remember that you don't have to choose between boiling hot or freezing cold soup. This author speaks "geek" and grocks (gets) what has been going on. My dad grew up living in a part of town that featured a particular ethnic "majority" that outnumbered folks with his ancestral background. But when it came time to elect student president the majority never won, because my dad and his friends would nominate many candidates from that ethnic majority, and only one of their own...

I'm not suggesting that MS is actively starting OS projects, but I've got to point out that I have often PAUSED pursuit of OSS because I don't know what the heck will win. Just look at AJAX today, there are something like 70 frameworks (or was that 150) enter the need for a common vision / coordination.

ok, I'm not adding much ;-) BUT well said, and not from some editorial pundit who is pretending.

2007-04-24 23:37:35
Platform dependency is usually a strategic decision.
And needs to be addressed at management level,
since a platform switch will be decided there.
2007-04-25 00:03:22
While I agree with your comment about the strength of a monoculture one should also remember some history. Prior to Dot Net microsoft's development environment visual studio was essentially for for desktop development.

Microsoft has seen the advantages of Java and how it can link the desktop to the web and has fairly successfully emulated that linkage.

In your comment about choice you mention frameworks as well as language choices. It should be noted that there is probably just as much lockin with a framework no matter what OS/deveopment platform one uses and that one's core skills in a language will be needed to migrate the project.

2007-04-25 00:03:59
I love we people talk about the advantages of Linux.

Due to being open source no license restrictions a pure mono culture can be made. Compared to having to put up with windows XP 2000 2003 and Vista in one network because you don't have enough licenses to go around.

Current problem is transition from Microsoft Mixed Breed to a Linux Distro Monoculture.

2007-04-25 01:01:21
Nono, it's all about (centralised and understandeable) documentation, a community of language-ready developpers.

Ever looked at CPAN documentation ?

2007-04-25 01:04:47
I lost my faith in MS when they discontinued VB6. Then it became apparent that they don't care about providing a tool or assets that people created with this tool. Their tools are part of some agenda - like preventing defections to Java.
Bernd 'Birdy' Villiger
2007-04-25 01:07:00
Well said ;-)
Bill Garrett
2007-04-25 01:09:13
While you can talk about a variety of choice in the open-source world, it is disingenuous to suggest that there is some kind of dichotomy between this and the full-stack approach Microsoft favors. There are two reasons for this.

The first is that, as has been mentioned by other posters, Microsoft can and does pull the rug out from under developers who are using their own products. You may develop using Windows-Based Solution X, only to learn that Microsoft has "deprecated" it and is now advocating Solution Y (and further, that all its new tools assume that you're migrating to Y in the very near future).

The second is that there is a plethora of choice in the commercial world as well. Perhaps the assumption that commercial vendors of proprietary solutions are entitled to their position and that open source should simply stop offering new ideas because, well, they aren't charging money and can't induce the "sunk cost" mentality that keeps customers psychologically locked in. When you haven't committed your budget to a boat anchor, it's very easy to criticize your platform.

2007-04-25 01:11:46
As an end-user, and non-programmer, the enormous selection for open source projects (as an alternative to Windows) is a huge hurdle. I have attempted to stay abreast of all the choices for Linux distros and other online and desktop softwares.

It is nearly impossible to test everything and make a choice. So I agree that the channeling of efforts in open source (Linux desktop for example) would only help me and other end-users choose between Windows and a viable Linux solution. It would also galvanize the effort thrown into developing the necessary software to run on Linux (such as 3D and 2D design software that I need, which until now are still unacceptable alternatives to Windows or Mac-based versions).

Evan Cofsky
2007-04-25 01:43:34
If the point of Free Software were to be commercially successful then absolutely fragmentation will cause it to fail. However, most Free projects are started by people who want to do them for any of a number of reasons. License changes and disagreements are one of the fundamental principles of Free Software, for example. The entire GNU project was founded because of licensing issues. Various BSD developers are always clashing with the various developers of GPL code because they both feel strongly about what should and shouldn't be called "Free". None of these things matter to commercial developers, but the commercial developers are developing code for their employers for a different purpose than the Free developers are. Maybe this is the real problem with Free/Open/Whatever software... People who want to just code to pay bills and save money don't have the same kinds of passions as the people who do, yet since their jobs are made more difficult in some ways by this they feel resentful towards the people who do it "just because"... The problem is that there are different world views, and only some people accept that.

2007-04-25 02:42:22
As a mac user, I'm chagrined by your article. Apple's been castigated by the OSS community for years over the "choice" issue. Now that we have Mac OS X and can run OSS software, it puts us in a weird twilight position between the Microsoft and the Linux camps.
2007-04-25 02:59:27
Why should different people work on different projects, such as Ruby on Rails and Groovy on Grails? Or KDE and GNOME?

Because sometimes decisions between alternatives will have to be made without previous knowledge which will be better in the long run. When there is a plurality of possible approaches, the best one will persevere in the long run and finally be adopted by the alternative projects, as the source is free & open.

In other words, plurality fosters evolution. Hence the FOSS development model is much more cost-effective than the MS model. How much money has been invested into M$ Vista so far? And how much so into Linux, even if you include all its associated projects, from the kernel to Beryl?

2007-04-25 03:37:29
Why do you differ MS and OSS?

I think problem is wider. e.g. Problem of "discontinued VB" caused not only by MS. There is common problem of mixing programing languages. It partly solved in some special cases. .NET is just try. Perhaps nice implemented. But "a dozen articles explaining how to do exactly what I needed to do" is just for keeping you in boundaries. Reachng limits straight show absence of advantages.

Are any technical posibilities to distract algorithms and "iplementations"? So you can't easy use implemented algorithm if you not "satisfied" by its implementation. And reimplementation produce one another "Groovy on Grails". In huge complex systems like .NET, Java or C++ you need not even reach limits to start reimplementing, just read documentation not enough carefully.

May be for "monoculture idea" is better to be more abstract then "to put them all in one big sandbox, and don't forget add some toys when they start to cry"?

Guillaume Laurent
2007-04-25 03:46:47
If you haven't read it yet, may I suggest you to read this post, on how too many choices create frustration rather than freedom (the linked video of the TED presentation is quite interesting as well) :

2007-04-25 04:11:09
stomfi said:
A nice easy cross platform development tool.

One that runs on MS, MAC, UNIX, Solaris and Linux, and has plenty of hooks, one can always try Runtime Revolution.

The IDE costs money and the engine is proprietary, but the runtime is license free.

Pity some Linux application creators can't use their model and come up with an open source equivalent, then we could all use a new monoculture tool, even those with no programming experience.

Well, for the "nice, easy, cross platform development tool" part, there is an open source equivalent, it's called lazarus and it's based on freepascal. Pity the open-source community is full of prejudices and consider pascal as a dead language. Btw, the architect of delphi (which lazarus tries to emulate but in a free and cross platform manner) is the guy who designed C#, so it's no wonder that it's getting now the features that delphi had 15 years ago.

mike wolf
2007-04-25 04:46:37
although I agree, I have a kind of longer term experiance. I went from doing alot of open source development in the day job to being a .net developer for 3 years now.

What your missing is that just like java your buying into the foundation, but like struts etc, you can lob open source .net stuff on top (nhibernate / nunit / monorail / activerecord / log4net etc....) sure your stuck w/ windows on the server, but for many people this was a choice made before the dev was even though of.

Now the problem is more of culture, that most ms developers dont look outside of redmond for options. Imagine if in java people never went beyond what sun suggested.

2007-04-25 05:02:16

I'm going to leave a comment I have often read on other sites but have never left myself. This post sounds, to me, like a bit of whining. If you're undertaking projects, you should know what is best for that project. So, if your company specializes in website design, for example, you SHOULD know as a matter of good business when python is best, when perl is best, etc You shouldn't have to say...."I wish there was only one language" so I don't have to make a choice. It's like a high school senior saying, "I hope I only get into one college so that I don't have to make a choice."

As far as forking - I hear this complaint very often as I trawl the FOSS web. I have two things to say about this. 1) This is not a business so you cannot control what people do. If people want to make a fork, it's their right to do so. You can't tell them, sorry, we already have 22 humans working on project X and for you to work on project Y is too inefficient. This is not a communist or dictatorship country.

2) There are many good things that come from forking. When rms/gnu was being a jerk, GCC was forked. Once the fork became awesome, rms/gnu was forced to fold it back in or there would be no support for GNU GCC. Just one example? Nope!
Look at Compiz/Beryl. The Beryl people forked off because they thought Dave at Novell was being a bit tyrannical. (Whether that's true or not is not important - perception is everything to the human experience) Now the fork is folding back in and they are making sure that they listen to people.
One more example...Ubuntu, a semi-fork of Debian. Debian was falling into irrelevance amongst non-critical-server people because we geeks who are into Linux are into the bleeding edge. So Ubuntu was born to be bleeding edge and satisfy that need.

So forks can be good.

Actually, one more example - people point to KOffice v OpenOffice as dumb, right? But they are very different projects. is a M$ Office clone. KWord, for example, is much more desktop publishing. I really like their use of frames when layout is important. I like when compatibility with M$ is important. So you see, they both have their own purposes!

And one last quick thing! Remember ECON? What causes people to innovate? It's competition!! Back in the Netscape days, how often was a new version of Internet Explorer released? Between the death of Netscape and the emergence of Firefox how many new versions of IE were released? What's that? Zero? Yes, because they didn't care anymore! If C# hadn't come around, do you think Java would be open-sourcing now? If Apple didn't exist, would Vista have all the copy-cat stuff from OS X? So I think that choice is important because if languages (programs, etc) want to stay relevant, they evolve to have the required technologies people are looking for.

So, to reiterate, I think forks are great. The bad ones fizzle out and the good ones stay. And it is your job to know which ones are good for whatever you want to do. Do you need cross-compatibility? There's Perl, Python, Java, Ruby, and pretty much anything open source. Do you need something resource critical? There's C, C++, asm, etc. Only needs to work on M$? There's VisualBasic, C# where you don't take measures to make sure it will also work on Linux via Mono. this case I can't sympathize with your POV.

jeremiah foster
2007-04-25 05:09:47
The choice is an illusion - it is whatever Microsoft decides to be the choice. Once upon a time it was Visual Basic and VB Studio, but that choice was removed for arguably the largest group of software developers in the world. How do you think C# went for them? In fact many balked and wanted Microsoft to go back to their old ways. In the end they had no choice.
2007-04-25 05:46:34
It would be interesting to see some stats on the amount of time developers spend just keeping up with the choices on offer - which are jokes and which are not, which are hot and which are not.

But even then, many developers and other tech heads have some degree of prerogative to keep ahead of the posse (or at least in the posse). That doesn't always apply.

A small rant

Christian Gross
2007-04-25 06:05:46
Guy you are nuts! I see this "ooh Microsoft is a single culture and thus better" all the time.

Let's pick apart your comment "You use ADO.NET, ASP.NET, C# and Windows." First I would argue do you use ASP.NET or WCF? And if you use ASP.NET for HTML do you use the Ajax extensions? Then regarding ADO.NET, what about LINQ? It's a new way to query a database. Regarding language, are you really sure you want to use C#? There is also VB.NET and there are many people who will tell you its a better language!

What you see is one thin sliver of what you call Microsoft Mono-Culture. If you dig deeper you will realize that Microsoft is not a mono-culture, it just looks that way! For example, you did not even mention IDE's, or personal databases that you distribute with your application. Or how about which user interface toolkit?

Choices choices...

2007-04-25 06:06:55
Thanks- needed to be said.
2007-04-25 06:22:49
JJS: "Sorry. .Net is out. In a few years time, .Net will lag behind a number of FLOSS options in most categories."

Much like Java and other systems are playing catch-up to it today? How long have many FLOSS systems been out there and *still* not up to what commercial versions of software offer? (I can think of a few that I used back in the 1980s and have continued development as recently as last week that are *still* not up to current commercial offerings.)

2007-04-25 06:44:22
@Ramon Casha

This is exactly what I don't like about basically all MS products. They do listen to developers and provide some very good solutions for them, but in the end they are out to make money first and foremost. Every part of the MS ecosystem is designed to get you to buy more of their software and less of everyone else's. When software is developed with lock-in as part of its major design requirement, you have to ask yourself if that's really the best thing to use, regardless of its apparent advantages.

2007-04-25 07:38:58
The problem is not to drag everybody back to one platform, but rather to invent better tasking practices. Right now, mgmt is a bottleneck and makes all decisions regarding who gets what tasking for what issue when they have no way to understand all the issues due to the plethora of past choices etc. The aim of mgmt would be to simplify the issues and mgmt of them by creating divided staff and eventually eliminating duplication (that they can possibly perceive as duplication).

The more humane suggestion is "cross-tasking" on a pool of shared tasks. This would force on-the-job cross-training. You can't send people to class and expect them to be worth a damn. Then at least you get some cross-talk and shared problem-solving under weigh.

Felipe Gaucho
2007-04-25 07:51:56
I like it.. for years we share this notion about MS being smarter than other in its marketing skills... for sure, users are always looking for solution rather than choice :)
2007-04-25 08:07:48
Wow, well-written article. The comments section is huge, so I will try to tackle that reading endeavor later.

It's good to read an OSS-guy being honest and logical in their actions and arguments. You seem to have had been one-sided for a long time but decided to be open-minded and give it a shot, 'Know thy enemy, and all that'. Well-done.

I think your article describes the situation very well - there are great pros and cons for the MS Way and for the OSS Way. Being what basically amounts to an OSS-wannabe myself, it's encouraging to see this kind of open and unbiased presentation. I've struggled, and seen countless times, the core issues you've mentioned. The MS Way is extremely productive, things work way better than most people in the OSS world would want you to believe, but obviously tends towards locking you in to the MS Way. Portability is reusability, and is very important.

I really appreciate what the OSS community has done and is doing, and the flexibility it offers is mind-numbingly high, but I often find it so hard to convert because of the basic problems that James has made so clearly apparent. I don't know half of those acronyms, but the point becomes clear - we don't need to 'celebrate diversity for diversity's sake alone.' If only pride and lust for power & fame didn't produce so much duplication and induce so many forks in the OSS-world, I'd probably be a 'M$' basher myself.

Charles Soto
2007-04-25 08:20:08
Great article. It's remarkably similar to my experience (including the O'Reilly book in question, though working at a university, I just got mine from the library ;). Anyway, I agree with you. I was able to "learn" C# (at least how it's enough like Java to pick up) and become familiar enough with ASP.NET Web Forms and the ASP.NET 2.0 framework to write a decent application over a couple of evenings after a week of book lernin'. It's exactly as you say - cut and dry, with very good sources of relevant information available online.

Why did I decide to try out the C#/ASP.NET/VS trifecta? There was a useful library available for cheap that did exactly what I needed ( They have a free (45 day?) trial, so I figured I'd go ahead and see what all the Microsofties keep talking about, and see if the library would serve our needs. Turns out it's all good. No time wasted.

Now if only I could get a C#/ASP.NET/VS-like capability on Xcode on my Mac (have to run Parallels to develop right now, and I loathe Windows)...