Rosetta 2
Rosetta 2 — это динамический транслятор двоичного кода, разработанный компанией Apple. Он позволяет запускать приложения, скомпилированные для процессоров Intel x86-64, на компьютерах Mac с процессорами Apple Silicon, имеющими архитектуру ARM64. Rosetta 2 выступает в роли программного уровня совместимости, обеспечивая выполнение кода без необходимости перекомпиляции программы разработчиком.
История и предпосылки создания
Переход Apple с процессоров Intel на собственные процессоры архитектуры ARM (Apple Silicon) был анонсирован на конференции Worldwide Developers Conference (WWDC) в июне 2020 года. Этот переход стал третьей сменой аппаратной платформы для Mac после переходов с архитектуры Motorola 68k на PowerPC (в 1990-х) и с PowerPC на Intel (в 2005—2006 годах).
Для обеспечения совместимости со старым программным обеспечением во время предыдущего перехода (с PowerPC на Intel) Apple уже использовала технологию динамической трансляции под названием Rosetta. Rosetta 2 является её преемником, но, в отличие от предшественника, она работает на совершенно иной архитектуре (ARM против x86) и использует более современные методы трансляции.
Название «Rosetta» отсылает к Розеттскому камню, который позволил расшифровать древнеегипетские иероглифы, что символизирует роль технологии как «переводчика» между разными «языками» процессоров.
Принцип работы
Rosetta 2 функционирует на уровне операционной системы macOS. Основной принцип заключается в том, что программа, написанная для набора команд Intel x86-64, не может быть напрямую выполнена процессором ARM, так как они используют разные системы команд. Rosetta 2 решает эту проблему двумя основными способами:
Предварительная (AOT) трансляция
При установке приложения или загрузке его обновления Rosetta 2 может перевести весь исполняемый код (бинарный файл) в код для архитектуры ARM заранее. Этот процесс происходит один раз, после чего на диске сохраняется уже переведённая версия приложения. Такой подход минимизирует задержки при последующем запуске и обеспечивает более высокую производительность, так как трансляция не тратит ресурсы процессора во время работы программы.
Динамическая (JIT) трансляция
Если код не был переведён заранее (например, для динамически генерируемого кода или в некоторых других сценариях), Rosetta 2 использует JIT-компиляцию. Она переводит блоки кода «на лету», по мере их выполнения. Этот метод требует больше вычислительных ресурсов в реальном времени, но позволяет обрабатывать код, который не был известен на этапе установки.
При выполнении трансляции Rosetta 2 не только переводит инструкции, но и эмулирует поведение процессора Intel, включая:
- Обработку памяти: Преобразование форматов данных (например, порядок байтов — little-endian).
- Системные вызовы: Перенаправление вызовов к ядру macOS, которые ожидает приложение Intel, на соответствующие вызовы для ARM.
- Работу с исключениями и сигналами: Обеспечение корректной обработки ошибок и прерываний.
Производительность и ограничения
Производительность
Производительность приложений, работающих через Rosetta 2, в целом оценивается как высокая. По заявлениям Apple и данным независимых тестов, большинство приложений для Intel работают на Apple Silicon с сопоставимой или даже более высокой скоростью, чем на оригинальных процессорах Intel, благодаря высокой производительности самих чипов Apple (M1, M2, M3, M4). Однако при трансляции неизбежно возникают накладные расходы, которые могут составлять от 10% до 30% производительности в вычислительно интенсивных задачах (рендеринг, компиляция, научные расчёты).
Ограничения
Rosetta 2 не является универсальным решением. Она не поддерживает:
- Приложения для Intel, работающие в режиме ядра: Драйверы устройств (kext), которые работают на уровне ядра macOS, не могут быть транслированы. Для них требуется нативная версия для ARM.
- Приложения для 32-битной архитектуры (i386): Rosetta 2 поддерживает только 64-битные приложения (x86_64). Это соответствует общей политике Apple, которая отказалась от поддержки 32-битных приложений в macOS Catalina (10.15).
- Расширения ядра и виртуализацию: Некоторые типы программ, которые напрямую взаимодействуют с аппаратным обеспечением или используют расширенные возможности виртуализации (например, эмуляторы других архитектур), могут работать некорректно или с существенными ошибками.
- Приложения, использующие специфические инструкции Intel: Некоторые редкие или недокументированные инструкции процессора Intel могут не иметь аналогов в ARM, что может привести к сбоям.
Применение и значение
Rosetta 2 сыграла ключевую роль в успешном переходе Mac на процессоры Apple Silicon. Она позволила пользователям и разработчикам плавно мигрировать, не теряя доступа к существующему парку программного обеспечения.
Для пользователей
Пользователи могли приобрести новый Mac на Apple Silicon и сразу запускать на нём все свои привычные приложения для Intel, включая профессиональные пакеты (Adobe Creative Cloud, Microsoft Office, многие игры) без ожидания выхода их нативных версий. Это существенно снизило барьер для перехода на новую платформу.
Для разработчиков
Rosetta 2 дала разработчикам время на адаптацию своих приложений. Они могли продолжать выпускать версии для Intel, зная, что они будут работать на новых компьютерах, и постепенно портировать код на ARM. Apple также предоставила инструменты (Xcode, универсальные бинарные файлы), облегчающие создание приложений, работающих на обеих архитектурах.
Текущий статус
По мере того как всё больше разработчиков выпускают нативные версии своих приложений для Apple Silicon, роль Rosetta 2 постепенно снижается. Однако она остаётся важным компонентом macOS, особенно для запуска устаревшего или специализированного ПО, которое больше не обновляется. С выходом macOS Ventura (13) и более новых версий, Apple прекратила поддержку Rosetta 2 по умолчанию, предлагая пользователям установить её вручную при первом запуске приложения Intel. Это свидетельствует о постепенном завершении переходного периода, но не об отказе от технологии.
Критика
Основная критика в адрес Rosetta 2 связана с её непрозрачностью и ограничениями. Некоторые разработчики отмечали, что отладка приложений, работающих под Rosetta 2, затруднена, так как невозможно точно определить, где возникает ошибка — в оригинальном коде или в процессе трансляции. Кроме того, для приложений, критичных к производительности (например, научные симуляции или высокопроизводительные вычисления), использование Rosetta 2 может приводить к непредсказуемым задержкам и снижению эффективности. Также высказывались опасения по поводу безопасности, так как транслятор может потенциально скрывать вредоносный код, хотя Apple встроила в Rosetta 2 механизмы проверки целостности.
Источники
- Apple Inc. (2020). WWDC 2020 Keynote. Официальная презентация перехода на Apple Silicon.
- Apple Inc. (2020—2024). Документация для разработчиков: Rosetta 2. Официальное руководство по работе с технологией.
- Обзоры и тесты производительности Rosetta 2 на сайтах AnandTech, Ars Technica, MacRumors (2020—2022).
- Книга «Apple Silicon: The Inside Story» (2023) — история разработки процессоров M1 и связанных технологий.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →