Sobre o ambiente de tradução Rosetta da Apple
(developer.apple.com)-
O Rosetta é um processo de tradução que permite executar, no Apple Silicon, apps compostos por instruções x86_64.
-
Para o usuário, o Rosetta é invisível. Quando um executável contém apenas instruções Intel, o macOS inicia automaticamente o Rosetta e começa a tradução.
-
Quando a tradução termina, o sistema executa o binário traduzido no lugar do original. Como esse tempo de tradução faz parte da execução, a inicialização/operação do app pode ficar mais lenta.
-
O sistema prefere executar instruções arm64 do app. Quando um binário contém tanto arm64 quanto x86_64, o usuário pode forçar a execução via Rosetta. Por exemplo, quando um plugin específico não oferece suporte a arm64.
-
O sistema impede a mistura de código arm64 e x86_64 no mesmo processo. O Rosetta é aplicado de forma abrangente, incluindo módulos de código carregados dinamicamente.
O que não pode ser traduzido
- O sistema traduz até mesmo apps que incluem compiladores JIT, mas não traduz os itens abaixo.
→ Extensões de kernel
→ Máquinas virtuais que virtualizam a plataforma computacional x86_64
- O Rosetta traduz todas as instruções x86_64, mas não oferece suporte a recursos mais recentes ou específicos do processador, como AVX, AVX2 e AVX512.
→ Se essas funções estiverem no código, elas devem ser chamadas apenas após verificar se realmente estão disponíveis, por meio da função sysctlbyname ou equivalente.
- Para verificar se o binário está sendo executado após tradução pelo Rosetta, é possível usar a flag
sysctl.proc_translatedna funçãosysctlbyname.
1 comentários
É um documento oficial, mas está tão bem organizado que resolvi fazer uma tradução rápida e postar aqui.
É importante que o Rosetta seja uma "tradução", e não uma emulação.