Hvordan fungerer x86-oversættelse på Windows on Arm?

Masser af Windows-applikationer blev skrevet til x86, og kan alligevel fungere på Arm-CPU'er. Sådan er det muligt.

Windows har altid været lavet til x86 CPU'er fra Intel og AMD, men lige siden Windows RT udkom for et årti siden til smartphones, er styresystemet langsomt blevet mere venligt overfor Arm CPU'er. I dag tilbyder både Windows 10 og Windows 11 komplet understøttelse af Arm-CPU'er, men der er en hake. Mens selve operativsystemet kører fint på disse CPU'er, har de fleste applikationer ikke lanceret en Arm-kompatibel version. Selvom Windows kan køre på Arm-chips, ville det være et problem at have få programmer til rent faktisk at bruge.

Microsoft har dog et trick i ærmet: en emulator til at få x86-apps til at køre på Arm-baserede maskiner. Det er det vigtigste, der har givet Windows on Arm sit momentum, siden oversætteren udkom i 2017. Her er, hvordan emulatoren fungerer, og hvorfor Arm-pc'er skal bruge den, hvis de vil køre software lavet til x86-chips.

Emulerer x86-kode til Arm CPU'er i realtid

Ideen med at emulere kode lavet til én slags processor, så den kan køres på en anden, er ikke noget nyt. Sådan fungerer spilemulering, som populært bruges til at få gamle videospil til at køre på nye enheder med vidt forskellig hardware. Når du kører en x86-app på en Arm-pc, tager Windows blokke af appens kode og kompilerer den til noget, der kan køre på en Arm-chip. Alt dette sker i realtid, og Windows skal cache al den kode, den er oversat, hvilket betyder, at den ikke behøver at genoversætte igen og igen.

Desværre vil ydeevnen blive dårligere på emulerede apps sammenlignet med koden designet til hardwaren. Det er svært at sige, hvor meget ydeevne du mister ved at køre emuleret kode på Windows, da testdataene er meget sparsomme, men til sammenligning, Apples Rosetta 2-oversætter (som også oversætter x86 apps til Arm) taber omkring 20%. Det er muligt at skære det tal ned, men som regel resulterer emulering og oversættelse i en præstationsstraf uanset hvad.

Hvorfor x86-applikationer ikke kan køre på Arm uden emulering

Du undrer dig måske over, hvorfor software skal skrives specifikt til x86, Arm og andre slags CPU'er. Det kommer ned til forskel i arkitektur, og i dette tilfælde taler vi om instruktionssæt-arkitekturen (ISA). De er det mest grundlæggende design af en processor og bestemmer, om noget simpelt som multiplikation eller noget komplekst som AVX kan udføres indbygget. Ændring af ISA påvirker den mest grundlæggende måde, software interagerer med hardware på, ned til de grundlæggende og nuller, som CPU'en læser.

x86 er ISA for Intel og AMD CPU'er, som historisk set har været de eneste CPU'er, som Windows overhovedet kan køre på. Arm er i mellemtiden for det meste blevet brugt til smartphones, og overlapningen mellem pc-software og telefonsoftware er meget lille. Naturligvis er de fleste programmer enten lavet til x86 eller Arm, og for Windows on Arm var dette et massivt problem, fordi oversættelse udkom ikke i 2020, mens Windows RT (den første version af Windows, der understøtter Arm) udkom i 2012.

Det er omkring et årti siden, at Windows begyndte at understøtte Arm, så hvor er alle de indbyggede apps? Det primære problem er, at det tager tid og ekspertise at omskrive software til en anden ISA, især hvis udviklere ønsker at gøre det godt. Udviklere, der ikke tager den rette omhu med at portere en app fra en ISA til en anden, kan resultere i fejl og fejl. Et godt eksempel på dette er Photoshop til Windows on Arm. Det kører indbygget på Windows on Arm, endnu i vores anmeldelse af Lenovo Thinkpad X13s, stødte vi på adskillige fejl og masser af advarsler om, at OpenCL og OpenGL ikke blev understøttet. Sammen med en meget mindre brugerbase, der bruger Arm på Windows, er der mindre incitament for udviklere til at bekymre sig.

Så når udviklere ikke kan eller vil afsætte ressourcerne til at skabe indbygget software, er alternativet emulering. Selvom oversættelse af x86-apps til Windows on Arm ikke er perfekt, er det imponerende, at det overhovedet virker, og nogle gange er det værd at vide, at appen kører som forventet. I det mindste indtil Windows on Arm når det punkt, hvor udviklere ikke længere kan ignorere det, giver oversættelse og emulering det et tiltrængt løft til dets hardware-software-økosystem.