W większości nowoczesnych systemów operacyjnych, większość kodu programów
użytkowych, to wywołania funkcji bibliotecznych systemu operacyjnego. Poprzez
interface systemu komunikujemy sie z urządzeniami, otwieramy porty sieciowe,
często także poprzez API systemu rysujemy grafikę. W takiej sytuacji zamiast
emulować cały komputer, wystarczy emulować otoczenie które widzi program.
Takie podejście ma dwie duże zalety:
- Po pierwsze pisząc na nowo API pewnego systemu (Windows), przy użyciu innego API (UNIX + X11), łatwo zapewnić dobrą integrację aplikacji. Pozwala to użytkownikowi na stosowanie takich rzeczy jak mieszanie okien aplikacji z obu API i kopiowanie danych pomiędzy nimi.
- Po drugie jeżeli mamy do czynienia z emulacja API systemu który istnieje jedynie na dana platformę (Windows+x86), możemy skompilować emulator API do kodu maszyny na której pracujemy (np. Mac OS X + PowerPC). Dzięki temu prędkość działania funkcji bibliotecznych nie zależy od architektury, natomiast pozostały kod programu możemy tłumaczyć przy użyciu translatora (Wine + Qemu). W przypadku większości programów użytkowych daje to bardzo dobre wyniki wydajnościowe. Kod aplikacji jest proporcjonalnie mały (w sensie długości wykonywania) do wywołań systemu, które są szybkie. Oczywiście istnieje pewna grupa programów, których kod jest nieproporcjonalnie długi do wywołań systemu (filtry graficzne, rendering), i w ich przypadku zysk jest o wiele mniejszy.
Emulacja API najczęściej jest stosowana do uruchamiania aplikacji, które nie istnieje na używany system operacyjny. Najbardziej znanym przykładem emulacji API jest Wine