Zespół Rolldown właśnie scalił poprawkę, która zapobiega awariom Vite z błędem „Illegal instruction” na urządzeniach Android ARM64 działających w środowisku Termux. Po dziesięciu miesiącach, podczas których programiści obserwowali, jak ich procesy budowania wybuchają, zanim jakikolwiek kod został uruchomiony, problem w końcu zniknął, a kolejna wersja Rolldown w npm będzie działać od razu po instalacji.

Dlaczego ten crash był istotny

Termux pozwala użytkownikom na uruchomienie środowiska typu Linux na telefonach z Androidem, a rosnąca społeczność polega na nim jako na jedynym stanowisku programistycznym. W Bangladeszu, Nigerii i Indonezji wielu programistów używa telefonu zamiast laptopa do pisania i pakowania aplikacji webowych. Vite, szybkie narzędzie budujące, które napędza niezliczone nowoczesne witryny, jest kluczowym elementem tego przepływu pracy. Gdy Vite próbował się uruchomić, natychmiast napotykał błąd „Illegal instruction”, co przerywało proces jeszcze przed sparsowaniem jakiegokolwiek kodu JavaScript. Błąd nie dostarczał stack trace ani logów, ponieważ występował podczas ładowania natywnej biblioteki, pozostawiając programistów w ślepym zaułku bez jasnej drogi do znalezienia obejścia.

Techniczna niezgodność

Przyczyną leżało niskopoziomowe założenie zawarte w natywnym wiązaniu (native binding) Rolldown. Kod zakładał, że procesor obsługuje instrukcje ARMv8.1 — zestaw obecny w nowszych chipach, ale nieobecny w wielu powszechnie stosowanych układach SoC Androida, takich jak Cortex-A53. Gdy urządzenie nieposiadające tych instrukcji próbowało załadować bibliotekę, procesor zgłaszał wyjątek „illegal-instruction”.

Sytuację komplikował fakt, że problematyczny kod znajdował się w zależności o nazwie mimalloc, alokatorze pamięci, który zawiera flagę bezpieczeństwa zaprojektowaną w celu blokowania użycia nieobsługiwanych instrukcji. Flaga ta aktywowała się tylko w środowiskach „standardowego Linuxa”. Android, mimo że korzysta z jądra Linux, identyfikuje się inaczej, przez co zabezpieczenie nigdy się nie aktywowało, a awaria przeszła niezauważona.

Jak przygotowano poprawkę

Scalona zmiana rozszerza mechanizm sprawdzania bezpieczeństwa w mimalloc, aby rozpoznawał Androida (oraz FreeBSD) jako platformy wymagające takiej samej ochrony. Poprzez załatanie biblioteki, zamiast zmuszać programistów do przebudowywania lub zastępowania pakietów, poprawka przywraca kompatybilność bez żadnych dodatkowych kroków ze strony użytkowników końcowych.

Co zyskują programiści

  • Brak potrzeby używania niestandardowego pakietu Termux. Standardowa instalacja Rolldown przez npm pobiera teraz binaria, które respektują nowy mechanizm sprawdzania bezpieczeństwa.
  • Możliwość natychmiastowego przetestowania. Wersja podglądowa (preview build) dołączona do otwartego pull requesta pozwala każdemu, kto posiada urządzenie z Androidem ARM64, zweryfikować poprawkę już dziś, podczas gdy kolejna oficjalna wersja Rolldown będzie trafiać na npm.

Pozostałe kwestie

Rozwiązanie zależy od opublikowania zaktualizowanego pakietu przez utrzymujących Rolldown; dopóki to nie nastąpi, użytkownicy muszą polegać na wersji podglądowej.

Na co zwrócić uwagę w następnej kolejności

  • Czas wydania na npm. Należy śledzić changelog Rolldown; w momencie, gdy nowa wersja trafi do rejestru, proste polecenie npm install rolldown wprowadzi poprawkę do środowisk produkcyjnych.

Scalona poprawka zmienia wielomiesięczny impas w rutynową aktualizację, pokazując, jak dane o rzeczywistym użytkowaniu i wytrwałe raporty społeczności mogą przekształcić błąd oznaczony jako „nieplanowany” w rozwiązany problem. Dla każdego, kto buduje aplikacje webowe na telefonie, kolejna wersja Rolldown w końcu pozwoli Vite uruchomić się bez powodowania awarii procesora.