Does the virtual machine provide an environment which is fundamentally
indistinguishable from a physical machine? Of course, there will be
some practical differences (like hypervisor call escape hatches, dummy
hardware component names, etc.) which allow the detection of a virtual
machine, but will there be any incompatibilities?
Os acessos de hardware ainda passam pelo SO host.
Os sistemas operacionais para PC foram desacoplados da maioria dos hardwares por um longo tempo. O Windows e o Linux empregam drivers que são o proxy para acesso ao hardware. Por causa disso, é possível fornecer drivers "paravirtualizados" que são um proxy para trabalhar em um ambiente virtual, tornando as coisas muito mais fáceis de implementar do que emulação - onde você teria que criar programas que 100% repliquem tudo o que é estranho e às vezes comportamento não documentado de CPUs e hardware.
If the environment is fully compatible with a physical machine, then
are nested virtual machines possible?
A instrução VMXON que "liga" a virtualização da CPU não funcionará quando a CPU estiver "em" uma máquina virtual. Se isso acontecer, ocorrerá uma "saída de VM" - o que significa que o controle é passado de volta para o hipervisor - e o sistema operacional host deve agora decidir o que fazer (geralmente emulando uma exceção de "instrução ilegal"). É possível que o SO host emule esta instrução e o restante do comportamento de virtualização da CPU, se desejado (seria difícil e mais lento).
If not, does that mean that the guest OS has to be specifically
adapted for running inside a virtual machine? If so, then does that
mean that most of today's OS'es have already been adapted for most VM
vendors?
Veja meu primeiro ponto. Drivers para virtualização para VMWare e outros hypervisores existem. O próprio core OS não tem que mudar a menos que A) seja algo strongmente acoplado a hardware específico como DOS e B) é decidido que mudar o SO é melhor do que emular o hardware que ele espera.
Are these things different for software-based virtualization vs
hardware based?
A virtualização baseada em software é mais lenta e provavelmente menos segura.
What exactly is the difference between software-based virtualization
and hardware-based?
Simplificando um bit, as CPUs x86 por um longo tempo tiveram geralmente dois níveis de privilégios, modo de usuário e supervisor, ou modo kernel. O suporte de virtualização de hardware adiciona um nível de privilégio superior ao do supervisor, ou seja, do hipervisor. Um exemplo de diferença é que a MMU que o sistema operacional da CPU usa para gerenciar as páginas de memória é estendida para permitir que os hipervisores trabalhem com ela. Isso torna mais fácil para um hipervisor alocar e isolar memória para uma VM específica. O IOMMU também é um recurso de hardware que também fornece muitos recursos que tornam a virtualização mais eficiente.