> To be That Guy: this is an emulator, not a VM. While the term can apply in a descriptive sense, and in the pre-hardware-virtualization past there was some ambiguity, the overwhelmingly common usage of "Virtual Machine" in the modern world refers to an environment making use of hardware virtualization features like VT-x et. al.
I don't think the distinction you're advocating for actually exists. 'Virtual machine' is commonly used for any software that executes machine- or bytecode, irrespective of the reason. This can include virtualisation, but you also commonly see the term used for language runtimes: e.g. Java's JVM, Ruby's YARV (Yet Another Ruby VM).
The one area you don't actually hear the term that often is in emulation, and this is in part because most modern emulators have tended away from emulating entire systems, and towards techniques like dynamic recompilation (dynarec) of emulated software.
Exactly, emulation is “make sure the input and output of what you’re emulating are the same”, whereas simulation is “model the actual internal mechanisms of the thing you’re simulating, so as to achieve the same inputs and outputs”.
I don't think the distinction you're advocating for actually exists. 'Virtual machine' is commonly used for any software that executes machine- or bytecode, irrespective of the reason. This can include virtualisation, but you also commonly see the term used for language runtimes: e.g. Java's JVM, Ruby's YARV (Yet Another Ruby VM).
The one area you don't actually hear the term that often is in emulation, and this is in part because most modern emulators have tended away from emulating entire systems, and towards techniques like dynamic recompilation (dynarec) of emulated software.