What is a hard error, and what makes it harder than an easy error?
devblogs.microsoft.com
devblogs.microsoft.com
> These messages were special because they were generated from inside the I/O system
A whole generation of computer users has wondered this.
According to Wikipedia[1], "abort" aborted the program (terminated it), and "fail" returned an error code to the program. (Which … probably has a high likelihood of killing it all the same, since a given random I/O is probably pretty non-optional.)
Wikipedia also notes,
> the message has been cited as an example of poor usability in computer user interfaces.
You could override this however: https://web.archive.org/web/20100206220048/http://webster.cs...
OK, so from 1985 with Windows 1.0 until 2001 with the release of Windows XP, consumer versions of Windows were built on top of MS-DOS. For the latest releases -- Windows 95, Windows 98, and Windows Me -- DOS was bundled together with Windows to make a complete operating system product. But before then, up through Windows 3.11, you had to say 'win' at the DOS prompt to get into Windows.
But the thing you have to remember is that DOS was barely an operating system. It had a rudimentary file system, support for a single process, and no memory protection to speak of at all. You could bypass the OS altogether to directly access the hardware; most DOS applications, especially games, did just that for everything except file access. So Windows actually provided a lot of operating system functionality that DOS didn't and called down into DOS routines for file access.
(In fact, you could even chainload an operating system like Linux from DOS. A program called LOADLIN.EXE let you load and run a Linux kernel from the DOS command line; combined with special file system support called 'umsdos' that overlaid Linux file semantics on top of the DOS FAT file system, this meant that you could run full Linux, from DOS, in your existing DOS partition!)
But even then -- starting in Windows 3.1 (or 3.11, I forget which) a new feature emerged called "32-bit disk access". Windows provided its own routines to handle the DOS file system while it was running, eliminating the need to call down to DOS at all. This was optional on Windows 3.x but the default on Windows 9x (including Me). So DOS was relegated to the role of a bootloader for Windows and a compatibility layer you could escape to for the old DOS programs people still wanted to run (like Doom, Duke Nukem 3D, and such).
So Windows started off as a layer on top of DOS, which was command-line driven, but once loaded it became most or all of a graphical, multitasking operating system in its own right. And it had its own, built in window manager; matter of fact it had more of one than Mac OS, in which user application code had to handle things like moving, resizing, and closing windows (for which utility functions were provided).
Windows NT, which consumer versions of Windows from Windows XP onward were built on top of, has existed since 1993 and that's its own thing, having a 32-bit fully preemptive multitasking kernel with memory protection, user permissions, and the whole bit. It was used primarily in server applications before Windows XP.
Aside:
You reminded me of my first time using Linux, it was Slackware and I had to type "startx" after logging on to get to the GUI.
Fail means return from the system call with a failure code.
I used to wonder this myself.
What's the difference between abort and cancel?
uhh ...
https://www.betaarchive.com/imageupload/1261286563.or.360017...
All the 3-button versions of the dialog I recall are Abort/Retry/Ignore, not Cancel. So it's kind of hard to answer "what does Cancel do"!
Having said that, the article points to a dialogue box of which says Cancel instead of Ignore. Perhaps the dev got the naming wrong too?
If the error kept occurring you would just keep getting dialog windows.
Abort was then to essentially try to kill that particular task/process.
“‘Abort, Retry, Fail?’ was the phrase some wormdog scrawled next to the door of the Edit Universe project room. And when the new dataspinners started working, fabricating their worlds on the huge organic comp systems, we’d remind them: if you see this message, always choose ‘Retry.'”
— Bad’l Ron, Wakener, Morgan Polysoft (SMAC)> The opposite of the “hard error” message was the “soft error” message, which was your regular MessageBox.
I think it was just an opening hook thing.
Disk errors happening after a deferred write are a classic example that's still applicable today. Your process might have succeeded a write(2) into cache and exited cleanly, then when it's time to write to disk, something bad happens. There's no way to tell an application that is long gone.
I'm illustrating a real world scenario where such a mapping may not be possible.
Further, if the issue is a global problem, like filesystem corruption, it becomes even more ambiguous -- maybe that write could have worked or maybe it wouldn't, but the filesystem may just globally make everything read only and start failing writes.
So my point is that these errors were meant for catastrophic failures that don't map neatly into being handled with the process. In a modern kernel there are way fewer of these conditions than was acceptable in the early 90s. But there are a few similar things that are still common.