Wiele aplikacji Windows zostało napisanych dla x86, a mimo to mogą działać na procesorach ARM. Oto jak to możliwe.
Windows zawsze był przeznaczony Procesory x86 firm Intel i AMD, ale odkąd dziesięć lat temu na smartfony wydano system Windows RT, system operacyjny powoli staje się coraz bardziej przyjazny Uzbroić procesory. Obecnie zarówno Windows 10, jak i Windows 11 oferują pełną obsługę procesorów ARM, ale jest pewien haczyk. Chociaż sam system operacyjny działa dobrze na tych procesorach, większość aplikacji nie uruchomiła wersji kompatybilnej z Arm. Chociaż system Windows może działać na chipach Arm, posiadanie niewielu programów do wykorzystania byłoby problemem.
Microsoft ma jednak asa w rękawie: emulator umożliwiający uruchamianie aplikacji x86 na komputerach opartych na architekturze ARM. To kluczowa rzecz, która nadała Windows on Arm dynamiki od czasu premiery tłumacza w 2017 roku. Oto jak działa emulator i dlaczego komputery Arm PC muszą go używać, jeśli chcą uruchamiać oprogramowanie stworzone dla układów x86.
Emulacja kodu x86 dla procesorów Arm w czasie rzeczywistym
Pomysł emulowania kodu stworzonego dla jednego rodzaju procesora, aby można go było uruchomić na innym, nie jest niczym nowym. Tak działa emulacja gier, powszechnie używana do uruchamiania starych gier wideo na nowych urządzeniach z zupełnie innym sprzętem. Kiedy uruchamiasz aplikację x86 na komputerze Arm, system Windows pobiera bloki kodu aplikacji i kompiluje je w coś, co może działać na chipie Arm. Wszystko to odbywa się w czasie rzeczywistym, a system Windows musi buforować cały przetłumaczony kod, co oznacza, że nie trzeba go ponownie tłumaczyć.
Niestety, wydajność emulowanych aplikacji będzie gorsza w porównaniu z kodem zaprojektowanym dla sprzętu. Trudno powiedzieć, ile wydajności tracisz, uruchamiając emulowany kod w systemie Windows, ponieważ dane testowe są bardzo skąpe, ale dla porównania: Tłumacz Apple Rosetta 2 (co przekłada się również na aplikacje x86 na ARM) traci około 20%. Można zmniejszyć tę liczbę, ale zazwyczaj emulacja i tłumaczenie powodują spadek wydajności bez względu na wszystko.
Dlaczego aplikacje x86 nie mogą działać na Arm bez emulacji
Być może zastanawiasz się, dlaczego oprogramowanie musi być napisane specjalnie dla procesorów x86, ARM i innych rodzajów procesorów. Sprowadza się to do różnica w architekturze, w tym przypadku mówimy o architekturze zestawu instrukcji (ISA). Stanowią najbardziej podstawową konstrukcję procesora i określają, czy coś prostego, jak mnożenie, czy coś złożonego, jak AVX, można wykonać natywnie. Zmiana ISA wpływa na najbardziej podstawowy sposób interakcji oprogramowania ze sprzętem, aż do podstawowych zer i zer odczytywanych przez procesor.
x86 to ISA procesorów Intel i AMD, które w przeszłości były jedynymi procesorami, na których można w ogóle uruchomić system Windows. Tymczasem ramię było używane głównie w smartfonach, a oprogramowanie komputerowe i oprogramowanie telefonu pokrywają się w bardzo niewielkim stopniu. Naturalnie większość programów jest albo stworzona dla x86, albo dla ARM, a dla Windows na ARM, był to ogromny problem, ponieważ tłumaczenie nie ukazało się w 2020 r., natomiast Windows RT (pierwsza wersja systemu Windows obsługująca Arm) ukazała się w 2012.
Minęło około dziesięciu lat, odkąd system Windows zaczął wspierać Arm, więc gdzie są wszystkie natywne aplikacje? Podstawowym problemem jest to, że przepisanie oprogramowania dla innego ISA wymaga czasu i wiedzy, zwłaszcza jeśli programiści chcą to zrobić dobrze. Programiści, którzy nie zadbają odpowiednio o przeniesienie aplikacji z jednego ISA na inny, mogą spowodować usterki i błędy. Świetnym tego przykładem jest Photoshop dla Windows na Arm. Działa natywnie w systemie Windows na Arm, jeszcze w naszej recenzji Lenovo Thinkpad X13s, napotkaliśmy kilka błędów i mnóstwo ostrzeżeń, że OpenCL i OpenGL nie są obsługiwane. W połączeniu ze znacznie mniejszą bazą użytkowników korzystających z Arm w systemie Windows, programiści nie mają motywacji do zainteresowania się tym rozwiązaniem.
Tak więc, gdy programiści nie mogą lub nie chcą przeznaczyć zasobów na tworzenie oprogramowania natywnego, alternatywą jest emulacja. Chociaż tłumaczenie aplikacji x86 na Windows na Arm nie jest idealne, robi wrażenie, że w ogóle działa, a czasem warto wiedzieć, że przy utracie wydajności aplikacja będzie działać zgodnie z oczekiwaniami. Przynajmniej do czasu, gdy system Windows on Arm osiągnie punkt, w którym programiści nie będą już mogli go ignorować, tłumaczenie i emulacja zapewnią mu bardzo potrzebne wzmocnienie ekosystemu sprzętowo-programowego.