The concept of virtualisation (generic, e.g. virtual memory, virtual methods, virtual machines), and how it relates and contrasts with emulation (e.g. terminals, machine emulation a-la qemu) and abstraction. In a nutshell:
virtualisation: disconnecting an existing interface from implementation while keeping the implementation the same. often done for logistical reasons - improved resource management. E.g. hypervisors, virtual memory
emulation: disconnecting an existing interface from implementation but providing it by a different unrelated implementation, pretending to be the original thing. Often done for compatibility. e.g. terminals
abstraction: creating a new interface; this implies existing implementations do not dictate the interface. Usually done to reduce semantic surface (limit possible inputs), simplify and/or add high level features.
Over time abstractions break and become dependent on their implementation, eventually requiring virtualisation and emulation.
The concept of virtualisation (generic, e.g. virtual memory, virtual methods, virtual machines), and how it relates and contrasts with emulation (e.g. terminals, machine emulation a-la qemu) and abstraction. In a nutshell: