Pasukan Rolldown baru sahaja menggabungkan pembaikan yang menghalang Vite daripada terhenti (crash) dengan ralat “Illegal instruction” pada peranti Android ARM64 yang dijalankan di bawah Termux. Selepas sepuluh bulan pembangun melihat binaan (build) mereka gagal sebelum sebarang kod dijalankan, masalah tersebut akhirnya selesai, dan versi Rolldown seterusnya di npm akan berfungsi secara terus (out-of-the-box).
Mengapa kegagalan ini penting
Termux membolehkan pengguna menjalankan persekitaran gaya Linux pada telefon Android, dan komuniti yang semakin berkembang bergantung kepadanya sebagai satu-satunya stesen kerja pembangunan mereka. Di Bangladesh, Nigeria dan Indonesia, ramai pengaturcara menggunakan telefon berbanding komputer riba untuk menulis dan membungkus (bundle) aplikasi web. Vite, alat binaan pantas yang menggerakkan banyak laman web moden, adalah bahagian teras dalam aliran kerja tersebut. Apabila Vite cuba dimulakan, ia segera terkena ralat “Illegal instruction”, yang menghentikan proses tersebut sebelum sebarang JavaScript sempat dianalisis (parsed). Ralat tersebut tidak memberikan sebarang stack trace atau log kerana ia berlaku semasa memuatkan library asli, menyebabkan pembangun buntu tanpa jalan penyelesaian yang jelas.
Ketidakpadanan teknikal
Punca utamanya terletak pada andaian tahap rendah (low-level assumption) yang terbina dalam native binding Rolldown. Kod tersebut menjangkakan pemproses menyokong arahan ARMv8.1—satu set arahan yang ada pada cip baharu tetapi tiada pada banyak SoC Android yang digunakan secara meluas, seperti Cortex-A53. Apabila peranti yang tidak mempunyai arahan tersebut cuba memuatkan library, CPU akan mencetuskan pengecualian (exception) "illegal-instruction".
Keadaan menjadi lebih rumit kerana kod yang bermasalah itu berada dalam dependensi yang dipanggil mimalloc, sebuah penguntuk memori (memory allocator) yang menyertakan bendera keselamatan (safety flag) yang direka untuk menyekat penggunaan arahan yang tidak disokong. Bendera tersebut hanya dicetuskan pada persekitaran “standard Linux”. Android, walaupun menggunakan kernel Linux, mengenal pasti dirinya secara berbeza, jadi ciri keselamatan tersebut tidak pernah diaktifkan dan kegagalan itu terlepas begitu sahaja.
Bagaimana pembaikan dibina
Perubahan yang digabungkan itu memperluas semakan keselamatan mimalloc untuk mengenali Android (dan FreeBSD) sebagai platform yang memerlukan perlindungan yang sama. Dengan menampal (patching) library tersebut dan bukannya memaksa pembangun untuk membina semula atau menggantikan pakej, pembaikan ini memulihkan keserasian tanpa sebarang langkah tambahan untuk pengguna akhir.
Apa yang diperolehi oleh pembangun
- Tiada pakej Termux tersuai diperlukan. Pemasangan npm standard untuk Rolldown kini menarik binary yang mematuhi semakan keselamatan baharu tersebut.
- Pengujian segera boleh dilakukan. Versi pratonton yang disertakan pada pull request terbuka membolehkan sesiapa sahaja dengan peranti Android ARM64 mengesahkan pembaikan tersebut hari ini, sementara versi rasmi Rolldown seterusnya dilancarkan di npm.
Pertimbangan yang berbaki
Penyelesaian ini bergantung kepada penyelenggara Rolldown menerbitkan pakej yang dikemas kini; sehingga itu berlaku, pengguna mesti bergantung kepada versi pratonton.
Apa yang perlu diperhatikan seterusnya
- Masa pelepasan npm. Perhatikan log perubahan (changelog) Rolldown; sebaik sahaja versi baharu tersedia di registry, arahan mudah
npm install rolldownakan membawa pembaikan tersebut ke persekitaran produksi.
Tampalan yang digabungkan itu menukarkan kebuntuan berbulan-bulan kepada kemas kini rutin, menunjukkan bagaimana data penggunaan dunia nyata dan laporan komuniti yang berterusan boleh menukarkan pepijat yang “tidak dirancang” menjadi masalah yang telah diselesaikan. Bagi sesiapa yang membina aplikasi web pada telefon, versi Rolldown seterusnya akhirnya akan membolehkan Vite bermula tanpa menyebabkan kegagalan pada pemproses.
