Rolldown ٹیم نے ایک ایسا فکس (fix) شامل کر دیا ہے جو Termux پر چلنے والے Android ARM64 ڈیوائسز پر Vite کے "Illegal instruction" ایرر کے ساتھ کریش ہونے کو روکتا ہے۔ دس ماہ تک ڈویلپرز کے اپنے بلڈز (builds) کو کوڈ چلنے سے پہلے ہی تباہ ہوتے دیکھنے کے بعد، یہ مسئلہ آخر کار حل ہو گیا ہے، اور npm پر Rolldown کا اگلا ریلیز براہِ راست کام کرے گا۔
یہ کریش کیوں اہم تھا
Termux صارفین کو Android فونز پر Linux طرز کا ماحول چلانے کی اجازت دیتا ہے، اور بڑھتی ہوئی کمیونٹی اسے اپنے واحد ڈویلپمنٹ ورک اسٹیشن کے طور پر استعمال کرتی ہے۔ بنگلہ دیش، نائیجیریا اور انڈونیشیا میں، بہت سے پروگرامرز ویب ایپلی کیشنز لکھنے اور بنڈل کرنے کے لیے لیپ ٹاپ کے بجائے فون کا استعمال کرتے ہیں۔ Vite، ایک تیز رفتار بلڈ ٹول جو بے شمار جدید سائٹس کو طاقت فراہم کرتا ہے، اس ورک فلو کا ایک بنیادی حصہ ہے۔ جب Vite شروع ہونے کی کوشش کرتا، تو یہ فوری طور پر "Illegal instruction" کے فالٹ کا شکار ہو جاتا، اور کسی بھی JavaScript کے پرس (parse) ہونے سے پہلے ہی عمل (process) کو ختم کر دیتا۔ اس ایرر نے کوئی اسٹیک ٹریس (stack trace) یا لاگ فراہم نہیں کیا کیونکہ یہ ایک نیٹو لائبریری (native library) لوڈ کرتے وقت ہوا تھا، جس کی وجہ سے ڈویلپرز ایک ایسے بند راستے پر پھنس گئے جہاں کوئی واضح حل موجود نہیں تھا۔
تکنیکی عدم مطابقت
اس کی بنیادی وجہ Rolldown کی نیٹو بائنڈنگ (native binding) میں شامل ایک لو-لیول مفروضہ تھا۔ کوڈ یہ توقع کر رہا تھا کہ پروسیسر ARMv8.1 ہدایات (instructions) کو سپورٹ کرے گا—ایک ایسا سیٹ جو نئے چپس میں موجود ہے لیکن بہت سے وسیع پیمانے پر استعمال ہونے والے Android SoCs، جیسے کہ Cortex-A53 میں موجود نہیں ہے۔ جب ان ہدایات سے محروم ڈیوائس نے لائبریری لوڈ کرنے کی کوشش کی، تو CPU نے ایک "illegal-instruction exception" پیدا کیا۔
معاملات کو مزید پیچیدہ کرتے ہوئے، یہ مسئلہ mimalloc نامی ایک ڈیپینڈنسی (dependency) میں تھا، جو کہ ایک میموری ایلوکیٹر (memory allocator) ہے اور اس میں ایک سیفٹی فلیگ (safety flag) شامل ہے جسے غیر معاون ہدایات کے استعمال کو روکنے کے لیے ڈیزائن کیا گیا ہے۔ وہ فلیگ صرف "standard Linux" ماحول پر ہی ٹرگر ہوتا تھا۔ Android، اگرچہ Linux کرنل استعمال کرتا ہے، لیکن وہ خود کو مختلف طریقے سے شناخت کرتا ہے، اس لیے حفاظتی تدبیر کبھی فعال نہیں ہوئی اور کریش ہو گیا۔
فکس کیسے بنایا گیا
شامل کیا گیا بدلاؤ mimalloc کے سیفٹی چیک کو Android (اور FreeBSD) کو ایسے پلیٹ فارمز کے طور پر پہچاننے کے لیے وسعت دیتا ہے جنہیں اسی طرح کے تحفظ کی ضرورت ہے۔ ڈویلپرز کو پیکجز کو دوبارہ بنانے یا تبدیل کرنے پر مجبور کرنے کے بجائے لائبریری کو پیچ (patch) کر کے، یہ فکس اینڈ یوزرز کے لیے کسی اضافی مرحلے کے بغیر مطابقت (compatibility) بحال کرتا ہے۔
ڈویلپرز کو اس سے کیا ملے گا
- کسی کسٹم Termux پیکج کی ضرورت نہیں۔ Rolldown کا معیاری npm install اب ایک ایسا بائنری (binary) حاصل کرے گا جو نئے سیفٹی چیک کا احترام کرتا ہے۔
- فوری ٹیسٹنگ ممکن ہے۔ اوپن پل ریکویسٹ (pull request) کے ساتھ منسلک ایک پری ویو بلڈ (preview build) کسی بھی ARM64 Android ڈیوائس والے شخص کو آج ہی اس فکس کی تصدیق کرنے کی اجازت دیتا ہے، جبکہ Rolldown کا اگلا آفیشل ورژن npm پر جاری کیا جائے گا۔
باقی ماندہ غور طلب امور
اس کا حل Rolldown کے مینٹینرز (maintainers) کی جانب سے اپ ڈیٹ شدہ پیکج شائع کرنے پر منحصر ہے؛ جب تک ایسا نہیں ہوتا، صارفین کو پری ویو بلڈ پر بھروسہ کرنا ہوگا۔
آگے کیا دیکھنا ہے
- npm ریلیز کا وقت۔ Rolldown کے چینج لاگ (changelog) پر نظر رکھیں؛ جیسے ہی نیا ورژن رجسٹری میں آئے گا، ایک سادہ
npm install rolldownاس فکس کو پروڈکشن میں لے آئے گا۔
شامل کیا گیا پیچ (patch) مہینوں پر محیط ڈیڈ لاک کو ایک معمول کی اپ ڈیٹ میں بدل دیتا ہے، جو یہ دکھاتا ہے کہ کس طرح حقیقی دنیا کے استعمال کا ڈیٹا اور مستقل کمیونٹی رپورٹس ایک "غیر منصوبہ بند" بگ کو حل شدہ مسئلے میں بدل سکتی ہیں۔ فون پر ویب ایپس بنانے والے کسی بھی شخص کے لیے، Rolldown کا اگلا ریلیز آخر کار Vite کو پروسیسر کو تباہ کیے بغیر شروع کرنے کی اجازت دے گا۔
