Emulaattori

Emulaattori tarkoittaa tietokonejärjestelmää, joka on suunniteltu käyttäytymään kuten toinen järjestelmä. Emulaattori on tietokoneohjelma, tietokonelaitteisto tai näiden kahden yhdistelmä, joka mahdollistaa ohjelmien suorittamisen toisella alustalla. Termi on lähtöisin IBM:ltä 1960-luvulla, jolloin mikro-ohjelman avulla voitiin emuloida aiempia IBM:n tietokoneita.
Muunlaisella alustalla voi olla erilainen suoritin, tietokone tai käyttöjärjestelmä kuin mille ne ohjelma on alun perin tarkoitettu. Yleensä emulaattori-ohjelma matkii emuloitavan tietokoneen tai pelikonsolin prosessorin ja muiden osien toimintaa ja tarvitsee käytettävät ohjelmat erillisinä tiedostoina. Emulaattoreita varten on tehty erikseen tiedostotyyppejä, joihin voidaan tallentaa emuloitavan laitteen käyttämien levykkeiden, ROM-moduulien tai CD-levyjen sisällöt yhteen tiedostoon, joita voidaan ajaa tiedostoja kätevästi emulaattori-ohjelmassa. Tyypillisintä emulaattoreiden käyttöä on jo markkinoilta poistuneiden tietokoneiden ja pelikonsoleiden pelien pelaaminen nykyisillä tietokoneilla. Emulaattoria voi käyttää myös esimerkiksi ajamaan Apple Macintosh-koneissa IBM PC -yhteensopivien käyttöjärjestelmiä ja ohjelmia. 
Useimmat emulaattorit ovat ohjelmallisia ja emuloivat kokonaista tietokonelaitetta suorittimineen, näytönohjaimineen ja muine osineen. Esimerkiksi klassisia kotitietokoneita ja pelikonsoleita emuloivat ohjelmat ovat tällaisia. Joissakin tapauksissa vanhojen tietokoneiden tai konsolien musiikkia toistetaan erikseen ohjelmilla, jotka emuloivat vieraan äänipiirin ja prosessorin toimintaa (esimerkiksi Commodore 64:n musiikkia sisältävien SID-tiedostojen toisto muulla tietokoneella). Tämä eroaa huomattavasti tavanomaisesta äänitiedoston soittamisesta.
Vieraiden käyttöjärjestelmien ohjelmien ajamiseen ei useinkaan tarvita täydellistä laitteistoemulaattoria ja vieraan käyttöjärjestelmän ajamista siinä, vaan pelkkä käyttöjärjestelmä- tai ohjelmistorajapinnan toteutus riittää. Esimerkiksi Wine ja Cygwin eivät ole varsinaisia emulaattoreita vaan lähinnä yhteensopivuusrajapintoja. On myös suoritinemulaattoreita, joilla esimerkiksi x86-arkkitehtuurille käännettyjä Linux-ohjelmia voi ajaa muunlaista suoritinta käyttävissä Linux-koneissa.
Monissa käyttöjärjestelmissä on itsessään jonkinlainen emulaattori tai rajapinta, joka mahdollistaa vanhempien ohjelmien käytön uudella järjestelmällä. Esimerkiksi Windowsit pystyvät jonkintasoiseen DOS-emulaatioon ja klassinen Mac OS pystyy ajamaan PowerPC-koneilla vanhoja Motorola 68000 -sarjalle tehtyjä ohjelmia. Lisäksi Intel-pohjaisissa Macintosheissa voi ajaa emulaatiorajapinnan avulla PowerPC-arkkitehtuurille suunniteltuja ohjelmia. ARM-arkkitehtuuria käyttävät Macintoshit sisältävät päivitetyn "Rosetta 2" -version Rosetta-emulaattoriohjelmasta.
Emulaattorit on suunniteltu suorittamaan eri suorittimelle tehtyjä ohjelmia toisella laitteistoalustalla, kun taas virtualisointi voi käyttää laitteen omaa käskykantaa.
Uuden laitteiston kehitysvaiheessa voidaan käyttää simulointia, jolloin suoritus voidaan pysäyttää halutussa kohdassa debuggausta varten.
Tekniikkaa.
"Thunk" tarkoittaa emulaatiossa viittausta yhdestä ajoympäristöstä (emuloitu järjestelmä) toiseen ajoympäristöön (natiivi ympäristö). Windows käyttää "thunk"-kutsuja WOW64:ssä jotta vanhat x86-ohjelmat toimivat x86-64-alustalla.
Ajonaikainen kääntäminen (JIT) toiselle konekielelle on tekniikka, jolla emulaation suoritusta nopeutetaan.
Laillisuus.
Videopelien julkaisijat toisinaan rinnastavat emulaation piratismiin, mutta laillisia emulaattoreita on julkaistu kuten Nintendon Virtual Console sen omilla alustoilla. Pelien lisensointisopimukset estävät toisinaan pelien julkaisemisen emuloituna: julkaisusopimukset sisältävät oikeudet, jotka lisenssiin kuuluvat ja nimeävät erikseen alustat, joille pelin voi julkaista ja virtuaalinen versio alustasta ei kuulu näihin. Uudelleenjulkaisu vaatisi uuden julkaisusopimuksen, josta tulee monimutkaisempi jos pelissä on lisensoitua musiikkia tai ohjelmistoa. Toisinaan uudet laitteet sisältävät vanhan alustan laitteistoa, jolloin peliä suoritetaan "samalla" laitteistolla mutta eri kuorien sisällä ja alusta on tällöin myös taaksepäin yhteensopiva, mutta valmistus maksaa enemmän.