Rosetta 2. A che cosa serve e come funziona?

Rosetta 2 è uno strumento sviluppato da Apple per facilitare la transizione dai Mac con processori Intel (basati su architettura x86_64) ai nuovi Mac con processori Apple Silicon (basati su architettura ARM64). Serve a far funzionare le applicazioni scritte per Intel anche sui nuovi Mac, senza che gli sviluppatori debbano riscriverle subito.
Spiegazione per profani
Rosetta 2 è come un traduttore automatico per programmi. Quando un’app è stata creata per un Mac con processore Intel, Rosetta 2 la “traduce” in tempo reale o al primo avvio in un linguaggio che il nuovo processore Apple Silicon può capire. Così, anche se l’app non è stata aggiornata per il nuovo Mac, funziona comunque quasi come se lo fosse. L’utente spesso non si accorge nemmeno che Rosetta 2 è in funzione.
Spiegazione più tecnica
Rosetta 2 è un dynamic binary translator che converte le istruzioni binarie x86_64 in istruzioni ARM64. Può operare in due modalità:
- Traduzione Just-in-Time (JIT): per le applicazioni che generano codice dinamicamente o usano tecniche avanzate come il self-modifying code. In questo caso, Rosetta 2 traduce “al volo”, durante l’esecuzione.
- Traduzione ahead-of-time (AOT): per la maggior parte delle app, Rosetta 2 effettua la traduzione del codice Intel al momento della prima esecuzione, creando una versione ARM ottimizzata e salvandola sul disco. Questa traduzione è più efficiente in termini di prestazioni rispetto alla modalità JIT.
Rosetta 2 non supporta alcune istruzioni speciali di x86, come quelle che coinvolgono virtualizzazione o codice kernel (non può eseguire estensioni del kernel x86, ad esempio). Tuttavia, per il codice utente tipico, la compatibilità è molto alta e le prestazioni, anche se inferiori alle app native ARM, sono generalmente più che accettabili.
Come Rosetta 2 fa funzionare le vecchie app su nuovi Mac
[ App Intel (vecchia) ]
│
▼
[ Rosetta 2 (traduttore) ]
│
▼
[ Mac con chip Apple Silicon (ARM) ]
│
▼
[ App funziona normalmente ]
- Spiegazione: Rosetta 2 prende l’applicazione scritta per vecchi Mac con processore Intel e la traduce in un formato che il nuovo Mac può capire. Il tutto avviene automaticamente, senza che l’utente debba fare nulla.
Pipeline di traduzione di Rosetta 2
[ Binary x86_64 ]
│
▼
┌───────────────────────────────┐
│ Rosetta 2 Translator Engine │
│ ───────────────────────────── │
│ AOT translation (install time) or │
│ JIT translation (runtime) │
└───────────────────────────────┘
│
▼
[ ARM64 binary / native code ]
│
▼
[ Executed by Apple Silicon CPU ]
- Dettagli tecnici:
- Se possibile, Rosetta 2 traduce tutto al primo avvio (Ahead-of-Time).
- Se serve flessibilità, come con codice generato al volo, esegue una traduzione Just-In-Time.
- La traduzione è trasparente all’utente, ma può influire leggermente su prestazioni e consumo rispetto alle app native.