  For decades, the guidance given to software engineers has been to check the
memory allocation results. This validation step is necessary to avoid crashes.
However, in user mode, in modern operating systems (OS), such as Android,
FreeBSD, iOS, and macOS, the caller does not have an opportunity to handle the
memory allocation failures. This behavioral trait results from the actions of a
system component called an out-of-memory (OOM) killer. We identify that the
only mainstream OS that, by default, lets applications detect memory allocation
failures is Microsoft Windows. The false expectation that an application can
handle OOM errors can negatively impact its design. The presence of
error-handling code creates an illusion of reliability and is wasteful in terms
of lines of code and code size. We describe the current behavior of a sample of
popular OSs during low-memory conditions and provide recommendations for
engineering practices going forward.
