Tim Rolldown baru saja menggabungkan perbaikan yang menghentikan Vite agar tidak crash dengan kesalahan “Illegal instruction” pada perangkat Android ARM64 yang berjalan di bawah Termux. Setelah sepuluh bulan para pengembang menyaksikan build mereka gagal sebelum kode apa pun dijalankan, masalah tersebut akhirnya hilang, dan rilis Rolldown berikutnya di npm akan langsung berfungsi tanpa konfigurasi tambahan.

Mengapa crash ini penting

Termux memungkinkan pengguna menjalankan lingkungan bergaya Linux di ponsel Android, dan komunitas yang terus berkembang mengandalkannya sebagai satu-satunya workstation pengembangan mereka. Di Bangladesh, Nigeria, dan Indonesia, banyak pemrogram menggunakan ponsel alih-alih laptop untuk menulis dan membundel aplikasi web. Vite, alat build cepat yang menggerakkan banyak situs modern, adalah bagian inti dari alur kerja tersebut. Saat Vite mencoba dimulai, ia segera mengalami kesalahan “Illegal instruction”, yang menghentikan proses sebelum JavaScript apa pun sempat diparsing. Kesalahan tersebut tidak memberikan stack trace atau log karena terjadi saat memuat pustaka native, membuat pengembang terjebak dalam jalan buntu tanpa solusi yang jelas.

Ketidakcocokan teknis

Penyebab utamanya terletak pada asumsi tingkat rendah yang tertanam dalam binding native Rolldown. Kode tersebut mengharapkan prosesor mendukung instruksi ARMv8.1—sebuah set instruksi yang ada pada chip terbaru tetapi tidak ada pada banyak SoC Android yang banyak digunakan, seperti Cortex-A53. Ketika perangkat yang tidak memiliki instruksi tersebut mencoba memuat pustaka, CPU memicu pengecualian illegal-instruction.

Hal ini diperumit karena kode yang bermasalah berada dalam dependensi bernama mimalloc, sebuah alokator memori yang menyertakan flag keamanan yang dirancang untuk memblokir penggunaan instruksi yang tidak didukung. Flag tersebut hanya terpicu pada lingkungan “Linux standar”. Android, meskipun menggunakan kernel Linux, mengidentifikasi dirinya secara berbeda, sehingga pengaman tersebut tidak pernah aktif dan crash tersebut lolos.

Bagaimana perbaikan dibuat

Perubahan yang digabungkan ini memperluas pemeriksaan keamanan mimalloc untuk mengenali Android (dan FreeBSD) sebagai platform yang membutuhkan perlindungan yang sama. Dengan menambal (patching) pustaka tersebut alih-alih memaksa pengembang untuk membangun ulang atau mengganti paket, perbaikan ini memulihkan kompatibilitas tanpa langkah tambahan bagi pengguna akhir.

Apa yang didapatkan pengembang

  • Tidak perlu paket Termux khusus. Instalasi npm standar dari Rolldown sekarang menarik biner yang menghormati pemeriksaan keamanan baru tersebut.
  • Pengujian segera dimungkinkan. Build pratinjau yang dilampirkan pada pull request yang terbuka memungkinkan siapa pun dengan perangkat Android ARM64 untuk memverifikasi perbaikan tersebut hari ini, sementara versi resmi Rolldown berikutnya dirilis di npm.

Pertimbangan yang tersisa

Resolusi ini bergantung pada pemelihara Rolldown yang merilis paket yang telah diperbarui; hingga hal itu terjadi, pengguna harus mengandalkan build pratinjau.

Apa yang perlu dipantau selanjutnya

  • Waktu rilis npm. Pantau terus changelog Rolldown; saat versi baru mencapai registry, perintah sederhana npm install rolldown akan membawa perbaikan tersebut ke produksi.

Patch yang digabungkan ini mengubah kebuntuan selama berbulan-bulan menjadi pembaruan rutin, menunjukkan bagaimana data penggunaan dunia nyata dan laporan komunitas yang gigih dapat mengubah bug yang "tidak direncanakan" menjadi masalah yang teratasi. Bagi siapa pun yang membangun aplikasi web di ponsel, rilis Rolldown berikutnya akhirnya akan memungkinkan Vite dimulai tanpa membuat prosesor crash.