Joel Spolsky has a very interesting article about How Microsoft Lost the API War. Regardless of one's opinions about Microsoft, Joel's article is a very worthy read. I don't agree with all of Joel's opinions on software, or even in this article, but he makes some great points and shines some light into the development ideals that have driven Microsoft in the past in comparison to what seems to be driving them now.
There are some statements in Joel's article that I have to take issue with, based on personal experience and stories told by other developers. Early on, Joel claims that the Macintosh core developers never cared about backwards compatibility the way the likes of Raymond Chen (a developer on the Windows team since 1992) did. Not compatibility in terms of the published API, but in terms of undocumented uses of the system or even flagrant violation of a "thou shalt not" in a programming bible. I've been using Macs for most of my adult life, and outside of system utilities or applications that make extra special demands of specific hardware, I've had very good compatibility. That continues to this day in Mac OS X, thanks to the "Classic" emulation mode. There are some things, particularly, that don't perform well under Classic, but those tend to be applications that are used to having an operating system that lets the front most application hog all the resources they need.
Joel claims that he has DOS applications he wrote in 1983 that still run under Windows, thanks to the work of the likes of Raymond Chen, and I don't doubt that. But at the same time, I remember being wowed when I saw IBM's OS/2 Warp live up to it's mantra of "A better DOS than DOS." A friend of mine worked for a messaging division of a telecommunications company. Much of the software that was communicating with pagers was written for DOS, using very low level interrupts (ones that had been on the forbidden list for some time) and definitely expecting to be a lone process all alone on a machine. OS/2 Warp could run multiple instances of these DOS programs, with each one still thinking it had the perfect little environment all to itself. Windows NT would not run even one.
Another friend once told me the story about the "68k" emulation used in the PowerPC chips, which allowed Apple to do a fairly daring move with obvious success - changing processor platforms. In order for the PowerMac line to work, it needed to be able to run machine code that was compiled for the older 68040 chips. Never mind the cool feat of packaging "fat apps", which could contain both 680x0 and PowerPC compiled code, all of the old applications needed to keep running. Motorola was struggling with their emulation code, and kept running into compatibility problems. Apple, on the other hand, got it working. Apple's secret? Instead of emulating the perfect specifications of the 68040, they also emulated its bugs. I've never gone looking for confirmation on this story, and am too lazy to do so right now, but even if it's not entirely true as I've told it - the story is a fascinating little parable.
In the personal computer market, I doubt anyone has achieved any real pure level of compatibility. But I think Joel's point is that there was definitely a sort of "golden age" that has passed us. Sure - the Win32 API is a strange and unwieldy beast, but it's pretty much been a rock. I am still pleasantly surprised with how many applications I see listing themselves as "Compatible with Windows 98 or later, NT 4.0 or later," or even how many retain compatibility with Windows 95 (although it can be hard to determine just which Windows 95 is being talked about - I love that Apple still uses release numbers somewhat sensibly). But now, combined the weight of supporting historical limitations and oddities with a more pressing need to encourage upgrades to newer and better things, recent releases by both Apple and Microsoft fall short in the compatibility area.
.NET, the grand new platform for the future of Windows development, has incompatibilities between its 1.0 and 1.1 releases - code for 1.0 might not necessarily work for 1.1. There were more than a few applications that broke between Mac OS X 10.2 and 10.3, leaving users waiting for upgrades from the application developers. While it's understandable that it might take a while for a major developer to take a while to bring an application from the classic Mac OS 9 world into the new world of Mac OS X, having small applications break between the comparatively minor 10.2 and 10.3 releases was a bit more annoying. I don't recall this being as big of an issue when going from Mac OS 7.6 to any of the releases (at least, up to 9.0, where the road to OS X started to be paved in full and oddities crept in to the OS).
Granted, both platforms are still fairly young, with Mac OS X maturing (after the upcoming 10.4 "Tiger" release, Apple has said that OS X development will slow down significantly) nicely. .NET seems nice, but maturity is harder to gauge. For a 1.x release, it doesn't seem all that bad, although Joel points out that most successful development with .NET is in the web based ASP.NET system, which also works on Mono (Joel goes on to talk nicely about web development). But the great and mythical "Longhorn" release of Windows brings many many many more changes to the table, including a new replacement for the Win32 API in the form of WinFX. I don't think this is necessarily a bad thing, but then again, I don't develop for Windows and I'm interested in Longhorn as an interesting study in other ways to do an operating system and environment that's not Unix based. This is nothing against Unix, it's just interesting to see other models. I still think that in many ways, our current desktop operating systems are a few steps behind the wild dreams of the mid-nineties, when visions of Cairo, Copland, Taligent, OpenDoc, OS/2, BeOS, and more, swam in our heads - or at least, in mine. We're catching back up, but it's still sad to see that some of the cooler ideas that ran on the Lisa in 1984 have all but disappeared.
Joel's essay is really quite interesting. These have just been a few of my thought's that it's spurred. I've thought about much more - The false start of Rhapsody before Apple's Mac OS X / "Carbon" plans; the number of stillborn "grand new ideas" out of Microsoft; and so on.