Con il termine Apple Silicon si fa riferimento ai SoC (System-on-a-Chip) basati su un’architettura derivata dalla piattaforma ARM che la Mela ha progettato e sviluppato per i suoi dispositivi. Dopo aver usato i SoC Apple Silicon su iPhone, iPad, Apple Watch, Apple TV e altri dispositivi, la società di Cupertino dal 2020 ne utilizza versioni “ad hoc” per i sistemi Mac di fatto accantonando la piattaforma x86 e la collaborazione con Intel.
Abbiamo già visto perché i vari SoC Apple Silicon offrono prestazioni eccellenti e parlato delle esortazioni dell’ex dirigente Jean-Louis Gassée che invita Microsoft a investire di più sui SoC ARM.
Con il passaggio dei Mac ad Apple Silicon, è nata la distribuzione Asahi Linux: il suo obiettivo è quello di portare il “pinguino” su tutti i più recenti Mac, a partire da quelli basati su chip M1 presentati nel 2020.
Il fine ultimo non è quello di mostrare che Linux può funzionare bene su Apple Silicon bensì di rendere palese che una soluzione come Asahi Linux può essere utilizzata come sistema operativo “di ogni giorno”.
Lo sviluppo di Asahi Linux per Apple Silicon ha richiesto un’immensa mole di lavoro: diversamente rispetto a quanto auspicherebbe Free Software Foundation, Apple Silicon resta una piattaforma chiusa interamente “non documentata”. In altre parole, soltanto gli ingegneri Apple conoscono le modalità per dialogare a basso livello con l’hardware e sfruttarne le potenzialità.
Per dare un’idea del colossale lavoro che è stato portato avanti, basti pensare che lo stesso Linus Torvalds usa un laptop ARM a 64 bit basato su Asahi Linux.
Gli sviluppatori di Asahi Linux hanno quindi provveduto al reverse engineering della piattaforma Apple spiegando che il lavoro in assoluto più gravoso è stato scoprire i meccanismi di funzionamento della GPU e mettere a punto un driver open source.
Il viaggio che ha portato a svelare i segreti della GPU Apple M1
In un lungo racconto pubblicato nel blog del progetto Asahi Linux, gli sviluppatori tracciano un bilancio sul lavoro svolto sino ad oggi per realizzare un driver aperto per la GPU M1.
Innanzitutto si fa presente che i moderni driver per le GPU sono divisi in due parti: uno user space driver e un kernel driver. Il primo è responsabile della compilazione dei programmi shader e della traduzione delle chiamate API (come OpenGL o Vulkan) in comandi specifici che vengono usati a livello più basso per eseguire il rendering della scena. La parte del kernel è incaricata di gestire la MMU (memory management unit; limita l’accesso alle aree di memoria appartenenti a un’app specifica utilizzando la GPU, in modo che app diverse non possano bloccarsi o interferire tra loro) e gestire l’allocazione/disallocazione della memoria da diverse app, oltre a decidere come e quando inviare i comandi.
Tra user space driver e kernel driver si pone una sorta di API personalizzata per ogni famiglia di GPU.
La comunità che ha lavorato su Asahi Linux ha quindi realizzato user space driver e kernel driver per Apple Silicon cercando di ottimizzarne il più possibile il relativo funzionamento.
Dapprima ci si è concentrati sulla realizzazione dell’user space driver utilizzando come base un sistema macOS: in questo modo è stato possibile inviare comandi alla GPU senza preoccuparsi della parte relativa al kernel.
Successivamente, a partire da aprile 2022, si è passati a soppesare la realizzazione del kernel.
La GPU M1 integra un coprocessore chiamato “ASC” che esegue il firmware Apple: si tratta di CPU ARM64 completa che esegue in tempo reale un sistema operativo proprietario Apple chiamato RTKit. È responsabile di tutto: gestisce l’alimentazione, la programmazione, la priorità dei comandi, eventuali problemi e persino i contatori delle prestazioni, le statistiche e cose come la misurazione della temperatura. All’atto pratico il driver del kernel macOS non comunica affatto con l’hardware della GPU. Tutte le comunicazioni con la GPU avvengono tramite il firmware, utilizzando le strutture dati nella memoria condivisa per fornire comandi su quali azioni porre in essere. Le strutture previste da Apple sono davvero tantissime.
Ciononostante, gli autori di Asahi Linux hanno dapprima creato un driver kernel di test usando un linguaggio di programmazione ad alto livello come Python per poi virare convintamente su Rust.
Nel giro di pochi giorni, usando il driver kernel, Asahi è passato dall’effettuare il rendering di un semplice cubo in movimento con il classico effetto gradiente al caricamento di una sessione desktop GNOME completa.
Dopo la X.Org Developers Conference di ottobre 2022 Asahi Linux ha abbracciato la famiglia di SoC Apple M1 Pro/Max/Ultra e M2 lato kernel, introdotto strumenti di debug migliorati e ottimizzato le prestazioni. Per dare un’idea del livello raggiunto dalla distribuzione, oggi è addirittura possibile giocare con titoli come Xonotic e Quake in 4K.
Poiché la gestione dell’alimentazione della GPU è compito del firmware, gli autori di Asahi Linux non hanno riscontrato alcun problema: raccontano ad esempio di aver fatto funzionare un sistema Mac con Xonotic a 1080p all’interno di una sessione GNOME con un’autonomia stimata della batteria pari a oltre 8 ore.