Rolldown ટીમે એક એવો ફિક્સ (fix) મર્જ કર્યો છે જે Termux હેઠળ ચાલતા Android ARM64 ઉપકરણો પર "Illegal instruction" ભૂલ સાથે Vite ક્રેશ થતું અટકાવશે. દસ મહિના સુધી ડેવલપર્સના બિલ્ડ્સ કોડ ચાલતા પહેલા જ નિષ્ફળ જતા જોયા પછી, આ સમસ્યાનો અંત આવ્યો છે, અને npm પર આગામી Rolldown રિલીઝ સીધી જ કામ કરશે.

આ ક્રેશ કેમ મહત્વનો હતો

Termux વપરાશકર્તાઓને Android ફોન પર Linux-શૈલીનું એન્વાયરમેન્ટ (environment) ચલાવવાની મંજૂરી આપે છે, અને વધતો જતો સમુદાય તેને તેમના એકમાત્ર ડેવલપમેન્ટ વર્કસ્ટેશન તરીકે વાપરે છે. બાંગ્લાદેશ, નાઈજીરીયા અને ઇન્ડોનેશિયામાં, ઘણા પ્રોગ્રામરો વેબ એપ્લિકેશન્સ લખવા અને બંડલ કરવા માટે લેપટોપને બદલે ફોનનો ઉપયોગ કરે છે. Vite, એક ઝડપી બિલ્ડ ટૂલ જે અસંખ્ય આધુનિક સાઇટ્સને પાવર આપે છે, તે તે વર્કફ્લોનો મુખ્ય ભાગ છે. જ્યારે Vite શરૂ થવાનો પ્રયાસ કરતું, ત્યારે તે તરત જ "Illegal instruction" ફોલ્ટનો સામનો કરતું, જેના કારણે કોઈપણ JavaScript પાર્સ (parse) થાય તે પહેલાં જ પ્રોસેસ બંધ થઈ જતી. આ ભૂલ કોઈ સ્ટેક ટ્રેસ (stack trace) અથવા લોગ આપતી નહોતી કારણ કે તે નેટિવ લાઇબ્રેરી લોડ કરતી વખતે બની હતી, જેના કારણે ડેવલપર્સ કોઈ સ્પષ્ટ ઉકેલ વિના અટકી ગયા હતા.

ટેકનિકલ અસંગતતા

આનું મૂળ કારણ Rolldown ના નેટિવ બાઈન્ડિંગમાં રહેલી એક લો-લેવલ ધારણા હતી. કોડ એવી અપેક્ષા રાખતો હતો કે પ્રોસેસર ARMv8.1 ઇન્સ્ટ્રક્શનને સપોર્ટ કરે—જે નવા ચિપ્સમાં ઉપલબ્ધ છે પરંતુ Cortex-A53 જેવા વ્યાપકપણે ઉપયોગમાં લેવાતા ઘણા Android SoC માં નથી. જ્યારે તે ઇન્સ્ટ્રક્શન વગરનું ઉપકરણ લાઇબ્રેરી લોડ કરવાનો પ્રયાસ કરતું, ત્યારે CPU 'illegal-instruction exception' ઊભું કરતું હતું.

બાબતોને વધુ જટિલ બનાવનાર બાબત એ હતી કે, આ ભૂલભરેલો કોડ mimalloc નામના ડિપેન્ડન્સીમાં હતો, જે એક મેમરી એલોકેટર છે અને તેમાં અસમર્થિત ઇન્સ્ટ્રક્શનના ઉપયોગને રોકવા માટે ડિઝાઇન કરવામાં આવેલ સેફ્ટી ફ્લેગ (safety flag) સામેલ છે. તે ફ્લેગ ફક્ત "standard Linux" એન્વાયરમેન્ટમાં જ ટ્રિગર થતો હતો. Android, Linux કર્નલનો ઉપયોગ કરતું હોવા છતાં, પોતાની ઓળખ અલગ રીતે આપે છે, તેથી આ સુરક્ષા કવચ (safeguard) ક્યારેય સક્રિય થયું નહીં અને ક્રેશ થઈ ગયું.

ફિક્સ કેવી રીતે બનાવવામાં આવ્યું

મર્જ કરવામાં આવેલ ફેરફાર mimalloc ના સેફ્ટી ચેકને Android (અને FreeBSD) ને એવા પ્લેટફોર્મ તરીકે ઓળખવા માટે વિસ્તૃત કરે છે જેને સમાન સુરક્ષાની જરૂર છે. ડેવલપર્સને પેકેજ ફરીથી બનાવવા અથવા બદલવા માટે મજબૂર કરવાને બદલે લાઇબ્રેરીને પેચ (patch) કરીને, આ ફિક્સ અંતિમ વપરાશકર્તાઓ માટે કોઈપણ વધારાના સ્ટેપ્સ વગર સુસંગતતા પુનઃસ્થાપિત કરે છે.

ડેવલપર્સને આનાથી શું ફાયદો થશે

  • કોઈ કસ્ટમ Termux પેકેજની જરૂર નથી. Rolldown નું સ્ટાન્ડર્ડ npm install હવે એવું બાઈનરી (binary) મેળવે છે જે નવા સેફ્ટી ચેકનું પાલન કરે છે.
  • તાત્કાલિક ટેસ્ટિંગ શક્ય છે. ઓપન પુલ રિક્વેસ્ટ (pull request) સાથે જોડાયેલ પ્રીવ્યુ બિલ્ડ કોઈપણ ARM64 Android ઉપકરણ ધરાવનાર વ્યક્તિને આજે જ આ ફિક્સ ચકાસવાની મંજૂરી આપે છે, જ્યારે npm પર આગામી સત્તાવાર Rolldown વર્ઝન બહાર આવશે.

બાકીના ધ્યાનમાં લેવા જેવા મુદ્દાઓ

આ ઉકેલ Rolldown મેન્ટેનર્સ દ્વારા અપડેટેડ પેકેજ પ્રકાશિત કરવા પર નિર્ભર છે; ત્યાં સુધી, વપરાશકર્તાઓએ પ્રીવ્યુ બિલ્ડ પર આધાર રાખવો પડશે.

આગળ શું જોવું

  • npm રિલીઝનું સમયગાળું. Rolldown ના ચેન્જલોગ (changelog) પર નજર રાખો; જે ક્ષણે નવું વર્ઝન રજિસ્ટ્રીમાં આવશે, ત્યારે એક સાદું npm install rolldown પ્રોડક્શનમાં ફિક્સ લાવી દેશે.

મર્જ કરેલ પેચ મહિનાઓથી ચાલી રહેલા ડેડલોકને રૂટિન અપડેટમાં ફેરવી દે છે, જે દર્શાવે છે કે કેવી રીતે વાસ્તવિક ઉપયોગના ડેટા અને સતત સમુદાયના રિપોર્ટ્સ એક "not planned" બગને ઉકેલાયેલી સમસ્યામાં બદલી શકે છે. ફોન પર વેબ એપ્સ બનાવતા કોઈપણ વ્યક્તિ માટે, આગામી Rolldown રિલીઝ અંતે પ્રોસેસરને ક્રેશ કર્યા વિના Vite શરૂ કરવા દેશે.