Spousta aplikací pro Windows byla napsána pro x86, a přesto mohou pracovat na procesorech Arm. Zde je návod, jak je to možné.
Windows byl vždy stvořen pro CPU x86 od Intel a AMD, ale od té doby, co před deseti lety vyšel Windows RT pro chytré telefony, se operační systém pomalu stává přátelštějším k Arm CPU. Dnes Windows 10 i Windows 11 nabízejí kompletní podporu pro procesory Arm, ale má to háček. Zatímco samotný operační systém běží na těchto CPU v pořádku, většina aplikací nespustila verzi kompatibilní s Arm. Ačkoli Windows mohou běžet na čipech Arm, mít málo programů, které by bylo možné skutečně používat, by byl problém.
Microsoft má však v rukávu trik: emulátor pro spuštění aplikací x86 na počítačích založených na Arm. Je to klíčová věc, která dala systému Windows on Arm jeho dynamiku od doby, kdy překladatel vyšel v roce 2017. Zde se dozvíte, jak emulátor funguje a proč jej musí používat počítače Arm, pokud chtějí spouštět software vytvořený pro čipy x86.
Emulace x86 kódu pro Arm CPU v reálném čase
Myšlenka emulace kódu vytvořeného pro jeden druh procesoru, aby jej bylo možné spustit na jiném, není nic nového. Takto funguje emulace her, která se s oblibou používá pro spuštění starých videoher na nových zařízeních s výrazně odlišným hardwarem. Když spustíte aplikaci x86 na počítači Arm, Windows vezme bloky kódu aplikace a zkompiluje je do něčeho, co lze spustit na čipu Arm. To vše se děje v reálném čase a systém Windows musí ukládat do mezipaměti veškerý přeložený kód, což znamená, že jej nemusí znovu a znovu překládat.
Bohužel výkon bude v emulovaných aplikacích horší ve srovnání s kódem navrženým pro hardware. Je těžké říci, o kolik výkonu přicházíte spuštěním emulovaného kódu ve Windows, protože testovací data jsou velmi řídká, ale pro srovnání, Překladač Apple Rosetta 2 (což také převádí x86 aplikace do Arm) ztrácí asi 20 %. Je možné toto číslo snížit, ale emulace a překlad obvykle vedou ke snížení výkonu bez ohledu na to, co.
Proč x86 aplikace nemohou běžet na Arm bez emulace
Možná se divíte, proč musí být software napsán speciálně pro x86, Arm a další druhy CPU. Přichází na to rozdíl v architektuřea v tomto případě mluvíme o architektuře instrukční sady (ISA). Jsou nejzákladnějším návrhem procesoru a určují, zda lze nativně provést něco jednoduchého, jako je násobení, nebo něco složitého, jako je AVX. Změna ISA ovlivňuje nejzákladnější způsob interakce softwaru s hardwarem, až po základní jedničky a nuly, které CPU čte.
x86 je ISA procesorů Intel a AMD, které byly historicky jedinými procesory, na kterých může Windows vůbec běžet. Arm se mezitím většinou používá pro smartphony a překrývání mezi softwarem pro PC a softwarem telefonu je velmi malé. Přirozeně, většina programů je buď vytvořena pro x86 nebo Arm, a pro Windows on Arm to byl obrovský problém, protože překlad nevyšel v roce 2020, zatímco Windows RT (první verze Windows s podporou Arm) vyšel v roce 2012.
Je to asi deset let, co Windows začaly podporovat Arm, takže kde jsou všechny nativní aplikace? Primárním problémem je, že přepsání softwaru pro jiný ISA vyžaduje čas a odborné znalosti, zvláště pokud to vývojáři chtějí dělat dobře. Vývojáři, kteří nevěnují patřičnou péči portování aplikace z jednoho ISA do druhého, mohou mít za následek závady a chyby. Skvělým příkladem toho je Photoshop pro Windows on Arm. Běží nativně na Windows on Arm, ještě v naší recenzi Lenovo Thinkpad X13s, narazili jsme na několik chyb a spoustu varování, že OpenCL a OpenGL nejsou podporovány. Ve spojení s mnohem menší uživatelskou základnou používající Arm na Windows je pro vývojáře menší pobídka, aby se o to starali.
Takže když vývojáři nemohou nebo nechtějí věnovat prostředky na vytváření nativního softwaru, alternativou je emulace. Ačkoli překlad aplikací x86 pro Windows on Arm není dokonalý, je působivé, že to vůbec funguje, a někdy se ztráta výkonu vyplatí vědět, že aplikace poběží podle očekávání. Přinejmenším dokud Windows on Arm nedosáhnou bodu, kdy je vývojáři již nemohou ignorovat, překlad a emulace mu dodají tolik potřebnou podporu jeho hardwarově-softwarového ekosystému.