As all programmers with a bit of code-fu (excuse the pun) know, truly excellent programs have truly excellent error management. When something goes bump in the night, your program should tell the user "This has gone wrong, and this is what you should do about it." Obviously you should try to write software that doesn't generate errors, but especially with larger pieces of s/w, ie OS's, this is not really feasible. So you should aim to handle errors in a mature and responsible fashion.
Windows 9x handles errors by throwing its hands in the air and screaming "I'm melting! Melting!". The BSOD is a classic example of this. Is it useful? Certainly not. Is it informative? Hell no. Does it really frustrate the user? You're damn right it does. As another example of poor error management, I have actually seen Win98 generate the error message ... wait for it.
An error has occurred.
Oh my god! If I'd written something that bad, I wouldn't be able to look at my own face in the mirror. I'd have to sit in a corner and cry in shame, take a vow of poverty and spend the rest of my life writing Open Source apps in Perl to atone for my sins.
Win9x is not very stable. Surely MS are aware of this. Why then did they not write the OS such that it could handle its instability in a rational and helpful fashion? It wouldn't have been that hard. Not for a company with the kind of resources they have.