Команда Rolldown щойно об'єднала виправлення, яке запобігає збоям Vite з помилкою «Illegal instruction» на пристроях Android ARM64, що працюють через Termux. Після десяти місяців, протягом яких розробники спостерігали, як їхні збірки «вибухали» ще до запуску будь-якого коду, проблему нарешті вирішено, і наступний реліз Rolldown в npm працюватиме одразу «з коробки».
Чому цей збій був важливим
Termux дозволяє користувачам запускати середовище у стилі Linux на Android-смартфонах, і дедалі більша спільнота використовує його як єдину робочу станцію для розробки. У Бангладеш, Нігерії та Індонезії багато програмістів використовують телефон замість ноутбука для написання та збірки вебдодатків. Vite, швидкий інструмент збірки, на якому працюють незліченні сучасні сайти, є основною частиною цього робочого процесу. Коли Vite намагався запуститися, він одразу стикався з помилкою «Illegal instruction», що призводило до завершення процесу ще до того, як будь-який JavaScript був розпарсений. Помилка не надавала ні стека викликів (stack trace), ні логів, оскільки вона виникала під час завантаження нативної бібліотеки, залишаючи розробників у глухому куті без чіткого шляху до вирішення.
Технічна невідповідність
Першопричина полягала в низькорівневому припущенні, закладеному в нативне зв'язування (native binding) Rolldown. Код очікував, що процесор підтримує інструкції ARMv8.1 — набір, наявний у новіших чіпах, але відсутній у багатьох широко використовуваних Android SoC, таких як Cortex-A53. Коли пристрій без цих інструкцій намагався завантажити бібліотеку, процесор генерував виняток (exception) «illegal-instruction».
Ситуацію ускладнювало те, що проблемний код знаходився у залежності під назвою mimalloc — алокаторі пам'яті, який містить прапорець безпеки, призначений для блокування використання непотрібних інструкцій. Цей прапорець спрацьовував лише в середовищах «стандартного Linux». Android, хоча й використовує ядро Linux, ідентифікує себе інакше, тому захисний механізм ніколи не активувався, і збій просочився.
Як було створено виправлення
Зміни, що були об'єднані, розширюють перевірку безпеки mimalloc, щоб вона розпізнавала Android (та FreeBSD) як платформи, що потребують такого ж захисту. Завдяки патчу бібліотеки, а не примусу розробників перезбирати або замінити пакети, виправлення відновлює сумісність без жодних додаткових кроків для кінцевих користувачів.
Що це дає розробникам
- Не потрібно спеціальних пакетів для Termux. Стандартна команда
npm installдля Rolldown тепер завантажує бінарний файл, який враховує нову перевірку безпеки. - Можливість негайного тестування. Попередньо зібрана версія (preview build), додана до відкритого pull request, дозволяє будь-кому з пристроєм Android ARM64 перевірити виправлення вже сьогодні, поки наступна офіційна версія Rolldown з'являється в npm.
Що варто врахувати
Вирішення проблеми залежить від того, коли мейнтейнери Rolldown опублікують оновлений пакет; до того часу користувачам доведеться покладатися на preview build.
На що звернути увагу далі
- Час релізу в npm. Стежте за журналом змін (changelog) Rolldown; щойно нова версія з'явиться в реєстрі, проста команда
npm install rolldownпринесе виправлення у ваші робочі проєкти (production).
Об'єднаний патч перетворює багатомісячний глухий кут на рутинне оновлення, демонструючи, як дані про реальне використання та наполегливі звіти спільноти можуть перетворити «незапланований» баг на вирішену проблему. Для всіх, хто створює вебдодатки на телефоні, наступний реліз Rolldown нарешті дозволить Vite запускатися без «вибуху» процесора.
