Qual é a diferença entre um emulador e um VM?
Apenas por termos técnicos, um VM (Máquina Virtual) é um emulador. Ele emula a entrada/saída de um sistema de hardware através de software.
A percepção comum, porém, é que as VMs são mais adequadas para "virtualizar" sistemas operacionais inteiros porque, bem, elas normalmente estão rodando em um sistema que "de perto" se assemelha ao que estão emulando, em termos de arquitetura.
Um emulador - e eu assumo que estamos falando de emuladores de console aqui - tem uma abordagem diferente. Os programadores têm de fazer engenharia reversa e muitas vezes "adivinhar" como funciona o hardware original da consola. Eles precisam pegar atalhos porque eles têm que adaptar/emular o hardware/código original para um sistema completamente diferente. Não só isso, eles têm de correr através de muitas camadas o console original não, como, por exemplo, o sistema operacional da sua máquina, e isso é obrigado a fazê-lo correr MUITO mais devagar do que os consoles originais, que normalmente têm OS muito mais simples, se é que tem algum.
(VMs normalmente contornam isso literalmente rodando diretamente no processador, já que são feitas para rodar software de computador em um computador)
Então, em termos leigos...
Uma VM roda software de computador em outro computador, e por serem semelhantes, são bastante bem otimizadas.
Um emulador é o melhor esforço de um programador para fazer um jogo de console rodar com qualidade e velocidade decente, adivinhando como o console original funciona e pegando atalhos sempre que possível.
E só para deixar claro... A maioria dos emuladores Android são VMs simplificados. Eles até usam a maioria das mesmas tecnologias que as VMs mais robustas (como, digamos VirtualBox) usam para fazer seus aplicativos móveis rodarem mais rápido. (Also, phones are closer cousins to PCs than consoles.)
Hope this helps… Have a great one!