Though it looked sort-of pretty at the time, mostly compared to its previous releases, it didn't really do anything that users truly wanted from a new OS (which was, mostly, 'run Lotus or dBase better').
Only when 3.1 was released, with DPMI which, despite being a pretty obscure technology in itself, was an absolute game-changer, as well as the foundations of the never-named (but critically important) VxD "overlay OS", Windows became the powerhouse it still is, at least on the desktop, today.
The "3.11 for Workgroups" release (which should really have been 4.0: the VxD layer was greatly enhanced to great effect, and for the first time Windows had useful networking facilities!) cemented that position.
But 3.0 was really pretty "meh", and history could have gone a few other directions at the time of its release...
3.11, with its simple local network functionality doomed NetWare. Unless you needed to connect remote offices to a single network, 3.11 was all you needed.
What does this mean? I didn't remember Windows 95 and 98 SE as having cooperative multitasking. I'm reading that 95, 98 and ME had preemptive multitasking on a Win32 kernel for 32 bit applications, and only went back to cooperative multitasking for 16 bit apps [1].
[1] https://fr.wikipedia.org/wiki/Multit%C3%A2che_pr%C3%A9emptif... (yes, the French version has this info, not the English one)
As usual, there's a Raymond Chen post: https://devblogs.microsoft.com/oldnewthing/20100517-00/?p=14...
Biggest Disadvantage: its still windows
90s_dev•7h ago
Wait a minute, you're saying we started with await/async, and moved away from it, and then back to it?
jraph•7h ago
Having to trust that random apps behave is very uncomfortable. If some bug makes an app enter an infinite loop, it's a freeze and you are good for a reboot. So we went to preemptive multitasking and we never went back to cooperative multitasking.
Inside an app written by one entity, why not? We have all the tools needed to manage apps that froze, restarting apps might be less of a big deal, and there is not necessarily the need for competing things inside an app. To the exception of the GUI, which should remain responsive, so either (1) you make sure computations are always imperceptibly short, or… (2) you are back to a dedicated thread for the GUI, handled with the preemptive multitasking capabilities of the OS. Web apps and Javascript have been more or less (1), but workers have been introduced to have (2), because (1) is quite limited. So, even there, cooperative multitasking has its limits.
qubex•4h ago