>It wasn’t truly a full 32-bit operating system, because there was still MS-DOS at the core if you dug deep enough.
Yes it wasn't truly 32-bit but the core was not MS-DOS. It was a hybrid. The Win95 kernel was 32-bit and drove almost all of the system, including memory. 16-bit DOS was used as a launching pad and then it's job shifted to handle 16-bit graphics and other hardware that was unable to work with the new 32-bit kernel. So you booted 16-bit DOS, and as WIN.EXE executed, the system transmorphed from 16-bit into a 32-bit (kernel) OS but some of that core 16-bit driver code was designed to remain welded onto it. Even more impressive is how you could dissolve this 32-bit level and return the system to 16-bit DOS. That remains a very impressive achievement 30 years later. Happy anniversary Windows 95!
It’s not correct to say it was “really 16-bit”, no, but as Unauthorized Windows 95[1] eloquently demonstrates, neither was Windows 3.1 or 3.11, especially with Win32s, and Windows 95 was much more of a direct descendant of that environment that the marketing implied.
And on a more personal note, reading the descriptions of the mixed 16/32-bit architecture always makes me feel conflicted.
On one hand, the technical achievement is somewhere between genius and madness and I’m not sure on which side—not only did they ship a hypervisor in a consumer OS in 1987 (as “Windows/386”), they also flipped a live MS-DOS with an unknown complement of drivers and binary patches from running on live hardware to running inside a(n admittedly unsafe) VM, then proceeded to use those drivers and respect the patches including in applications written for Windows and not MS-DOS. I don’t think I have the sort of arrogance it takes to even think of attempting such acrobatics.
On the other hand, I was there, I grew up on computers that ran Windows 95 and 98, and I remember just how much better Windows 2000 was, how much more comfortable it was to not worry about the system crashing on you every half an hour. Perhaps 95 was a magnificent technical achievement, but it certainly didn’t feel like one to the user. And thus I continue to feel conflicted.
There’s also the question of why, exactly, was NT too heavy to run on contemporary consumer machines. You could say it was bloated, but so was Windows 95: the multiple 16/32-bit mode transitions it took to write to a file certainly weren’t free; and don’t get me started[2] about shipping a COM-based shell, realizing it was too heavy for the minimum RAM requirement, and solving that by shipping a second, stripped-down copy of COM then live-swapping the real one in its place as soon as the fake one became insufficient.
[1] https://www.os2museum.com/wp/book-review-unauthorized-window...
[2] https://devblogs.microsoft.com/oldnewthing/20040705-00/?p=38...
I noticed back in the days that my FidoNet point client software ran a lot faster (actually processing a lot of messages, so IO and CPU heavy) in Windows than in DOS, which was unintuitive to me back then.
It's WIN.COM, by the way.
When Windows didn't have a driver for some hardware, it would tell you it's "using 16-bit driver" (or was it DOS driver?). So it's all 32-bit.
Hah, this reminds me of Win32s on Windows 3.1x...
Furthermore, legacy x86 BIOS will always boot in 16-bit real mode and require transition to 32-bit protected mode. Even NT is briefly 16-bit on those platforms, and Windows 95 only remains so just a little bit longer for backwards compatibility sake. It was less of a chimera than most of us thought.
The way Windows 95 could use DOS device drivers despite being 32-bit was fairly incredible. I think that fooled a lot of people into thinking it really was running on top of DOS, when in reality, once it has booted, the reverse is the case. https://devblogs.microsoft.com/oldnewthing/20071224-00/?p=24...