Если при запуске Linux-программы на ARM64-устройстве терминал отвечает ошибкой вида cannot execute binary file: Exec format error, это почти наверняка означает, что бинарный файл собран под архитектуру x86_64, а процессор устройства работает на ARM. Именно эту задачу решает Box64 — эмулятор, который транслирует инструкции x86_64 для процессоров ARM64 и позволяет запускать настольные Linux-приложения на одноплатных компьютерах, ARM-ноутбуках и Android-устройствах через Termux.
Box64 — проект с открытым исходным кодом, который часто используют в связке с Wine для запуска Windows-программ и игр на ARM-железе. Ниже разберём, как он работает, где его взять, как установить и настроить, а также на какие ограничения стоит рассчитывать.
Что такое Box64 и как он работает
Box64 — пользовательский эмулятор, который запускает Linux-бинарные файлы x86_64 на процессорах архитектуры ARM64 (AArch64). В отличие от полной виртуализации, он не эмулирует всю систему целиком: вместо этого выполняется динамическая бинарная трансляция — блоки x86_64-кода перекодируются в инструкции ARM64 прямо во время выполнения. Это даёт заметно более высокую производительность, чем интерпретация «инструкция за инструкцией».
Важная особенность проекта — использование Dynarec, динамического рекомпилятора, который кэширует уже переведённые блоки кода. Повторное выполнение тех же участков программы идёт почти с нативной скоростью. Кроме того, Box64 умеет «оборачивать» системные библиотеки: вызовы к некоторым библиотекам перенаправляются напрямую в нативные ARM64-версии, что дополнительно ускоряет работу.
Родственный проект — Box86, предназначенный для запуска 32-битных x86-программ на 32-битных ARM-системах. На современных 64-битных ARM-устройствах основным инструментом является именно Box64, а для 32-битных приложений внутри него могут потребоваться дополнительные компоненты.
Где применяется Box64
Типичные сценарии использования эмулятора:
- 🖥️ Запуск настольных Linux-приложений x86_64 на одноплатных компьютерах вроде Raspberry Pi и других ARM64-платах.
- 🎮 Запуск Windows-игр и программ через связку Box64 + Wine на ARM-устройствах.
- 📱 Запуск x86_64-приложений на Android-смартфонах через Termux с окружением proot.
- 🧰 Использование проприетарных утилит, для которых не существует ARM-сборок.
- ☁️ Запуск x86_64-контейнеров и сервисов на ARM-серверах и облачных инстансах.
Стоит понимать: Box64 не является виртуальной машиной и не эмулирует Windows сам по себе. Для Windows-программ нужен Wine, а Box64 в этой связке отвечает только за трансляцию архитектуры процессора.
Установка Box64
Способ установки зависит от вашей системы. Наиболее надёжный и универсальный вариант — сборка из исходников с официального репозитория проекта на GitHub. Для некоторых дистрибутивов существуют готовые пакеты, но их наличие и актуальность версии нужно проверять в репозитории вашего дистрибутива.
Общий порядок сборки из исходников выглядит так:
git clone https://github.com/ptitSeb/box64
cd box64
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
make -j$(nproc)
sudo make install
Перед сборкой убедитесь, что в системе установлены компилятор, cmake и базовые инструменты разработки. Точный список зависимостей и возможные флаги конфигурации под конкретные процессоры указаны в документации проекта — для некоторых чипов существуют оптимизированные профили сборки.
⚠️ Внимание: команды сборки и параметры cmake могут меняться между версиями проекта. Перед установкой сверяйтесь с актуальной инструкцией в репозитории Box64, а не копируйте команды вслепую.
☑️ Проверка перед сборкой Box64
После установки проверьте работоспособность простой командой:
box64 --version
Если эмулятор выводит версию, базовая установка прошла успешно. Далее можно попробовать запустить какой-нибудь несложный x86_64-бинарник, например статически собранную утилиту.
Запуск программ и настройка
Базовый запуск выглядит просто: box64 ./program, где program — исполняемый файл x86_64. Однако реальные приложения требуют библиотек, и здесь начинается основная часть настройки. Box64 ищет x86_64-версии библиотек в путях, которые можно задать через переменные окружения.
Ключевые переменные окружения, с которыми стоит ознакомиться:
- 🔧
BOX64_LD_LIBRARY_PATH— пути поиска x86_64-библиотек, аналог стандартногоLD_LIBRARY_PATH. - 📁
BOX64_PATH— пути поиска исполняемых файлов. - 📝
BOX64_LOG— уровень журналирования, полезен при отладке проблем запуска. - ⚙️ Переменные вида
BOX64_DYNAREC_*— тонкая настройка динамического рекомпилятора.
Полный и актуальный список переменных приведён в документации проекта — он регулярно пополняется, поэтому не полагайтесь на устаревшие гайды. Для отладки начните с BOX64_LOG=1: в журнале видно, какие библиотеки загружаются и на каком этапе происходит сбой.
Box64 и Wine: запуск Windows-программ
Одна из самых популярных задач — запуск Windows-приложений и игр на ARM. Схема работы такая: Wine реализует Windows API поверх Linux, а Box64 позволяет выполнять x86_64-код самого Wine и запускаемых программ на ARM-процессоре. Понадобится специальная сборка Wine, совместимая с Box64, — вопросы совместимости версий решаются через документацию проекта и тематические сообщества.
Для игр дополнительно потребуется трансляция графических вызовов: OpenGL-игры могут работать через нативный OpenGL или прослойки, а для DirectX-игр обычно используется DXVK (требует поддержки Vulkan на устройстве). Наличие работающих драйверов GPU и Vulkan — критичное условие, без него трёхмерные игры либо не запустятся, либо будут работать на программном рендеринге с очень низкой скоростью.
⚠️ Внимание: поддержка Vulkan на ARM-устройствах сильно зависит от конкретного чипа и драйверов. Перед покупкой устройства «под игры через Box64» проверьте, есть ли для его GPU рабочий Vulkan-драйвер в вашей системе.
Производительность и ограничения
Производительность Box64 сильно варьируется от задачи к задаче. Программы, активно использующие обёрнутые системные библиотеки, могут работать со скоростью, близкой к нативной. Код, интенсивно использующий вычисления, требует постоянной трансляции и работает медленнее оригинала — насколько именно, зависит от процессора и характера нагрузки, универсальных цифр здесь нет.
Сравнение основных подходов к запуску x86_64-кода на ARM:
| Подход | Принцип | Скорость | Типичное применение |
|---|---|---|---|
| Box64 | Динамическая трансляция пользовательского кода | Средняя — близкая к нативной | Linux-приложения и игры |
| QEMU user-mode | Эмуляция инструкций | Ниже | Совместимость, отладка |
| Полная виртуализация | Эмуляция всей системы | Низкая | Изолированные окружения |
| Нативная ARM-сборка | Без трансляции | Максимальная | При наличии исходников |
К известным ограничениям относятся: неполная поддержка некоторых инструкций и расширений процессора, проблемы с античитами и DRM в играх, а также программы, использующие самомодифицирующийся код или нестандартные приёмы. Если приложение доступно в нативной ARM64-версии, используйте её — эмуляция всегда компромисс.
Почему некоторые игры не запускаются даже при рабочем Box64
Частые причины — античит-системы, которые не работают под Wine; отсутствие нужных инструкций процессора; требование конкретных версий библиотек; DRM-защита. Это ограничения всего стека (Box64 + Wine + драйверы), а не одного эмулятора.
Решение типичных проблем
Если программа не запускается, действуйте последовательно. Сначала включите подробный журнал (BOX64_LOG=1 или выше) и посмотрите, на каком этапе происходит сбой: загрузка библиотек, трансляция кода или уже внутри самой программы.
Типичные ситуации и направления диагностики:
- ❌ Ошибка «не найдена библиотека» — проверьте
BOX64_LD_LIBRARY_PATHи наличие x86_64-версии библиотеки, а не ARM64. - 💥 Падение с сигналом (segfault) — возможно, программа использует неподдерживаемые инструкции; попробуйте другую версию программы или сообщите о проблеме разработчикам Box64.
- 🐢 Очень низкая скорость — проверьте, не работает ли программа на программном рендеринге, и убедитесь, что Dynarec активен.
- 🔇 Нет звука или графики — проблема обычно в обёрнутых библиотеках или драйверах системы, а не в трансляции.
⚠️ Внимание: не смешивайте в одном каталоге библиотеки x86_64 и ARM64 — это частая причина труднодиагностируемых сбоев. Держите библиотеки разных архитектур в раздельных путях.
Часто задаваемые вопросы
Можно ли запускать Windows-программы напрямую через Box64?
Нет. Box64 транслирует только архитектуру процессора (x86_64 → ARM64) для Linux-окружения. Для Windows-программ дополнительно нужен Wine, который реализует Windows API.
Работает ли Box64 на Android?
Да, через Termux с окружением proot-distro, где устанавливается полноценный Linux-дистрибутив. Это популярный сценарий для запуска настольных приложений и игр на смартфонах, но настройка требует терпения, а результат зависит от чипа устройства.
Чем Box64 отличается от QEMU?
QEMU в режиме пользовательской эмуляции интерпретирует инструкции более универсально, но медленнее. Box64 использует динамическую рекомпиляцию с кэшированием и обёртки нативных библиотек, поэтому обычно заметно быстрее, но ориентирован именно на связку Linux x86_64 → Linux ARM64.
Почему игра запускается, но сильно тормозит?
Возможные причины: программный рендеринг вместо аппаратного, отсутствие Vulkan-драйвера для DXVK, слабый процессор или активное логирование. Проверьте, работает ли графический ускоритель, и отключите подробный журнал после отладки.
Безопасно ли использовать Box64?
Сам эмулятор — открытый проект, не требующий root-модификаций системы сверх обычной установки пакетов. Как и с любым ПО, скачивайте исходники и бинарные файлы только из официального репозитория проекта и проверенных источников.