I strongly recommend that everyone reads this excellent analysis of how Microsoft lost the API wars. I recommend this even to people who don't care much about technical stuff because it illustrates how a changing business environment can undermine once dominant competitive strategies.
"API" stands for "Application Program Interface", and it is basically a library of functions that software developers can use when they are writing their programs. It protects them from lots of technical ugliness that hides in the lower-level languages that actually run the hardware in computers, and dramatically improves programmer productivity.
Probably the most common API in the world is Win32. I beleive it was released with Windows 95, and over its many revisions, Microsoft has taken tremendous pains to ensure that anything programmed to run on an older version of Win32 was able to run on newer versions of Win32. When I say "tremendous pains", I mean they did things that must have made purist engineers weep--the introduced special codes and procedures that looked at what program was running, and then recreated old--often buggy--versions of the procedures just for them. People talk about "crufty" and "kludgey" code, cluttered up with all sorts of inelegant old detritus, and how this is bad, but Microsoft has (had) an enormous team of people dedicated to kludging the code up some more.
Maintaining backward compatibility may have been sacrelige to the engineering gods, but it was critical to the business gods. The reason Microsoft earns its monopoly rents is because Windows has few substitutes, and the reason Windows has few substitutes is because it is by far the best platform for developers to create applications for, and it's the best application because it is ubiquitous across generations of operating systems. If programs written for Windows 95 were not perfectly compatible with Windows 98, developers would have to decide whether or not to invest in developing products for the new platform, and each new operating system upgrade would trigger another round of potential defects. Infact, for reasons I'll go into later, this near perfect substitutability between different versions of Windows has gone from being a tremendous benifit to being a tremendous cost.
The main point of Joel's article is that Microsoft's backward-compatibility religion served them incredibly well, but after a fierce internal battle they have now turned their back on it and have embraced a new religion focusing on new technology that is not backward compatible and requires each and every software vendor to decide whether they want to support this new platform or not. It's like a new operating system company has entered the market, but it just happens to have the same name as an older one.
Joel doesn't really speculate on why this change happened at Microsoft--although his long experience with religious engineers might suggest that one of them won some internal power struggle and has now made this (bad?) decision. I don't know how true this is, but it is certainly true that the changing business context in technology means that this decision is less bad than it may have been in the past, because Win32 is just not as important to developers as it once was. There is a new operating system that most developers have decided to use, and it's called the Internet.
I've gone on and on about the emerging Internet Operating system, and the fact that the killer apps of today are things like Google, email, Amazon, IM etc. These use a series of protocols and formats such as HTTP, HTML etc. that are not tied to Win32. Worse for Microsoft, it turns out that the applications that require lots of local resources (ie. a harddrive, a fast processor, etc) are either 1) made by Microsoft and have been good enough for a while (Office) or 2) games, where they have no comparitive advantage. And that glorious backward-compatibility that locked in consumers and developers while the PC industry was growing has become a disincentive for people to get new computers--their old ones work fine. This has resulted in major revenue issues for Microsoft because upgrade cycles are stretching out. I don't beleive that all applications will ever run over the Internet--there is a real fight out there for the fat client--but Internet apps have enough benefits that they will consume enough developers to break Microsoft's API monopoly for good.
IBM still sells mainframes, and Microsoft and the PC are not going anywhere -- they've just become a boring part of the tech industry.
"are either 1) made by Microsoft and have been good enough for a while (Office) or 2) games, "
ReplyDeleteErr, what about MatLAB, Power Flow, Simulink, all other CAD software?
You'll never have a replacement on the web for them.
What about IDE's for embedded?
I for one welcome the new API but not for the reasons you list. For one, string should be just that string no distinction between UTF8, UTF16,
Why should there be a CreateWindowA, CreateWindowW, etc?
I want:
class MyWindow : CreateWindow
{
}
These are the reasons for the new API