Введение

Компонент операционной системы, другие программные продукты или проекты под названием «Розетта».

Розетта — динамический двоичный транслятор, разработанный Apple Inc. для macOS, являющийся слоем совместимости приложений между различными архитектурами наборов команд. Он обеспечивает переход на новое аппаратное обеспечение за счёт автоматического перевода программного обеспечения. Название является отсылкой к Розеттскому камню — артефакту, который позволил расшифровать египетские иероглифы. Первая версия Розетты, представленная в 2006 году в Mac OS X Tiger, была частью перехода Mac от процессоров PowerPC к процессорам Intel, позволяя приложениям PowerPC работать на компьютерах Mac на базе Intel. Поддержка Розетты была прекращена с выходом Mac OS X Lion (10.7) в 2011 году. Розетта 2, представленная в 2020 году как компонент macOS Big Sur, является частью перехода Mac от процессоров Intel к процессорам Apple Silicon, позволяя приложениям Intel работать на компьютерах Mac на базе Apple Silicon.

Предыстория

На Macintosh использовались процессоры с несколькими различными архитектурами наборов команд: серия Motorola 68000, PowerPC, Intel x86 и ARM64 в Apple silicon. Каждая архитектура набора инструкций несовместима со своей предшествующей, что требовало плана перехода, основанного на программном слое для эмуляции предыдущего набора инструкций на последующем. С выпуском Power Macintosh эмулятор Mac 68K стал частью System 7.1.2 и более поздних версий. Этот эмулятор использует возможности PowerPC и встроен на самых низких уровнях операционной системы, интегрированный с наноядром Mac OS. Это означает, что наноядро способно перехватывать прерывания PowerPC, преобразовывать их в прерывания 68k (и при необходимости выполнять переключение в смешанный режим), а затем выполнять код 68k для обработки этих прерываний. Это позволяет перемежать код 68k и PowerPC внутри одного "толстого" двоичного файла.

Розетта 2

В 2020 году Apple объявила, что Rosetta 2 будет поставляться в комплекте с macOS Big Sur, чтобы облегчить переход Mac на Apple Silicon. Программное обеспечение позволяет переводить многие приложения, скомпилированные исключительно для выполнения на процессорах x86 64, для выполнения на Apple Silicon. Для установки Rosetta 2 на Mac с Apple Silicon существует два способа: либо с помощью Терминала для прямой установки программы, либо путем попытки открыть приложение, скомпилированное для x86 64, что откроет окно установки. Помимо поддержки перевода «на лету» (JIT), Rosetta 2 предлагает компиляцию «заранее» (AOT), при которой код x86 64 полностью переводится один раз при установке приложения без универсального двоичного кода на Mac с Apple Silicon. Производительность Rosetta 2 получила высокую оценку. В некоторых тестах программы, предназначенные только для x86 64, работали лучше под Rosetta 2 на Mac с Apple M1 SOC, чем на Mac с процессором Intel x86 64. Одной из ключевых причин высокой эффективности перевода Rosetta 2 является поддержка порядка памяти x86 64 в SOC Apple M1. SOC также имеет специализированные инструкции для вычисления флагов x86. Хотя Rosetta 2 работает с большинством программ, некоторые программы могут не работать вообще или работать «замедленно». Как и в первой версии, Rosetta 2 обычно не требует вмешательства пользователя. При первой попытке запуска приложения, предназначенного только для x86 64, macOS предложит установить Rosetta 2, если она еще не установлена. Последующие запуски программ x86 64 будут выполняться через перевод автоматически. Также есть возможность принудительно запустить универсальный двоичный код как код x86 64 через Rosetta 2, даже на устройстве на базе ARM. Начиная с macOS Ventura, пользователи, работающие на виртуальных машинах с Linux в качестве гостевой операционной системы, могут использовать Rosetta 2 для запуска кода x86 64, скомпилированного для Linux, внутри виртуальной машины. Rosetta 2 работает как исполняемый файл, который необходимо установить на гостевой операционной системе. Имеются случаи, когда разработчики устанавливали этот исполняемый файл на стороннее оборудование, при условии, что оно включает в себя процессор, поддерживающий как минимум набор инструкций ARMv8.2 A; порядок памяти будет отличаться от нативного x86. Некоторые разработчики отметили, что это может нарушать лицензионные соглашения macOS, поскольку исполняемый файл входит в состав фреймворка виртуализации Apple.