Rolldown টিম সম্প্রতি একটি ফিক্স মার্জ করেছে যা Termux-এর অধীনে চলা Android ARM64 ডিভাইসে “Illegal instruction” এরর দিয়ে Vite ক্র্যাশ হওয়া বন্ধ করবে। দশ মাস ধরে ডেভেলপাররা কোড রান করার আগেই তাদের বিল্ড ক্র্যাশ হতে দেখে আসছিলেন, অবশেষে সেই সমস্যার সমাধান হয়েছে এবং npm-এ Rolldown-এর পরবর্তী রিলিজটি সরাসরি কাজ করবে।
কেন এই ক্র্যাশটি গুরুত্বপূর্ণ ছিল
Termux ব্যবহারকারীদের Android ফোনে একটি Linux-স্টাইল এনভায়রনমেন্ট চালানোর সুযোগ দেয় এবং একটি ক্রমবর্ধমান কমিউনিটি এটিকে তাদের একমাত্র ডেভেলপমেন্ট ওয়ার্কস্টেশন হিসেবে ব্যবহার করে। বাংলাদেশ, নাইজেরিয়া এবং ইন্দোনেশিয়ায় অনেক প্রোগ্রামার ওয়েব অ্যাপ্লিকেশন লেখা এবং বান্ডেল করার জন্য ল্যাপটপের পরিবর্তে ফোন ব্যবহার করেন। Vite, একটি দ্রুত বিল্ড টুল যা অসংখ্য আধুনিক সাইটকে সচল রাখে, সেই ওয়ার্কফ্লোর একটি অবিচ্ছেদ্য অংশ। যখন Vite চালু হওয়ার চেষ্টা করত, তখন এটি সাথে সাথে একটি “Illegal instruction” ফল্ট করত, যা কোনো JavaScript পার্স হওয়ার আগেই প্রসেসটিকে বন্ধ করে দিত। এররটি কোনো স্ট্যাক ট্রেস বা লগ প্রদান করত না কারণ এটি একটি নেটিভ লাইব্রেরি লোড করার সময় ঘটত, যার ফলে ডেভেলপাররা কোনো সমাধান ছাড়াই একটি অচলাবস্থায় আটকে যেতেন।
প্রযুক্তিগত অমিল
মূল কারণটি ছিল Rolldown-এর নেটিভ বাইন্ডিংয়ে থাকা একটি লো-লেভেল অনুমানের মধ্যে। কোডটি আশা করেছিল যে প্রসেসরটি ARMv8.1 ইন্সট্রাকশন সাপোর্ট করবে—যা নতুন চিপগুলোতে থাকলেও Cortex-A53-এর মতো অনেক বহুল ব্যবহৃত Android SoC-তে নেই। যখন সেই ইন্সট্রাকশনগুলো নেই এমন কোনো ডিভাইস লাইব্রেরিটি লোড করার চেষ্টা করত, তখন CPU একটি illegal-instruction exception তৈরি করত।
বিষয়টি আরও জটিল করে তোলে কারণ সমস্যাযুক্ত কোডটি mimalloc নামক একটি ডিপেন্ডেন্সিতে ছিল, যা একটি মেমরি অ্যালোকেটর এবং এতে একটি সেফটি ফ্ল্যাগ রয়েছে যা আনসাপোর্টেড ইন্সট্রাকশন ব্যবহার ব্লক করার জন্য ডিজাইন করা হয়েছে। সেই ফ্ল্যাগটি শুধুমাত্র “standard Linux” এনভায়রনমেন্টে কাজ করত। Android, যদিও Linux কার্নেল ব্যবহার করে, এটি নিজেকে ভিন্নভাবে শনাক্ত করে, তাই সেই সুরক্ষা ব্যবস্থাটি কখনোই সক্রিয় হতো না এবং ক্র্যাশটি ঘটে যেত।
কীভাবে ফিক্সটি তৈরি করা হয়েছে
মার্জ করা পরিবর্তনটি mimalloc-এর সেফটি চেককে এমনভাবে প্রসারিত করেছে যাতে এটি Android (এবং FreeBSD)-কে এমন প্ল্যাটফর্ম হিসেবে চিনতে পারে যাদের একই সুরক্ষার প্রয়োজন। ডেভেলপারদের প্যাকেজ পুনরায় তৈরি বা পরিবর্তন করতে বাধ্য না করে লাইব্রেরিটি প্যাচ করার মাধ্যমে, এই ফিক্সটি ব্যবহারকারীদের জন্য কোনো অতিরিক্ত ধাপ ছাড়াই সামঞ্জস্যতা ফিরিয়ে আনে।
ডেভেলপাররা এর মাধ্যমে কী পাবেন
- কোনো কাস্টম Termux প্যাকেজের প্রয়োজন নেই। Rolldown-এর স্ট্যান্ডার্ড npm install এখন এমন একটি বাইনারি ডাউনলোড করবে যা নতুন সেফটি চেক মেনে চলে।
- অবিলম্বে টেস্টিং সম্ভব। ওপেন পুল রিকোয়েস্টের সাথে সংযুক্ত একটি প্রিভিউ বিল্ডের মাধ্যমে যে কেউ আজই তাদের ARM64 Android ডিভাইসে এই ফিক্সটি যাচাই করতে পারবেন, যখন npm-এ Rolldown-এর পরবর্তী অফিসিয়াল ভার্সনটি রিলিজ হবে।
অবশিষ্ট বিবেচ্য বিষয়সমূহ
এই সমাধানটি Rolldown মেইনটেইনাররা আপডেট করা প্যাকেজটি প্রকাশ করার ওপর নির্ভর করছে; যতক্ষণ না তা ঘটছে, ব্যবহারকারীদের প্রিভিউ বিল্ডের ওপর নির্ভর করতে হবে।
পরবর্তীতে যা খেয়াল রাখতে হবে
- npm রিলিজের সময়। Rolldown-এর চ্যানজলগের (changelog) ওপর নজর রাখুন; নতুন ভার্সনটি রেজিস্ট্রি-তে আসার সাথে সাথেই একটি সাধারণ
npm install rolldownকমান্ডের মাধ্যমে প্রোডাকশনে এই ফিক্সটি নিয়ে আসা যাবে।
মার্জ করা প্যাচটি কয়েক মাসের অচলাবস্থাকে একটি রুটিন আপডেটে পরিণত করেছে, যা দেখায় যে কীভাবে বাস্তব জগতের ব্যবহারের ডেটা এবং কমিউনিটির ক্রমাগত রিপোর্ট একটি “পরিকল্পিত নয়” (not planned) বাগ-কে একটি সমাধান করা সমস্যার তালিকায় নিয়ে আসতে পারে। যারা ফোনে ওয়েব অ্যাপ তৈরি করেন, তাদের জন্য Rolldown-এর পরবর্তী রিলিজটি অবশেষে প্রসেসর ক্র্যাশ ছাড়াই Vite চালু করার সুযোগ দেবে।
