Termux ద్వారా నడిచే Android ARM64 పరికరాలపై Vite "Illegal instruction" ఎర్రర్‌తో క్రాష్ అవ్వకుండా నిరోధించే పరిష్కారాన్ని Rolldown టీమ్ తాజాగా విలీనం (merge) చేసింది. పది నెలల పాటు డెవలపర్లు తమ బిల్డ్‌లు కోడ్ రన్ అవ్వకముందే విఫలమవ్వడాన్ని చూస్తూ ఎదురుచూసిన తర్వాత, చివరకు ఆ సమస్య పరిష్కరించబడింది. npm లో రాబోయే తదుపరి Rolldown విడుదల నేరుగా (out-of-the-box) పనిచేస్తుంది.

ఈ క్రాష్ ఎందుకు ముఖ్యమైనది

Termux వినియోగదారులకు Android ఫోన్‌లపై Linux-శైలి ఎన్విరాన్మెంట్‌ను ఉపయోగించుకునే సౌకర్యాన్ని కల్పిస్తుంది, మరియు పెరుగుతున్న కమ్యూనిటీ దీనిని తమ ఏకైక డెవలప్‌మెంట్ వర్క్‌స్టేషన్‌గా నమ్ముతోంది. బంగ్లాదేశ్, నైజీరియా మరియు ఇండోనేషియా వంటి దేశాల్లో, చాలా మంది ప్రోగ్రామర్లు వెబ్ అప్లికేషన్‌లను వ్రాయడానికి మరియు బండిల్ చేయడానికి ల్యాప్‌టాప్‌కు బదులుగా ఫోన్‌ను ఉపయోగిస్తారు. అనేక ఆధునిక సైట్‌లకు శక్తినిచ్చే వేగవంతమైన బిల్డ్ టూల్ అయిన Vite, ఆ వర్క్‌ఫ్లోలో ఒక ముఖ్యమైన భాగం. Vite ప్రారంభం కావడానికి ప్రయత్నించినప్పుడు, అది వెంటనే “Illegal instruction” ఫాల్ట్‌ను ఎదుర్కొని, ఏ JavaScript పారాస్ (parse) చేయకముందే ప్రాసెస్‌ను నిలిపివేస్తుంది. ఈ ఎర్రర్ నేటివ్ లైబ్రరీని లోడ్ చేస్తున్నప్పుడు సంభవించడం వల్ల, ఎటువంటి స్టాక్ ట్రేస్ (stack trace) లేదా లాగ్ (log) లభించదు, దీనివల్ల డెవలపర్లు ఎటువంటి స్పష్టమైన మార్గం లేకుండా ఇబ్బంది పడాల్సి వచ్చేది.

సాంకేతిక అసమతుల్యత

దీనికి మూల కారణం Rolldown యొక్క నేటివ్ బైండింగ్‌లో ఉన్న ఒక లో-లెవల్ ఊహ (assumption). ప్రాసెసర్ ARMv8.1 ఇన్‌స్ట్రక్షన్‌లను సపోర్ట్ చేయాలని ఈ కోడ్ ఆశించింది—ఇది కొత్త చిప్‌లలో ఉంటుంది కానీ Cortex-A53 వంటి విస్తృతంగా ఉపయోగించబడే అనేక Android SoCలలో ఉండదు. ఆ ఇన్‌స్ట్రక్షన్‌లు లేని పరికరం లైబ్రరీని లోడ్ చేయడానికి ప్రయత్నించినప్పుడు, CPU 'illegal-instruction exception'ను లేవనెత్తింది.

సమస్యను మరింత క్లిష్టతరం చేసింది ఏమిటంటే, ఈ లోపం mimalloc అనే డిపెండెన్సీలో ఉంది. ఇది మెమరీ అలోకేటర్, ఇందులో సపోర్ట్ చేయని ఇన్‌స్ట్రక్షన్‌లను నిరోధించడానికి రూపొందించిన సేఫ్టీ ఫ్లాగ్ ఉంటుంది. అయితే, ఆ ఫ్లాగ్ కేవలం “standard Linux” ఎన్విరాన్మెంట్‌లలో మాత్రమే పనిచేస్తుంది. Android, Linux కెర్నల్‌ను ఉపయోగిస్తున్నప్పటికీ, తనను తాను భిన్నంగా గుర్తించుకుంటుంది, కాబట్టి ఆ సేఫ్‌గార్డ్ యాక్టివేట్ కాలేదు మరియు క్రాష్ జరిగిపోయింది.

ఈ పరిష్కారం ఎలా రూపొందించబడింది

విలీనం చేయబడిన ఈ మార్పు, mimalloc యొక్క సేఫ్టీ చెక్‌ను విస్తరించి, Android (మరియు FreeBSD)లను కూడా అదే రక్షణ అవసరమైన ప్లాట్‌ఫారమ్‌లుగా గుర్తించేలా చేస్తుంది. డెవలపర్లు ప్యాకేజీలను తిరిగి నిర్మించడం (rebuild) లేదా మార్చడం వంటివి చేయాల్సిన అవసరం లేకుండా, నేరుగా లైబ్రరీని ప్యాచ్ చేయడం ద్వారా, ఈ పరిష్కారం ఎటువంటి అదనపు దశలు లేకుండా అనుకూలతను (compatibility) పునరుద్ధరిస్తుంది.

డెవలపర్లకు దీని వల్ల కలిగే ప్రయోజనాలు

  • ప్రత్యేకమైన Termux ప్యాకేజీ అవసరం లేదు. Rolldown యొక్క ప్రామాణిక npm install ఇప్పుడు కొత్త సేఫ్టీ చెక్‌ను అనుసరించే బైనరీని పొందుతుంది.
  • వెంటనే పరీక్షించవచ్చు. ఓపెన్ పుల్ రిక్వెస్ట్‌కు (pull request) జత చేయబడిన ప్రివ్యూ బిల్డ్ ద్వారా, ARM64 Android పరికరం ఉన్న ఎవరైనా ఈ రోజునే ఈ పరిష్కారాన్ని ధృవీకరించవచ్చు, తదుపరి అధికారిక Rolldown వెర్షన్ npm లో అందుబాటులోకి వచ్చే వరకు ఇది ఉపయోగపడుతుంది.

మిగిలి ఉన్న అంశాలు

ఈ పరిష్కారం Rolldown మెయింటైనర్లు అప్‌డేట్ చేసిన ప్యాకేజీని విడుదల చేయడంపై ఆధారపడి ఉంటుంది; అది జరిగే వరకు, వినియోగదారులు ప్రివ్యూ బిల్డ్‌పై ఆధారపడాల్సి ఉంటుంది.

తదుపరి ఏం గమనించాలి

  • npm విడుదల సమయం. Rolldown changelog పై దృష్టి పెట్టండి; కొత్త వెర్షన్ రిజిస్ట్రీలోకి రాగానే, సాధారణ npm install rolldown ద్వారా ఈ పరిష్కారం ప్రొడక్షన్‌లోకి వస్తుంది.

విలీనం చేయబడిన ఈ ప్యాచ్, నెలల తరబడి కొనసాగుతున్న ఇబ్బందిని ఒక సాధారణ అప్‌డేట్‌గా మార్చింది. వాస్తవ ప్రపంచ వినియోగ డేటా మరియు నిరంతర కమ్యూనిటీ నివేదికలు, "ప్లాన్ చేయని" బగ్‌ను ఎలా పరిష్కరించబడిన సమస్యగా మార్చగలవో ఇది చూపిస్తుంది. ఫోన్‌పై వెబ్ యాప్‌లను నిర్మించే ఎవరికైనా, తదుపరి Rolldown విడుదల వల్ల చివరకు ప్రాసెసర్‌ను దెబ్బతీయకుండా Vite ప్రారంభమవుతుంది.