Ты ставишь brew-пакет, а он валится с ошибкой про несовместимую архитектуру. Или нативное приложение внезапно тормозит, хотя машина мощная. Или ты пишешь скрипт деплоя, который на M-серии вдруг ведёт себя не так, как на старом Intel-маке из соседнего отдела. Все эти боли растут из одного корня: с 2020 года под крышкой Mac стоит принципиально другой процессор - Apple Silicon на архитектуре ARM64, а не x86_64 от Intel. И если ты админишь парк или собираешь софт, делать вид, что разницы нет, больше нельзя.
К 2026 году вопрос уже не "переходить ли", а "как доживает Intel". macOS 26 Tahoe (вышла в сентябре 2025) - последняя версия, которая вообще запускается на Intel-маках. Начиная с macOS 27 система пойдёт только на Apple Silicon. Поэтому понимать, чем arm mac отличается от Intel, какой у тебя процессор mac, и что такое rosetta 2 - это не любопытство, а рабочая необходимость. Разберём механику: от транзисторов до загрузчика.

Что такое SoC, UMA и почему m1 m2 m3 - это не просто "быстрый CPU"
Главное слово - SoC, System on a Chip, система на кристалле. У классического Intel-мака процессор, графика (часто отдельная), контроллер памяти, оперативка в виде планок DIMM и куча контроллеров жили физически раздельно и общались по шинам. У Apple Silicon почти всё это спаяно в один кристалл: вычислительные ядра CPU (производительные P-cores и энергоэффективные E-cores), GPU, нейромодуль Neural Engine, контроллеры, Secure Enclave - и память.
Память тут - отдельная история. Это UMA, Unified Memory Architecture, унифицированная память. Чипы RAM припаяны прямо в корпус SoC, и CPU с GPU видят одно и то же физическое адресное пространство. Не нужно копировать буфер из системной памяти в видеопамять и обратно - они работают с одними и теми же байтами. Отсюда два следствия, которые админ обязан помнить:
- Память не наращивается. Никаких "докуплю планку". Сколько взял при покупке - столько и будет до конца жизни машины. Это влияет на планирование закупок парка.
- 16 ГБ на Apple Silicon по ощущениям "тяжелее", чем 16 ГБ на старом Intel с дискретной картой, потому что нет двойного копирования и накладных расходов на шину PCIe.
Проверить, на чём ты сидишь, можно сразу:
Код: Выделить всё
uname -m
# arm64 - ты на Apple Silicon
# x86_64 - ты на Intel (или внутри Rosetta, об этом ниже)
sysctl -n machdep.cpu.brand_string
# Apple M3 Pro
Universal binary и rosetta 2: как Intel-софт живёт на ARM
Процессор ARM физически не умеет исполнять инструкции x86_64. Это разные наборы команд. Значит, старый софт, собранный под Intel, на голом железе Apple Silicon просто не запустится. Apple решила это двумя путями.
Первый - universal binary. Это один файл .app или исполняемый бинарь, внутри которого лежат две скомпилированные версии: arm64 и x86_64. Система при запуске сама выбирает нужную. Посмотреть, что внутри, можно утилитой file и lipo:
Код: Выделить всё
file /bin/ls
# /bin/ls: Mach-O universal binary with 2 architectures:
# [x86_64:Mach-O 64-bit executable x86_64]
# [arm64e:Mach-O 64-bit executable arm64e]
lipo -archs /System/Applications/Calculator.app/Contents/MacOS/Calculator
# x86_64 arm64
Второй путь - rosetta 2. Это транслятор: он переводит инструкции x86_64 в arm64. Большую часть работы Rosetta делает заранее, при первом запуске Intel-приложения (ahead-of-time трансляция): берёт бинарь, прогоняет его через перевод и кеширует результат. Поэтому первый старт чужого Intel-приложения подтормаживает, а дальше работает бодро. Код, который генерируется на лету (JIT), транслируется уже в рантайме.
Rosetta 2 не предустановлена. Её ставят по требованию - либо система сама предложит при первом запуске Intel-приложения, либо ты ставишь руками, что критично для автоматизации и MDM:
Код: Выделить всё
softwareupdate --install-rosetta --agree-to-license
Как понять, что процесс крутится под Rosetta, и как заставить нужную архитектуру
Самая коварная вещь: процесс под Rosetta думает, что он на Intel. Если из такого процесса спросить uname -m, ответ будет x86_64, хотя железо arm64. Поэтому для надёжной проверки есть отдельный sysctl-флаг:
Код: Выделить всё
sysctl -n sysctl.proc_translated
# 0 - процесс нативный arm64
# 1 - процесс транслируется через Rosetta
# (пусто/ошибка) - ты на Intel-маке, флага просто нет
Управляет архитектурой команда arch. Без аргументов она печатает активную архитектуру, с флагом - запускает указанную ветку универсального бинаря:
Код: Выделить всё
arch # текущая активная архитектура
arch -x86_64 zsh # запустить zsh в режиме Intel (через Rosetta)
arch -arm64 brew install ... # форсировать нативный arm64
Код: Выделить всё
arch -x86_64 zsh
uname -m
# x86_64
sysctl -n sysctl.proc_translated
# 1
Два Homebrew, два префикса: /opt/homebrew против /usr/local
На Apple Silicon нативный Homebrew ставится в /opt/homebrew. На Intel он исторически жил в /usr/local. Это сделано специально, чтобы две инсталляции (нативная arm64 и интеловая под Rosetta) могли сосуществовать на одной машине и не топтать друг друга.
Код: Выделить всё
which brew
# /opt/homebrew/bin/brew - нативный Apple Silicon
# /usr/local/bin/brew - Intel/Rosetta
brew config | grep -i rosetta
# Rosetta 2: true
Загрузка Apple Silicon против Intel: T2/EFI и iBoot/LocalPolicy
Тут различие самое глубокое и самое недооценённое. Это не "тот же загрузчик, другой CPU" - это две разные модели доверия.
Intel-маки грузятся через UEFI/EFI-прошивку, как обычные PC. На свежих Intel-маках безопасностью заведует отдельный чип T2: он держит Secure Enclave, шифрует диск и проверяет загрузчик. Recovery вызывается комбинацией Cmd+R при старте.
Apple Silicon грузится принципиально иначе, по цепочке доверия, унаследованной от iPhone:
- Boot ROM - неизменяемый код прямо в кремнии, корень доверия. С него начинается всё.
- LLB (Low-Level Bootloader) - проверяет подписи, поднимает прошивки контроллеров и достаёт LocalPolicy из Secure Enclave.
- LocalPolicy - подписанный Secure Enclave файл, где записан выбранный тобой уровень безопасности и политика загрузки именно этого тома.
- iBoot - финальный загрузчик: проверяет ядро, сверяет корневой хеш подписанного системного тома (SSV) и передаёт управление XNU.
Ключевое для админа понятие - три уровня безопасности, которые хранятся в LocalPolicy и задаются для каждого установленного тома отдельно:
- Full Security (полная) - дефолт. Ведёт себя как iOS: грузит только то, что было самым свежим на момент установки. Максимальная защита.
- Reduced Security (пониженная) - доверяет "глобальным" подписям. Это нужно, чтобы грузить сторонние kext (расширения ядра) и старые версии macOS. Большинство задач с кастомным драйвером требуют именно её.
- Permissive Security (разрешающая) - как Reduced плюс возможность грузить собственноручно подписанные кастомные ядра XNU. Для разработчиков ядра.
Инструмент, которым админ читает и правит политику безопасности тома, - bputil:
Код: Выделить всё
sudo bputil -d
# выводит текущую LocalPolicy: уровень безопасности,
# разрешены ли kext, состояние MDM и т.д.
Виртуализация и нативные ARM-образы
Раз процессор - ARM, то и виртуалки на нём гонят arm64-гостей, а не x86. Apple дала фреймворк Virtualization.framework, поверх которого работают UTM, Parallels, VMware Fusion и lima/colima для контейнеров. Хочешь Linux в VM - бери ARM-сборку дистрибутива (arm64/aarch64), x86-образ либо не поедет, либо будет ползти через медленную полную эмуляцию.
Отдельная история 2026 года - нативные Linux-контейнеры. Apple выпустила container - официальный CLI, который гоняет Linux-контейнеры в лёгких VM прямо на Apple Silicon. Образы тоже нужны linux/arm64. Если ты тянешь с Docker Hub мультиархитектурный образ, всё хорошо; если образ собран только под amd64 - готовься к эмуляции через QEMU и просадке скорости. Поэтому в Dockerfile-пайплайнах для смешанного парка закладывай --platform и собирай мультиарх через buildx.
Типичные грабли
- uname врёт под Rosetta. Внутри транслируемого процесса uname -m = x86_64. Для правды о трансляции - только sysctl.proc_translated.
- Случайный Rosetta-Homebrew. Перенёс профиль с Intel - и весь brew поехал под эмуляцию в /usr/local. Проверяй which brew, держи /opt/homebrew/bin/brew shellenv.
- --agree-to-license. Забыл флаг в скрипте установки Rosetta - инсталляция парка зависла на лицензии.
- Понизил безопасность "на всякий случай". Reduced/Permissive нужны под конкретную задачу (kext, кастомное ядро). Без неё держи Full.
- x86-образ в VM/контейнере. Тянешь amd64-only образ - получаешь эмуляцию и тормоза. Ищи arm64.
- Intel-приложения доживают последние дни. macOS 26.4 уже показывает предупреждение, что Intel-софт перестанет работать после ухода Rosetta. Полноценно она поддерживается до macOS 27, дальше - почти всё отвалится. Инвентаризуй парк на предмет x86-only приложений сейчас.
Выполни по шагам на своём Mac (на Intel часть про Rosetta просто не сработает - это тоже результат):
- Узнай железо: uname -m и sysctl -n machdep.cpu.brand_string.
- Проверь толщину бинаря: file /bin/ls и lipo -archs /bin/ls. Найди слова arm64 и x86_64.
- Если есть Apple Silicon: поставь Rosetta - softwareupdate --install-rosetta --agree-to-license.
- Зайди в интеловую оболочку: arch -x86_64 zsh. Внутри выполни uname -m (увидишь x86_64) и sysctl -n sysctl.proc_translated (увидишь 1). Выйди: exit.
- Сравни Homebrew: which brew и brew config | grep -i rosetta.
- Прочти политику безопасности тома: sudo bputil -d (или хотя бы посмотри csrutil status).
- Почему uname -m показывает x86_64 на Apple Silicon, и какой командой узнать правду о трансляции?
- В чём практическая разница между Full и Reduced Security в LocalPolicy, и зачем кому-то Reduced?
- Куда ставится нативный Homebrew на Apple Silicon, куда - интеловый, и почему их два?
- Как попасть в recoveryOS на Apple Silicon и чем этот способ отличается от Intel?
Apple Silicon - это не "Intel, только быстрее", а другая архитектура (ARM64), другая память (UMA, не наращивается) и другая модель загрузки (Boot ROM -> LLB -> LocalPolicy -> iBoot вместо EFI/T2). Intel-софт живёт либо как universal binary, либо через rosetta 2, у которой счётчик пошёл: полноценно она с тобой до macOS 27. Запомни три команды-индикатора - uname -m, sysctl.proc_translated и which brew - и ты никогда случайно не окажешься в эмуляции там, где должен лететь нативно.