In the early to mid-90s, both Apple and Microsoft had operating systems that were legacies of far more limited hardware, and they had to either revamp them considerably or chuck them and start over. Both companies went with the latter option: Microsoft had acquired some disgruntled coders from Digital who had been working on an Intel version of VMS, and under Microsoft’s roof they produced Windows NT (VMS + 1 = WNT) which subsequently gave rise to Windows 2000 and then XP and now Vista; Apple, meanwhile, bought out the company started by former Apple honcho Steve Jobs, NeXT, and acquired NeXTStep/OpenStep, which after awhile saw new daylight as OS X.
NT (and 2K and XP and Vista) had no codebase link to Windows ME/98/95/3.x/etc, and yet it would run programs compiled to run under Windows 95 or later (at a minimum, sometimes older ones) as if they had been designed to run under NT (etc) to begin with. I’m not talking about subsequent releases that were recompiled to be native in either environment, but rather the original binaries, born somewhat prior to the rise (if not necessarily the debut) of NT.
OS X, which similarly had no codebase link to OS 9 (OS 8, System 7, 6, etc), only ran OS 9 apps by running an entire virtual machine as a process within OS X: you’d see OS 9 launch (you could optionally see the entire boot screen) and then once launched, the OS 9 app would run but it would look like and behave like an OS 9 app in some other world, aside from sharing TCP networking and the hierarchy of available volumes to open or save stuff to. (e.g., you’d have to separately install OS 9 printer drivers and then choose them in the OS 9 Chooser, totally independent of printers set up within OS X itself).
So, finally, on to the questions:
a) How did Microsoft do that? If that kind of thing was easy, I assume Apple would have done that too. Launch your OS 9 app within OS X and have it just behave like an OS X app from the get-go, no porting to Carbon required, etc. Which wasn’t the case.
b) Were there any nasty tradeoffs? Was the NT codebase or architecture compromised in any way in order to make it “friendlier” to Windows98 (etc) legacy apps and run them “natively”? Or was the codebase of Windows95 and beyond more conducive to being accomodated natively within a modern NTish environment than the OS 9 apps were on the Mac?
c) Expanding on that, if there were any nasty tradeoffs at the time, is there any relevant fallout from that within XP and Vista, or is it all ancient history by now?