Microsoft and the API War
Right or wrong, Joel scored a slam dunk with his ditty on the API Wars. I disagree with a couple of the points there (and the article does take care to note that it is overgeneralizing) but one of his points rings true: Microsoft lost a whole generation of developers. However, it is not clear that soldiering on with the Raymond Chen approach1, with its 80s era design, would have solved anything. MS web devs were already fleeing to Java and PHP because cranky old ASP (even ASP 3) wasn’t cutting it any more. Worse, beginner web devs were moving to PHP and Java in droves because of (a) free dev tools (Weblogic+JBuilder is a free download for individual users, and you now have Eclipse) and (b) much better community support at php.net and the then-Java-only serverside.com. C# and VB.net were huge reductions in barrier to entry for MS development. If anything, the only quibble I’d have is: why isn’t VS.Net 2003 a free download for home use yet? The Framework SDK is not good enough when you’re competing with a Weblogic Workshop (based IIRC on Borland JBuilder) download from BEA2.
Joel spends a lot of time talking about backward compatibility across Win32 and .Net. I’m not sure why, because the gulf between them is huge, and, to my mind, necessary. Win16 was a huge shift from processor-centric DOS programming to C-based Windows programming. Win16 morphed (reasonably) gracefully into Win32, but it’s important to realize that managed code (whether Java or .NET) is yet another paradigm shift. Thinking about managed code as “just another set of libraries” is to miss the point.
From a traditional Comp.Sc. viewpoint, what Microsoft calls “managed code” consists of a set of orthogonal features, mainly
- bytecode for a stack-based virtual machine
- automatic memory management
- a “sandbox” execution environment and a standard security model
- importantly, a large, standard set of libraries to program against
It is possible to have each without the other. The language D, for instance, includes garbage collection but not bytecode generation or a sandbox. Pascal has offered bytecode for ages but not automatic memory management and so on. Smalltalk had almost all of it except a standard security model. Java put all these together for the first time, and was incredibly popular with developers. .NET added some new twists, and when the dust settled, the .NET environment was more than a set of Win32-callable DLLs.
On Robert McLaws’ LonghornBlogs site, a poster asks:
.NET 1.1 is not completely backwards compatible with .NET 1.0 == true
Is it or is it not? It is not.
The correct answer is, it does not matter. If you believe it does, then you do not understand .NET SxS. Of course, Microsoft has made massive screwups with SxS, but that does not take the feature away. Of course, given that Joel depends on a download model to run his business, I can sympathize with his fury over adding 20MB to his runtimes. But look at it this way — how many FogBugz customers are on dialup? CityDesk is a slightly bigger problem, though. Note to Microsoft: where are the AOL-style disks with the .NET Framework (plus Windows+IE patches)? Longhorn is years away, you guys gotta keep us happy until then!
Finally, there were those who rejected Joel’s central Web-uber-alles thesis, notably Olivier Travers:
And is the final frontier of HCI to have keyboard shortcuts that work, or can we expect a little more from those ever more powerful computers? What a startling lack of ambition […]
I would probably point to Joel’s older Five Worlds article and point out that Joel was mainly talking about forms-oriented apps. Nobody’s quite ready to cede Photoshop to the web yet :-). Although after watching Joel’s follow-up posts, I have this to say: the day Design-By-Committee makes a platform with a better user interface, pigs will fly. Opera and Mozilla can’t even iron out their ECMAScript and CSSx differences yet — and I’m supposed to trust these guys with my forms, too, now?
1Full Disclosure: I actively read and enjoy Raymond Chen’s weblog, and can actually remember a time when we needed hPrevInst arguments. I also happen to think a lot of today’s kids are spoilt on PHP and C# and Java (Do I sound like a curmudgeon before I’m even 30?), but that’s a topic for another rant.
2MSDNAA has been plastering campuses with free VS.Net CDs, at least in India, but I wonder how many converts from the LUGs they’ve got.

