A VirtualMachine that guarantees that the code it executes cannot violate its type, thus allowing security enforcement via type constraints.
Examples:
One advantage of SafeVirtualMachine is to be able to apply TaglessGarbageCollection.
The JavaVirtualMachine uses this method to allow execution of UntrustedCode in a SandBox. Multiple disjoint code spaces can coexist in one VirtualMachine. In Java this separation is controlled by ClassLoaders and SecurityManagers.
In doing some VisualBasicDotNet development, I got an exception that came from deep in the system libraries. The exception was "Attempted to access invalid memory. This is an indication that other memory is corrupt." After some investigation (and some pointless HeroicDebugging), I determined the crash was in handling the message
See StronglyTypedWithoutLoopholes, ObjectCapabilityModel, ProofCarryingCode, TypedAssemblyLanguage