In the Scala 2.13 docs, the description for NonFatal is:
Extractor of non-fatal Throwables. Will not match fatal errors like VirtualMachineError (for example, OutOfMemoryError and StackOverflowError, subclasses of VirtualMachineError), ThreadDeath, LinkageError, InterruptedException, ControlThrowable.
Why are only these errors / exceptions considered fatal? In Java8, there are more Error subclasses, each of which "indicates serious problems that a reasonable application should not try to catch". Example of these include CoderMalfunctionError, FactoryConfigurationError, and IOError. I won't claim to know the precise meanings of these errors, but if Java thinks these errors are serious problems, why shouldn't Scala also think the same?