Команда Rolldown внедрила исправление, которое предотвращает сбои Vite с ошибкой «Illegal instruction» на устройствах Android ARM64 под управлением Termux. После десяти месяцев, в течение которых разработчики наблюдали, как их сборки «взрываются» еще до запуска кода, проблема наконец решена, и следующий релиз Rolldown в npm будет работать сразу «из коробки».
Почему этот сбой был важен
Termux позволяет пользователям запускать среду в стиле Linux на Android-смартфонах, и растущее сообщество использует его как единственную рабочую станцию для разработки. В Бангладеш, Нигерии и Индонезии многие программисты используют телефон вместо ноутбука для написания и сборки веб-приложений. Vite, быстрый инструмент сборки, на котором работают бесчисленные современные сайты, является ключевой частью этого процесса. При попытке запуска Vite сразу возникала ошибка «Illegal instruction», прерывавшая процесс еще до парсинга JavaScript. Ошибка не оставляла ни стека вызовов (stack trace), ни логов, так как происходила во время загрузки нативной библиотеки, оставляя разработчиков в тупике без четкого пути решения.
Техническое несоответствие
Первопричина заключалась в низкоуровневом допущении, заложенном в нативные привязки (native bindings) Rolldown. Код ожидал, что процессор поддерживает инструкции ARMv8.1 — набор, присутствующий в новых чипах, но отсутствующий во многих широко используемых Android SoC, таких как Cortex-A53. Когда устройство без этих инструкций пыталось загрузить библиотеку, процессор выдавал исключение «illegal-instruction».
Ситуацию осложняло то, что проблемный код находился в зависимости под названием mimalloc — аллокаторе памяти, который включает флаг безопасности для блокировки использования неподдерживаемых инструкций. Этот флаг срабатывал только в средах «стандартного Linux». Android, хотя и использует ядро Linux, идентифицирует себя иначе, поэтому защитный механизм не активировался, и сбой прошел незамеченным.
Как было создано исправление
Внесенное изменение расширяет проверку безопасности mimalloc, чтобы она распознавала Android (и FreeBSD) как платформы, требующие такой же защиты. Исправив библиотеку, а не заставляя разработчиков пересобирать или заменять пакеты, это решение восстанавливает совместимость без каких-либо дополнительных действий со стороны конечных пользователей.
Что это дает разработчикам
- Не требуется специальный пакет для Termux. Стандартная установка Rolldown через npm теперь загружает бинарный файл, учитывающий новую проверку безопасности.
- Возможность немедленного тестирования. Превью-сборка, прикрепленная к открытому pull request, позволяет любому владельцу Android-устройства с архитектурой ARM64 проверить исправление уже сегодня, пока следующая официальная версия Rolldown готовится к выпуску в npm.
Что стоит учитывать
Решение зависит от публикации обновленного пакета мейнтейнерами Rolldown; пока этого не произошло, пользователям придется полагаться на превью-сборку.
На что обратить внимание
- Сроки релиза в npm. Следите за журналом изменений (changelog) Rolldown; как только новая версия появится в реестре, простая команда
npm install rolldownприменит исправление в продакшн.
Внедренный патч превращает многомесячный тупик в рутинное обновление, показывая, как данные о реальном использовании и настойчивые сообщения сообщества могут превратить «не запланированный» баг в решенную проблему. Для всех, кто создает веб-приложения на телефоне, следующий релиз Rolldown наконец-то позволит Vite запускаться, не вызывая сбоев процессора.
