Kakehashi: запуск macOS-бинарников на Linux ARM без JIT — новый подход

Kakehashi — это инновационный эмулятор, который позволяет запускать нативные macOS-бинарники на Linux ARM, не используя JIT-компиляцию. Вместо этого он работает на уровне системных вызовов, что обеспечивает производительность, в десятки раз превышающую показатели предыдущих решений. Этот проект откр

Kakehashi: запуск macOS-бинарников на Linux ARM без JIT — новый подход

Kakehashi — это инновационный эмулятор, который позволяет запускать нативные macOS-бинарники на Linux ARM, не используя JIT-компиляцию. Вместо этого он работает на уровне системных вызовов, что обеспечивает производительность, в десятки раз превышающую показатели предыдущих решений. Этот проект открывает новые возможности для разработчиков и энтузиастов, желающих использовать инструменты экосистемы Apple на Linux-устройствах с архитектурой ARM.

Как Kakehashi запускает macOS-приложения на Linux ARM

Kakehashi — это userspace-эмулятор, который транслирует системные вызовы macOS в Linux и обратно. Он не использует JIT-компиляцию, как это делал его предшественник WIE, а работает на уровне системных вызовов, что позволяет запускать бинарники с минимальными накладными расходами. В текущей версии Kakehashi уже успешно запускает 7zip, curl и Apple Git на Linux ARM.

Основная идея Kakehashi — сохранить оригинальный бинарник macOS без изменений, но перехватывать его обращения к ядру и подменять их на вызовы ядра Linux. Это возможно благодаря тому, что macOS и Linux имеют схожую архитектуру системных вызовов, хотя и с различиями в деталях. Проект находится в активной разработке, но уже демонстрирует впечатляющие результаты.

Предыстория и контекст: от WIE к Kakehashi

Автор проекта ранее создал WIE — эмулятор для запуска PE64-бинарников (Windows) на Apple Silicon. WIE использовал JIT-компиляцию, что позволяло транслировать машинный код на лету. Однако JIT оказался узким местом: 7zip сжимал данные в 80-100 раз медленнее, чем нативный macOS-бинарник. Это делало WIE непригодным для реального использования, и разработка была приостановлена.

Kakehashi — это попытка сохранить идею переноса бинарников одной ОС на другую, но отказаться от JIT в пользу более эффективного подхода. Вместо трансляции кода эмулятор перехватывает системные вызовы, что значительно снижает накладные расходы. Такой подход уже используется в проектах вроде Wine (для Windows-приложений на Linux), но для macOS-приложений он пока редкость.

Чем Kakehashi отличается от WIE и других эмуляторов?

Главное отличие — отсутствие JIT. WIE транслировал каждый машинный код, что требовало огромных вычислительных ресурсов. Kakehashi работает на уровне системных вызовов, что позволяет запускать бинарники почти с нативной скоростью. Например, 7zip в Kakehashi работает всего в 2-3 раза медленнее, чем нативный macOS, в то время как WIE был в 80-100 раз медленнее.

Кроме того, Kakehashi не требует модификации бинарников: он работает с оригинальными файлами macOS. Это важно для пользователей, которые хотят запускать проприетарные приложения, недоступные для Linux. Проект также поддерживает архитектуру ARM, что делает его актуальным для современных одноплатных компьютеров и серверов.

Технические подробности: как работает Kakehashi

Kakehashi использует механизм перехвата системных вызовов. Когда macOS-бинарник вызывает функцию ядра, эмулятор перехватывает этот вызов и транслирует его в соответствующий вызов Linux. Для этого используется библиотека, которая эмулирует интерфейс ядра macOS. В текущей версии поддерживаются базовые вызовы, такие как работа с файлами, памятью и процессами.

Одной из сложностей является различие в форматах бинарников: macOS использует Mach-O, а Linux — ELF. Kakehashi загружает Mach-O-файлы и обрабатывает их заголовки, чтобы правильно отобразить память и инициализировать процесс. Это требует глубокого понимания обеих платформ, но автор успешно справляется с этой задачей.

Какие системные вызовы поддерживает Kakehashi?

На данный момент Kakehashi поддерживает базовые системные вызовы, необходимые для работы консольных утилит. Это включает операции с файлами (открытие, чтение, запись, закрытие), управление памятью (mmap, munmap), создание и управление процессами (fork, exec, wait), а также работу с сетью (socket, connect, send, recv). Этого достаточно для запуска таких программ, как 7zip, curl и Git, но для более сложных приложений потребуется расширение списка поддерживаемых вызовов.

Автор активно работает над добавлением новых вызовов и оптимизацией существующих. В планах — поддержка графических интерфейсов, что откроет путь к запуску GUI-приложений. Однако это потребует эмуляции фреймворков Cocoa и AppKit, что является нетривиальной задачей.

Кого затронет и как: практическое применение Kakehashi

Kakehashi будет полезен разработчикам, которые хотят запускать macOS-инструменты на Linux ARM, например, для кросс-компиляции или тестирования. Он также может быть интересен энтузиастам, которые используют одноплатные компьютеры и хотят получить доступ к экосистеме macOS. В долгосрочной перспективе проект может стать основой для запуска более сложных приложений, таких как браузеры или офисные пакеты.

Для пользователей в России и СНГ Kakehashi особенно актуален, так как позволяет использовать инструменты, которые официально не поддерживаются на Linux. Например, Apple Git уже работает, что может упростить разработку для тех, кто привык к инструментам Apple.

Что будет дальше: планы развития Kakehashi

Автор планирует расширить поддержку системных вызовов и добавить больше приложений. В ближайших планах — запуск более сложных программ, таких как текстовые редакторы или компиляторы. Также ведется работа над оптимизацией производительности и исправлением ошибок. Если проект получит поддержку сообщества, он может стать полноценной альтернативой для запуска macOS-приложений на Linux.

Одной из ключевых задач является увеличение совместимости с существующими macOS-бинарниками. Для этого необходимо реализовать поддержку более широкого спектра системных вызовов и структур данных. Автор также рассматривает возможность добавления поддержки архитектуры x8664, что позволило бы запускать macOS-приложения на обычных ПК.

Итог: почему Kakehashi важен для кросс-платформенной совместимости

Kakehashi — это многообещающий проект, который решает проблему производительности, с которой столкнулся WIE. Благодаря отказу от JIT и работе на уровне системных вызовов, он достигает почти нативной скорости. Это открывает новые возможности для разработчиков и энтузиастов, желающих использовать macOS-инструменты на Linux ARM. Следите за развитием проекта — он может стать важным шагом в мире кросс-платформенной совместимости.