Istnieje kilka technik tworzenia wirtualnej maszyny:
Zduplikowanie funkcji jednego systemu w innym. Drugi system zwraca te same wyniki co pierwszy. Mówimy wtedy że pierwszy system jest emulowany przez drugi. Poważną wadę tego rozwiązania stanowi efektywność. Każda instrukcja procesora w "Guest OS" jest tłumaczona na kilka poleceń języka C (emulatory często są pisane w C). Każde z poleceń C z kolei powoduje wykonanie wielu instrukcji procesora na rzeczywistej maszynie. W przypadku gdy systemy "Host OS" i "Guest OS" są przystosowane do różnych architektur potrzebne jest odtworzenie architektury gościa na gospodarzu. Pociąga to za sobą stworzenie wirtualnego procesora, pamięci, dysków, interfejsu sieciowego. W przypadku zgodnych architektur możliwe jest korzystanie ze wsparcia sprzętowego.
Przykłady: Bochs, QEMU
Komunikacja między aplikacjami a system operacyjnym z którym dana aplikacja współpracuje odbywa się poprzez określony interfejs. Interfejs ten nazywany jest API (Application Programming Interface). Jeżeli dana aplikacja wymaga określonego systemu operacyjnego to tak naprawdę wymaga określonych reakcji na funkcje interfejsu API. Aby umożliwić uruchomienie aplikacji pod innym system należy zaemulować funkcje API. Korzyścią płynącą z emulacji tylko poleceń interfejsu API jest większa wydajność niż w przypadku emulacji całego systemu. Niestety nie dla wszystkich systemów została zaimplementowana emulacja API (emulacja API jest inna w przypadku systemów o innej architekturze).
Przykłady: Wine
Nie jest możliwe uruchmianie dwóch systemów operacyjnych w tym samym czasie na tym samym komputerze. Sprzęt jest zaprojektowany w ten sposób że może go używać w danym czasie tylko jeden system. Pojawiają się także problemy z używaniem mechanizmów związanych z procesorem (stronicowanie, mechanizmy zabezpieczeń, segmentacja itp.). Zagadnienie wykonywania wielu aplikacji równocześnie (również wymagających różnych systemów) jest mniej kłopotliwe i może zostać rozwiązane. Spora część instrukcji może być wykonywana na różnych systemach. Tylko część z nich jest niekompatybilna z systemem "Host OS". Ogólna strategia wirtualizacji polega na wykonywaniu sporej części instrukcji na rzeczywistym procesorze i wykrywaniu tych niekompatybilnych (wystarczy emulować zachowanie się tylko tych instrukcji). Wirtualizacja przeto często bywa nazywaną quasi-emulacją. Należy także emulować pewien zestaw narzędzi peryferyjnych (urządzenia I/O itp.). Zaletą w zestawieniu z pełną emulacją jest dużo lepsza wydajność. Unikamy też korzystania ze standardów API (przewaga nad emulacją OS/API).
Przykłady: Virual PC, XEN