Yet Another PC v Mac Thread: Trans to NT v Trans to OSX

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?

Although generally true (and probably completely true for the kernel), I’m not convinced the separation is as absolute and clinical as MS would like us to think. The ‘Add Fonts’ dialog, for example, is a legacy of the old 16 bit days.

They did it by virtualising the old Windows environment inside NT - using NTVDM (the NT Virtual DOS machine) and WOWexec (Windows On Windows). There’s no particular technical reason why Apple couldn’t have done the same - it’s not a million miles different from the virtualisation that enables us to run, say, Windows apps in Linux (using Wine or Cedega), or windows apps on a mac with Parallels.

I think Win32 binaries run natively on Windows 9x and NT, the two OS families having their own versions of the API DLLs. Windows On Windows is for running Win16 (Windows 3.x) applications. Meanwhile, OSX and OS 9/8/etc. do not as I understand it share a common API.

They share the Carbon API, but OS 8/9 in the era prior to OS X didn’t have that API; it overlaps with the APIs of the OS 8/9 era, but extensions had to be installed on OS 8 (I think they came with 9) in order for it/them to run Carbon apps. OS X can run those very same apps natively under OS X.

So my question I guess, restated, is how was Microsoft able to use existing/legacy Win32 APIs while Apple had to rip some things out and add other things in in order to similarly use APIs of the MacOS 8/9 architecture, requiring those apps to be recompiled as Carbon apps in order to run in OS X natively instead of running only within the Classic virtual machine?

Was it “threading” or whether or not a process was “re-entrant” or something?

::he says, tossing around phrases that imply he knows more than he does::