yesterday someone asked me if I could resolve the "eternal question" of whether Windows (pre-NT) was "just a shell for DOS." my answer is an unequivocal no, since this assertion never existed in good faith; it's on par with "fix or repair daily :)))))))))", it's just a snarky thing that some jerkwad on usenet came up with solely to start fights. still, before I answered, I did give it a few minutes thought to decide why i was sure of this
"shell", definitionally, is an interface for an existing operating system. Microsoft's own DOS Shell, for instance, does nothing more than streamline access to existing DOS system calls, and launch native DOS applications. X-Tree Gold also did little more than provide interfaces to "move", "attrib", "rename" and so on. even /bin/bash, which has been used to write entire sophisticated applications, is little more than a program launcher with dipping mustards.
this never really applied to Windows, and with every year it existed, it applied less. the very first version of the OS, in 1985, provided an extremely rich set of APIs. some depended on underlying DOS system calls, sure, but that really doesn't mean anything.
"operating system", in 1981, meant a very different thing than it does now. DOS was nothing but a handful of system calls. it had no HAL; it didn't sit in between processes and hardware, unless they opted to do so. you could ask DOS to access a hard drive or a graphics card for you - or you could just blow past it and access the hardware yourself. DOS couldn't get in your way, because when your program was running, DOS wasn't.
literally, as soon as you launched an app, DOS stopped executing. it remained resident in memory, but it had no agency. your program owned the CPU in its entirety, and could keep it until you powered the machine off. the only things that would cede control back to the OS were system calls or hardware interrupts, almost all of which could be ignored.
the same is true for other contemporary platforms. the early PC was closer to an 8-bit home computer than what we think of now, and the OSes that came out for the Apple II and Atari 400 were similarly thin; applications did 95% of the work themselves, and relied on the OS only for tedium like "write text to the screen, i don't really care how long it takes"
unlike what we now think of as "an OS", DOS did not manage processes, or gate access to hardware. it had no HAL. it was, for the most part, simply a library that programs could rely on - and not a very big one. if microsoft had decided to make Windows totally independent of DOS, it would have taken them a couple weeks to rewrite the handful of relevant system calls. they didn't do this because one of the primary features of windows was the ability to run legacy DOS apps. so yeah, duh, of course DOS still needed to be resident.
the amount of sophistication in the very first release of Windows, ignored and unsuccessful as it was, made DOS look like Hello World. programs running under Windows 1 did not need to know that DOS existed. i think, at the point where something literally has its own executable format, you have to admit that it's an operating system.