Rolldown टीमने नुकताच असा एक उपाय (fix) एकत्रित केला आहे, ज्यामुळे Termux अंतर्गत चालणाऱ्या Android ARM64 उपकरणांवर Vite क्रॅश होणे थांबेल. दहा महिन्यांपासून डेव्हलपर्सना त्यांचे बिल्ड्स कोड रन होण्यापूर्वीच फेल होताना पाहावे लागत होते, पण आता ही समस्या सुटली आहे आणि npm वरील Rolldown ची पुढील आवृत्ती थेट (out-of-the-box) काम करेल.
हा क्रॅश का महत्त्वाचा होता
Termux वापरकर्त्यांना Android फोनवर Linux-शैलीतील वातावरण चालवण्याची सुविधा देते आणि वाढत्या समुदायासाठी हे एकमेव डेव्हलपमेंट वर्कस्टेशन आहे. बांगलादेश, नायजेरिया आणि इंडोनेशियामध्ये अनेक प्रोग्रामर्स लॅपटॉपऐवजी वेब ॲप्लिकेशन्स लिहिण्यासाठी आणि बंडल करण्यासाठी फोनचा वापर करतात. Vite, जे अनेक आधुनिक साइट्सना शक्ती देणारे एक वेगवान बिल्ड टूल आहे, ते या वर्कफ्लोचा एक मुख्य भाग आहे. जेव्हा Vite सुरू करण्याचा प्रयत्न करत असे, तेव्हा ते लगेच “Illegal instruction” दोषामुळे (fault) बंद पडत असे, ज्यामुळे कोणताही JavaScript कोड पार्स होण्यापूर्वीच प्रक्रिया थांबत असे. ही त्रुटी नेटिव्ह लायब्ररी लोड करताना येत असल्याने, कोणताही स्टॅक ट्रेस (stack trace) किंवा लॉग मिळत नसे, ज्यामुळे डेव्हलपर्सना कोणताही मार्ग न सापडता अडकून पडायचे.
तांत्रिक विसंगती
याचे मूळ कारण Rolldown च्या नेटिव्ह बाइंडिंगमध्ये असलेल्या एका लो-लेव्हल गृहितकामध्ये (assumption) होते. कोडमध्ये प्रोसेसरने ARMv8.1 सूचनांना (instructions) सपोर्ट करणे अपेक्षित होते—ही सूचना नवीन चिप्समध्ये उपलब्ध असते, परंतु Cortex-A53 सारख्या मोठ्या प्रमाणावर वापरल्या जाणाऱ्या अनेक Android SoCs मध्ये नसते. जेव्हा या सूचना नसलेले उपकरण लायब्ररी लोड करण्याचा प्रयत्न करत असे, तेव्हा CPU ने 'illegal-instruction exception' दिला.
परिस्थिती अधिक गुंतागुंतीची झाली कारण ही त्रुटी mimalloc नावाच्या डिपेंडन्सीमध्ये होती, जे एक मेमरी अलोकेटर आहे आणि त्यात असमर्थित सूचनांना रोखण्यासाठी एक सेफ्टी फ्लॅग (safety flag) समाविष्ट असतो. तो फ्लॅग फक्त “standard Linux” वातावरणातच सक्रिय होत असे. Android, जरी Linux कर्नल वापरत असले तरी, स्वतःची ओळख वेगळ्या पद्धतीने देते, त्यामुळे तो सुरक्षा उपाय (safeguard) कधीच सक्रिय झाला नाही आणि क्रॅश होत राहिला.
हा उपाय कसा तयार केला गेला
एकत्रित केलेला बदल mimalloc च्या सेफ्टी चेकचा विस्तार करतो, जेणेकरून Android (आणि FreeBSD) ला अशा प्लॅटफॉर्म्सच्या रूपात ओळखले जाईल ज्यांना त्याच प्रकारच्या संरक्षणाची गरज आहे. डेव्हलपर्सना पॅकेजेस पुन्हा बिल्ड करण्यास किंवा बदलण्यास भाग पाडण्याऐवजी, लायब्ररीमध्ये पॅच (patch) करून हा उपाय वापरकर्त्यांसाठी कोणताही अतिरिक्त पाऊल न उचलत सुसंगतता (compatibility) पुन्हा प्रस्थापित करतो.
डेव्हलपर्सना याचा काय फायदा होईल
- कोणत्याही कस्टम Termux पॅकेजची गरज नाही. Rolldown ची मानक npm install आता असा बायनरी (binary) घेते जो नवीन सेफ्टी चेकचे पालन करतो.
- तात्काळ टेस्टिंग शक्य आहे. ओपन पुल रिक्वेस्टला (pull request) जोडलेली एक प्रिव्ह्यू बिल्ड (preview build) कोणत्याही ARM64 Android डिव्हाइस असलेल्या व्यक्तीला आजच हा उपाय तपासण्याची परवानगी देते, तर npm वरील Rolldown ची पुढील अधिकृत आवृत्ती रोल आउट होत आहे.
उर्वरित गोष्टी
हा उपाय Rolldown मेंटेनर्सने अपडेटेड पॅकेज प्रकाशित करण्यावर अवलंबून आहे; तोपर्यंत, वापरकर्त्यांना प्रिव्ह्यू बिल्डवर अवलंबून राहावे लागेल.
पुढे काय पाहावे
- npm रिलीजची वेळ. Rolldown च्या चेंजलॉगवर (changelog) लक्ष ठेवा; ज्या क्षणी नवीन आवृत्ती रजिस्ट्रीमध्ये येईल, तेव्हा एक साधा
npm install rolldownहा उपाय प्रोडक्शनमध्ये आणेल.
हा एकत्रित केलेला पॅच महिन्यांपासूनचा अडथळा एका नियमित अपडेटमध्ये बदलतो, आणि हे दर्शवतो की वास्तविक जगातील वापराचा डेटा आणि सातत्यपूर्ण समुदाय अहवाल (community reports) कशा प्रकारे “नियोजित नसलेल्या” (not planned) बगला सुटलेल्या समस्येत बदलू शकतात. फोनवर वेब ॲप्स बनवणाऱ्या प्रत्येकासाठी, Rolldown ची पुढील आवृत्ती अखेर प्रोसेसर क्रॅश न होता Vite सुरू करण्यास मदत करेल.
