Maszyna wirtualna (VM) to oprogramowanie, które może uruchomić program lub aplikację bez powiązania z maszyną fizyczną. W ramach maszyny wirtualnej na komputerze-hoście może działać jedna lub więcej maszyn gościnnych. Każda maszyna wirtualna ma swój własny system operacyjny i działa niezależnie od innych, nawet jeżeli są one na tym samym fizycznym hoście. Maszyny wirtualne są najczęściej uruchamiane na serwerach, ale często spotyka się je na systemach stacjonarnych, a nawet na platformach wbudowanych. Wiele maszyn wirtualnych może bez problemu współdzielić zasoby z fizycznego hosta, w tym zasoby procesora, pamięci i sieci.
Maszyny wirtualne powstały w początkowej fazie rozwoju informatyki. W latach 60. XX wieku w celu oddzielenia oprogramowania od fizycznego hosta stosowano współdzielenie czasu dla użytkowników komputerów mainframe. Pojęcie maszyny wirtualnej zostało zdefiniowane na początku lat 70., jako duplikat fizycznego komputera. Obecnie wykorzystywane maszyny wirtualne zyskały na popularności już w XXI wieku, gdy firmy przyjęły wirtualizację serwerów, aby efektywniej wykorzystać moc obliczeniową serwerów fizycznych, dodatkowo zmniejszając ich liczbę i oszczędzając miejsce w centrum danych. Ze względu na to, że aplikacje o różnych wymaganiach systemowych mogą być uruchamiane na jednym fizycznym hoście, dla każdej z nich nie musi być przewidziany inny sprzęt serwerowy.
Wśród maszyn wirtualnych wyróżniamy dwa podstawowe rodzaje: procesowe maszyny wirtualne, które wydzielają pojedynczy proces, oraz systemowe maszyny wirtualne, oferujące pełne oddzielenie systemu operacyjnego i aplikacji od fizycznego komputera. Przykładami procesowych maszyn wirtualnych są Java Virtual Machine lub .NET Framework. Systemowe maszyny wirtualne opierają się na hyperwizorach jako pośrednikach. Dają one oprogramowaniu dostęp do zasobów sprzętowych. Hyperwizor emuluje m.in. procesor, pamięć, dysk twardy i sieć, tworząc pulę zasobów, które są przydzielane poszczególnym maszynom wirtualnym, zgodnie z ich specyficznymi wymaganiami.