Obydwie przedstawione wcześniej metody wirtualizacji posiadają poważne wady. Pełna emulacja pozwala wirtualizować dowolny sprzęt na dowolnej architekturze, jednak wiąże się to z koniecznością tłumaczenia kodu z jednej platformy na zrozumiały dla innej. Jest to procesem tak wolnym, że uniemożliwia wirtualizację co bardziej skomplikowanych architektur w czasie rzeczywistym. Z kolei emulacja API wymaga de facto przepisania istniejącego interfejsu API dla innego systemu, co jest trudne ze względu na możliwe zmiany standardu, zamknięty kod źródłowy tudzież niekompletną dokumentację emulowanego systemu.
Ponadto, jedną z najczęstszych przyczyn stosowania wirtualizacji jest potrzeba jednoczesnego uruchomienia dwóch (lub więcej) systemów operacyjnych zaprojektowanych dla jednej architektury - np. Windows i Linuxa dla komputerów x86. Warto wykorzystać taką sytuację - zbędne staje się powolne tłumaczenie kodu procesora, można próbować wykonywać kody obydwu maszyn na tym samym procesorze. Wirtualizacja "właściwa" (nazwana tak dla odróżnienia od całego zagadnienia wirtualizacji) wykorzystuje ten pomysł - dzięki temu maszyna wirtualna pracuje z prędkością prawie-natywną, ponieważ korzysta z prawdziwego procesora.
Niestety, zazwyczaj niemożliwe jest po prostu pozwolenie maszynie wirtualnej na pełne korzystanie z procesora. Większość popularnych architektur - w tym Intel x86 - nie była projektowana z myślą o takim zastosowaniu. Np. urządzenia zewnętrzne są przystosowane do pracy pod kontrolą tylko jednego systemu. Podobnie procesor - takie mechanizmy jak stronicowanie, ochrona pamięci, poziomy uprzywilejowania, nie są przystosowane do wirtualizacji. Na szczęście większość instrukcji procesora nie stanowi problemu, i to na nich zyskuje się prędkość, omijając konieczność tłumaczenia. Można zatem podzielić instrukcje na kompatybilne z wirtualizacją i niebezpieczne, czyli niekompatybilne.
Problemem pozostają urządzenia zewnętrzne - tu niestety trzeba zastosować "zwykłe" techniki emulacji sprzętu (stąd bierze się nazwa wirtualizacja sprzętu). Problemem jest emulacja szerokiej gamy przeróżnych urządzeń. Popularnym rozwiązaniem jest zapewnienie przez program wirtualizujący emulacji podstawowego zestawu urządzeń zewnętrznych (jeden typ myszki, jeden typ karty graficznej itp.). Emulacja ta stanowi powłokę między sprzętem wirtualnym a rzeczywistym - szczególnymi aspektami konkretnych urządzeń zainstalowanych w komputerze zajmują się już sterowniki systemu-gospodarza.