Rolldown टीम ने एक ऐसा फिक्स मर्ज किया है जो Termux पर चलने वाले Android ARM64 डिवाइस पर Vite को “Illegal instruction” एरर के साथ क्रैश होने से रोकता है। दस महीनों तक डेवलपर्स के अपने बिल्ड्स को कोड चलने से पहले ही क्रैश होते देखने के बाद, यह समस्या आखिरकार खत्म हो गई है, और npm पर अगला Rolldown रिलीज़ बिना किसी अतिरिक्त सेटअप के काम करेगा।
यह क्रैश क्यों महत्वपूर्ण था
Termux उपयोगकर्ताओं को Android फोन पर Linux-शैली का वातावरण चलाने की अनुमति देता है, और एक बढ़ता हुआ समुदाय इसे अपने एकमात्र डेवलपमेंट वर्कस्टेशन के रूप में उपयोग करता है। बांग्लादेश, नाइजीरिया और इंडोनेशिया में, कई प्रोग्रामर वेब एप्लिकेशन लिखने और बंडल करने के लिए लैपटॉप के बजाय फोन का उपयोग करते हैं। Vite, एक तेज़ बिल्ड टूल जो अनगिनत आधुनिक साइटों को शक्ति देता है, उस वर्कफ़्लो का एक मुख्य हिस्सा है। जब Vite शुरू होने की कोशिश करता था, तो यह तुरंत “Illegal instruction” फॉल्ट का सामना करता था, जिससे किसी भी JavaScript के पार्स होने से पहले ही प्रोसेस खत्म हो जाती थी। इस एरर ने कोई स्टैक ट्रेस या लॉग नहीं दिया क्योंकि यह एक नेटिव लाइब्रेरी लोड करते समय हुआ था, जिससे डेवलपर्स बिना किसी स्पष्ट समाधान के एक बंद रास्ते पर फंस जाते थे।
तकनीकी विसंगति
इसका मूल कारण Rolldown के नेटिव बाइंडिंग में निहित एक लो-लेवल धारणा (assumption) थी। कोड यह अपेक्षा करता था कि प्रोसेसर ARMv8.1 निर्देशों (instructions) का समर्थन करे—एक ऐसा सेट जो नए चिप्स में तो मौजूद है लेकिन Cortex-A53 जैसे कई व्यापक रूप से उपयोग किए जाने वाले Android SoCs में अनुपस्थित है। जब उन निर्देशों की कमी वाले डिवाइस ने लाइब्रेरी लोड करने की कोशिश की, तो CPU ने एक illegal-instruction exception उत्पन्न किया।
मामले को और जटिल बनाने वाली बात यह थी कि दोषपूर्ण कोड mimalloc नामक एक डिपेंडेंसी में था, जो एक मेमोरी एलोकेटर है और इसमें एक सुरक्षा फ्लैग (safety flag) शामिल है जिसे असमर्थ निर्देशों के उपयोग को रोकने के लिए डिज़ाइन किया गया है। वह फ्लैग केवल “standard Linux” वातावरण पर ही सक्रिय होता था। Android, Linux कर्नेल का उपयोग करने के बावजूद, खुद को अलग तरह से पहचानता है, इसलिए वह सुरक्षा कवच (safeguard) कभी सक्रिय नहीं हुआ और क्रैश होता रहा।
फिक्स कैसे बनाया गया
मर्ज किया गया बदलाव mimalloc के सुरक्षा चेक का विस्तार करता है ताकि Android (और FreeBSD) को उन प्लेटफार्मों के रूप में पहचाना जा सके जिन्हें समान सुरक्षा की आवश्यकता है। डेवलपर्स को पैकेज को फिर से बनाने या बदलने के लिए मजबूर करने के बजाय, लाइब्रेरी को पैच करके, यह फिक्स एंड-यूज़र्स के लिए बिना किसी अतिरिक्त कदम के कम्पैटिबिलिटी बहाल करता है।
डेवलपर्स को इससे क्या मिलेगा
- किसी कस्टम Termux पैकेज की आवश्यकता नहीं है। Rolldown का मानक npm install अब एक ऐसा बाइनरी (binary) डाउनलोड करता है जो नए सुरक्षा चेक का पालन करता है।
- तत्काल टेस्टिंग संभव है। ओपन पुल रिक्वेस्ट (pull request) के साथ जुड़ा एक प्रीव्यू बिल्ड किसी भी ARM64 Android डिवाइस वाले व्यक्ति को आज ही फिक्स को सत्यापित करने की अनुमति देता है, जबकि अगला आधिकारिक Rolldown वर्शन npm पर रोल आउट हो रहा है।
शेष विचार
इसका समाधान Rolldown मेंटेनर द्वारा अपडेटेड पैकेज प्रकाशित करने पर निर्भर करता है; जब तक ऐसा नहीं होता, उपयोगकर्ताओं को प्रीव्यू बिल्ड पर निर्भर रहना होगा।
आगे क्या देखें
- npm रिलीज़ का समय। Rolldown चेंजलॉग (changelog) पर नज़र रखें; जैसे ही नया वर्शन रजिस्ट्री में आता है, एक साधारण
npm install rolldownप्रोडक्शन में फिक्स ले आएगा।
मर्ज किया गया पैच महीनों के गतिरोध (deadlock) को एक रूटीन अपडेट में बदल देता है, जो यह दर्शाता है कि कैसे वास्तविक दुनिया का उपयोग डेटा और निरंतर सामुदायिक रिपोर्ट एक “not planned” बग को हल की गई समस्या में बदल सकती है। फोन पर वेब ऐप बनाने वाले किसी भी व्यक्ति के लिए, अगला Rolldown रिलीज़ आखिरकार Vite को प्रोसेसर को क्रैश किए बिना शुरू करने की अनुमति देगा।
