I totally forgot you could do this, but back in the Windows 9x days, you could hold down shift while clicking restart, and it would perform a sort-of “soft” restart without going through a complete reboot cycle. What’s going on here?
The behavior you’re seeing is the result of passing the
EW_RESTARTWINDOWSflag to the old 16-bitExitWindowsfunction.What happens is that the 16-bit Windows kernel shuts down, and then the 32-bit virtual memory manager shuts down, and the CPU is put back into real mode, and control returns to win.com with a special signal that means “Can you start protected mode Windows again for me?”
The code in win.com prints the “Please wait while Windows restarts…” message, and then tries to get the system back into the same state that it was in back when win.com had been freshly-launched.
↫ Raymond Chen
There’s a whole lot more involved behind the curtains, of course, and if conditions aren’t right, the system will still perform a full reboot cycle. Chen further notes that because WIN.COM was written in assembly, getting back to that “freshly-launched” state wasn’t always easy to achieve.
I only vaguely remember you could hold down shift and get a faster “reboot”, but I don’t remember ever really using it. I’ve been digging around in my memories since I saw this story yesterday, and I just can’t think of a scenario where I would’ve realised in time that I could do this.

Once upon a time i was working for a communication firm. We then were contracted to make the audiovisual portion of a prestigious gala. This was in the days of macromedia director and the person who coded the presentation absolutely trashed the memory over time when idling for some reason. Since we failed to test real world conditions (6h total runtine), to avoid crashes we had to reboot the backup, put it where the master is, switch the video input to the backup, reboot the main… i wish i knew about that back then… all that for hours and hours… I hated my colleague so much that day.
Not running QNX, he ?
https://www.qnx.com/news/pr_2870_1.html?lang=cn
https://siliconsignals.io/blog/qnx-boot-time-optimize-techniques/
On a similar note, the “kexec” command will load and run a new kernel without the need for a reboot cycle. I use this a lot in my own kernel development and it speeds things up a lot compared to the BIOS.
Many computers mitigate slow loading times by putting computers to “sleep” instead, which bypasses the boot environment and the OS boot process too. But there’s no reason cold booting shouldn’t be more responsive, it’s just very poorly optimized. Given the specs of modern hardware it seems like things should be a lot faster than they are.
I agree, modern hardware should be able to cold boot much more quickly. Especially mobile phones, they are fixed hardware, so should be able to cold boot almost instantly.
tom9876543,
Individual components like the CPU start executing code nearly immediately. Hardware can be initialized in the blink of an eye. With micro-controllers with a fraction of the power we get to take this for granted even programming peripherals that are relatively slow. But with computers and cell phones we have so many layers of inefficient software executing sequentially with deliberate startup delays. I’ve got multiple NICs and each adds a noticeable delay to the bootup.. Individually these are relatively short, but since they don’t happen concurrently the CPU cores end up waiting for many billions of clock cycles during the boot process – the amount of real work done on boot is minuscule for a modern CPU. Hardware peripherals such as RAM, NICs, drives, keyboards/mice/GPUs/etc don’t need much time to initialize but are held back by Plug and Play standards from the 90s. So while hardware specs improved by multiple orders of magnitude we’ve made very little progress on the boot process. 🙁
We need to throw out legacy boot stacks and create a new one with strong emphasis around tighter timings and more parallelism. Also eliminate legacy CPU modes and focus on booting directly into an operating system with fewer bells and whistles. IRL new standards face tons of resistance even if they do manage to clean up some of legacy code. Consider “x86s”, which only went so far as to deprecate x86 REAL mode and didn’t even touch things like PCI plug and play, ended up falling flat.
If I were to bet on who could make instant boot happen, it would be a single company that has vertical control over the whole product and doesn’t rely on legacy standards to interoperate with others. This rules out most manufacturers though.
Apple is probably the company closest to being able to achieve something radically new in this regard. However, when being revolutionary gets you into a system tied to a vendor’s software, then there’s some resistance to it happening.
Broad standards are never ideal to anyone, but they are good enough to most and it is probably what remains of “owner rights” in the computing world.
Shiunbird,
I agree. It creates quite the dilemma. It’s very hard to get everyone on board with new standards. A vendor may have an easier time solving the problems on their own, but then I’d be very fearful of vendor locking.
Yeah. There are so many legacy standards that need fixing. The horrible mess that is email is a good example. It has so many faults with it and everyone knows it’s full of ugly hacks. Yet if we were to seriously look at replacing it IRL it would likely come at the cost of openness and federation that is built into the current email systems.
To me this is a big problem with all technology going forward. We can fix the problems for a net benefit, but if tech giants with an agenda are involved, they’ll use the opportunity to transform every new tech into a corporate power grab. I’m wary of more appliances/cars/etc connecting to the internet, not because there are no good applications for it, but because these days everything is designed for corporate enshitification.
Which is why I am very happy to build things on top of email =)
I used this feature all the time. Amazing to think how often we had to restart Windows 9x throughout the day. I always thought holding shift just exited to DOS and restarted Windows; never realized it was any more complicated than that.