Hvordan fungerer x86-oversettelse på Windows on Arm?

Mange Windows-applikasjoner ble skrevet for x86, og kan likevel fungere på Arm CPUer. Her er hvordan det er mulig.

Windows har alltid vært laget for x86 CPUer fra Intel og AMD, men helt siden Windows RT kom ut for et tiår siden for smarttelefoner, har operativsystemet sakte blitt mer vennlig for Arm CPUer. I dag tilbyr både Windows 10 og Windows 11 komplett støtte for arm-CPU-er, men det er en hake. Mens selve operativsystemet fungerer helt fint på disse CPUene, har de fleste applikasjoner ikke lansert en Arm-kompatibel versjon. Selv om Windows kan kjøre på Arm-brikker, vil det være et problem å ha få programmer å faktisk bruke.

Microsoft har imidlertid et triks i ermet: en emulator for å få x86-apper til å kjøre på Arm-baserte maskiner. Det er nøkkelen som har gitt Windows on Arm momentum siden oversetteren kom ut i 2017. Her er hvordan emulatoren fungerer, og hvorfor Arm-PCer må bruke den hvis de vil kjøre programvare laget for x86-brikker.

Emulerer x86-kode for Arm CPUer i sanntid

Ideen om å emulere kode laget for én type prosessor slik at den kan kjøres på en annen er ikke noe nytt. Dette er hvordan spillemulering fungerer, som populært brukes for å få gamle videospill til å kjøre på nye enheter med vidt forskjellig maskinvare. Når du kjører en x86-app på en Arm-PC, tar Windows blokker av appens kode og kompilerer den til noe som kan kjøres på en Arm-brikke. Alt dette gjøres i sanntid, og Windows må cache all koden den er oversatt, noe som betyr at den ikke trenger å oversette om og om igjen.

Dessverre kommer ytelsen til å bli dårligere på emulerte apper sammenlignet med koden designet for maskinvaren. Det er vanskelig å si hvor mye ytelse du mister ved å kjøre emulert kode på Windows siden testdataene er svært sparsomme, men til sammenligning, Apples Rosetta 2-oversetter (som også oversetter x86-apper til Arm) taper omtrent 20 %. Det er mulig å redusere dette tallet, men vanligvis resulterer emulering og oversettelse i en ytelsesstraff uansett hva.

Hvorfor x86-applikasjoner ikke kan kjøre på Arm uten emulering

Du lurer kanskje på hvorfor programvare må skrives spesielt for x86, Arm og andre typer CPUer. Det kommer ned til forskjell i arkitektur, og i dette tilfellet snakker vi om instruksjonssettarkitekturen (ISA). De er den mest grunnleggende utformingen av en prosessor og bestemmer om noe enkelt som multiplikasjon eller noe komplekst som AVX kan gjøres naturlig. Endring av ISA påvirker den mest grunnleggende måten programvare samhandler med maskinvare, ned til de grunnleggende og nullene som CPU leser.

x86 er ISA for Intel og AMD CPUer, som historisk sett har vært de eneste CPUene som Windows til og med kan kjøre på. Arm har i mellomtiden stort sett blitt brukt til smarttelefoner, og overlappingen mellom PC-programvare og telefonprogramvare er svært liten. Naturligvis er de fleste programmer enten laget for x86 eller Arm, og for Windows on Arm var dette et stort problem fordi oversettelse kom ikke ut i 2020, mens Windows RT (den første versjonen av Windows som støttet Arm) kom ut i 2012.

Det har gått omtrent et tiår siden Windows begynte å støtte Arm, så hvor er alle de opprinnelige appene? Det primære problemet er at det tar tid og ekspertise å omskrive programvare for en annen ISA, spesielt hvis utviklere ønsker å gjøre det bra. Utviklere som ikke tar riktig vare på å portere en app fra en ISA til en annen, kan føre til feil og feil. Et godt eksempel på dette er Photoshop for Windows on Arm. Den kjører naturlig på Windows on Arm, ennå i vår anmeldelse av Lenovo Thinkpad X13s, fant vi flere feil og mange advarsler om at OpenCL og OpenGL ikke ble støttet. Sammen med en mye mindre brukerbase som bruker Arm på Windows, er det mindre insentiv for utviklere å bry seg.

Så når utviklere ikke kan eller vil bruke ressursene på å lage innebygd programvare, er alternativet emulering. Selv om det ikke er perfekt å oversette x86-apper for Windows on Arm, er det imponerende at det fungerer i det hele tatt, og noen ganger er det verdt å miste ytelsen å vite at appen vil kjøre som forventet. I det minste inntil Windows on Arm når et punkt hvor utviklere ikke lenger kan ignorere det, gir oversettelse og emulering det et sårt tiltrengt løft til maskinvare-programvare-økosystemet.