Oprogramowanie  /  Artykuł

Komputery Apple z procesorem M1 z perspektywy software developmentu

Picture of the author

Gdy koledzy pisali (z zachwytem) o nowych komputerach Mac z procesorem od Apple, niektórzy czytelnicy w komentarzach pod tekstami podkreślali, że zapewne zajmujemy się jedynie przeglądaniem Instagrama i czytaniem maili, a komputery te nie będą nadawać się do niczego poważnego.

Aby to sprawdzić, postanowiłem przyjrzeć się, jak wygląda na Macach opartych na M1 proces tworzenia oprogramowania, szczególnie w porównaniu ze sprzętem opartym na procesorach Intel.

Mac do programowania?

Programiści lubią komputery Apple'a za ich wydajność, niezawodność oraz to, że prawdziwy skryptowalny Unix jest w zasięgu jednego kliknięcia ikony terminala. Wielu z nich postawiło sobie dobre, sprawdzone środowisko na Macach z Intelem. Narzędzi nie brakowało zarówno do programowania na iOS-a, jak i w tradycyjnym Web developmencie na frontend i backend. Nie było też problemu z cross-kompilacją np. na Androida za pomocą Android Studio bądź narzędzi multiplatformowych.

Bardzo powszechnymi narzędziami były takie, które umożliwiały wirtualizację środowiska. Procesory Intela mają do tego odpowiednie wsparcie i dzięki narzędziom takim jak Docker można w prosty sposób zestawiać środowisko testowe w celu uruchomienia tworzonej aplikacji. Z definicji więc nie będą działały na procesorze Apple Silicon M1. A może jednak jest szansa? Postanowiłem sprawdzić.

Rosetta 2

Pomostem między światem Intela i istniejącymi już aplikacjami a nowym procesorem jest podsystem, który Apple nazwał Rosetta 2. Rosetta 2 jest wbudowana w Big Sur, a uaktywnia się (i pobiera jeszcze kilka komponentów) w momencie uruchomienia pierwszego programu skompilowanego na Intela.

Nazwa nawiązuje do dwóch rzeczy. Po pierwsze: kamień z Rosetty to słynny zabytek piśmiennictwa starożytnego Egiptu, który działał jak słownik. Zawierał tłumaczenie tego samego tekstu na zapisy języka egipskiego oraz po grecku. Dzięki temu ostatniemu mogliśmy poznać znaczenie wielu słów zapisanych po egipsku. Jest to więc metafora pomocy przy tłumaczeniu i samego tłumaczenia (w domyśle pomiędzy zestawami instrukcji różnych procesorów).

Drugim zawiązaniem nazwy Rosetta 2 jest... pierwsza Rosetta - podsystem, który miał podobne zastosowanie w 2006 r. w systemie OS X. Służył on do uruchamiania aplikacji skompilowanych na PowerPC na procesorach Intela. To właśnie wtedy Apple zaczął montować je w Macach i chciał zapewnić wsteczną kompatybilność aplikacji podobnie jak teraz za pomocą Rosetty 2.

Rosetta 2 działa na trochę innej zasadzie niż pierwsza Rosetta. Dokonuje ona translacji aplikacji przy pierwszym uruchomieniu. Jej wydajność jest natomiast znakomita - często zdarza się, że aplikacja działa szybciej niż natywnie na procesorach Intela.

Wraz z nowymi procesorami i Rosettą 2 pojawiło się ponownie pojęcie: aplikacja uniwersalna (universal binary) - jest to aplikacja zawierająca kod zarówno dla procesorów Intel jak i Apple Silicon. Poprzednio tej nazwy używano na określenie aplikacji zawierającej binaria na PowerPC oraz Intel - stąd czasami mówi się teraz dla odróżnienia „Universal 2” - aplikacja uniwersalna typu 2.

Docker

Zacznijmy od jednej z najbardziej przydatnych aplikacji przy rozwijaniu oprogramowania. Dzięki Dockerowi i jego kontenerom możemy nie tylko testować aplikacje, ale i pobierać w ten sposób gotowe do użycia narzędzia, np. serwery czy usługi. Docker jest potrzebny w wielu zastosowaniach programistycznych. Od niedawna na Apple Silicon dostępna jest wersja developer preview. Inżynierowie z Dockera pracowali nad zastąpieniem używanego dotąd silnika HyperKit tym udostępnionym przez Apple, czyli Virtualization Framework.

Udostępnienie Dockera to ważny krok dla środowiska developerskiego, który w dodatku wykonano wcześniej, niż było to zapowiadane. Pobrałem i sprawdziłem kilka dostępnych pakietów - rzeczywiście działa. Większość pakietów dostępnych w oficjalnym repozytorium ma swoją wersję na ARM - jednak pamiętać należy, że nie wszystkie.

Narzędzia od Apple'a

Jak można się było tego spodziewać, narzędzia od Apple, czyli Xcode wraz z kompilatorami np. Swift, są gotowe do użycia w formie natywnej na Apple Silicon M1.

Z punktu widzenia użytkownika poprzednich wersji, Xcode zrobiło się o wiele mniej ociężałe. Zniknęła także konieczność długiego czekania na ukończenie wielu operacji.

Visual Studio Code

Jedno z najpopularniejszych narzędzi programistycznych i środowisko do pisania oraz uruchamiania programów działa już w wersji natywnej na Apple Silicon M1.

Podobnie jak w przypadku Dockera, na stronie głównej Visual Studio Code znajdziemy wersję Intelowską (działającą świetnie w Rosetta), a wersja natywna dla M1 znaduje się w na stronie dla „Insiders”.

.NET Core

.NET Core z dziecka Windowsa wyrósł na multiplatformowe środowisko, dobrze dogadujące się z Macami oraz Linuksami. Jednak bieżąca wersja 5 może być uruchamiana (z dobrą wydajnością) jedynie za pomocą translacji Rosetta 2.

Dopiero kolejna wersja .NET Core (6) planowana jest od razu ze wsparciem dla Apple Silicon - zarówno jako środowisko uruchomieniowe, jak i cel kompilacji.

Go(lang)

Ten używany w wielu zastosowaniach (np. do automatyzacji testów) język programowania od Google'a zapowiadany jest w wersji ARM na luty 2021 roku, jednak już teraz dostępna jest jego wersja beta.

Wersja Go 1.16 Beta 1 jest możliwa do pobrania w wersji uniwersalnej, czyli zawierającej zarówno binaria na Intel jak i M1.

homebrew

Homebrew to właściwie menadżer pakietów dla Maca. Niestety, macOS nie posiada takiego wbudowanego (tak jak systemy linuksowe mają np. apt-get).

Samo uruchomienie homebrew to mały problem - trzeba jeszcze przebudować bazę dostępnych pakietów tak, aby zawierały aplikacje skompilowane jako uniwersalne lub natywne dla M1. W wersji 2.6.0 homebrew jest już natywne, ale wciąż większości pakietów brakuje.

IntelliJ IDEA

Bardzo popularne środowisko programistyczne od JetBrains w wersji dla M1 jest dostępne - również jako wersja „dla odważnych”, czyli wstępna. Użytkownicy raportują trzy razy szybszy czas kompilacji projektów, ale zgłaszają też sporo błędów.

Wersja finalna spodziewana jest na początku 2021 roku.

OpenJDK

Środowisko do rozwijania aplikacji w Javie we wczesnym dostępie dla developerów jest już w wersji natywnej. W szybkości przygotowania portu zapewne pomógł fakt, że gotowa była wersja OpenJDK na Windows ARM.

Android Studio

Standardowe środowisko pisania aplikacji na Androida od Google'a na razie działa jedynie poprzez translację Rosetta 2.

Od niedawna udostępniono również wstępną wersję emulatora Androida na M1.

Python

Python jest dostępny w formie natywnej (do tego jest zainstalowany na każdym komputerze z M1).

Node.js

Node.js jest dostępny w formie natywnej - w tej chwili w wersji preview. Środowisko działa na zasadzie uniwersalnej aplikacji, czyli zawiera obrazy zarówno dla procesorów Intela, jak i Apple'a.

Ocena sytuacji programisty pracującego na Macach z Apple Silicon wypadła lepiej, niż się spodziewałem. Cieszy w szczególności dostęp do narzędzi programistycznych, języków skryptowych oraz do Dockera - na tej bazie można już zbudować sobie środowisko do pracy.

przeczytaj następny tekst


przeczytaj następny tekst


przeczytaj następny tekst


przeczytaj następny tekst


przeczytaj następny tekst