Termux ഉപയോഗിക്കുന്ന Android ARM64 ഉപകരണങ്ങളിൽ Vite "Illegal instruction" എന്ന എറർ കാരണം ക്രാഷ് ആകുന്നത് തടയാനുള്ള ഒരു പരിഹാരം Rolldown ടീം ഇപ്പോൾ ഉൾപ്പെടുത്തിയിരിക്കുന്നു. പത്ത് മാസത്തോളം ഡെവലപ്പർമാർ തങ്ങളുടെ ബിൽഡുകൾ പ്രവർത്തിക്കുന്നതിന് മുമ്പ് തന്നെ തകരാറിലാകുന്നത് കണ്ടുനിന്നതിന് ശേഷം, ഈ പ്രശ്നം ഒടുവിൽ പരിഹരിക്കപ്പെട്ടു. npm-ലെ അടുത്ത Rolldown റിലീസ് ഉടൻ തന്നെ തടസ്സമില്ലാതെ പ്രവർത്തിക്കും.
ഈ ക്രാഷ് പ്രധാനപ്പെട്ടത് എന്തുകൊണ്ട്
ആൻഡ്രോയിഡ് ഫോണുകളിൽ ലിനക്സ് ശൈലിയിലുള്ള ഒരു എൻവയോൺമെന്റ് പ്രവർത്തിപ്പിക്കാൻ Termux ഉപയോക്താക്കളെ അനുവദിക്കുന്നു, വളർന്നുവരുന്ന ഒരു വലിയ കമ്മ്യൂണിറ്റി ഇതിനെ അവരുടെ ഏക ഡെവലപ്മെന്റ് വർക്ക്സ്റ്റേഷനായി ആശ്രയിക്കുന്നു. ബംഗ്ലാദേശ്, നൈജീരിയ, ഇന്തോനേഷ്യ എന്നിവിടങ്ങളിൽ പല പ്രോഗ്രാമർമാരും വെബ് ആപ്ലിക്കേഷനുകൾ എഴുതുന്നതിനും ബണ്ടിൽ ചെയ്യുന്നതിനും ലാപ്ടോപ്പിന് പകരം ഫോണാണ് ഉപയോഗിക്കുന്നത്. അസംഖ്യം ആധുനിക സൈറ്റുകൾക്ക് കരുത്തുപകരുന്ന വേഗതയേറിയ ഒരു ബിൽഡ് ടൂളായ Vite, ആ വർക്ക്ഫ്ലോയുടെ ഒരു പ്രധാന ഭാഗമാണ്. Vite പ്രവർത്തിക്കാൻ ശ്രമിക്കുമ്പോൾ, ജാവാസ്ക്രിപ്റ്റ് പാഴ്സ് ചെയ്യുന്നതിന് മുമ്പ് തന്നെ അത് "Illegal instruction" എന്ന പിശക് കാരണം ഉടൻ തന്നെ നിലയ്ക്കുന്നു. ഒരു നേറ്റീവ് ലൈബ്രറി ലോഡ് ചെയ്യുന്നതിനിടയിലാണ് ഇത് സംഭവിച്ചത് എന്നതിനാൽ, എററിന് സ്റ്റാക്ക് ട്രാസോ ലോഗോ ലഭിക്കില്ല, ഇത് ഡെവലപ്പർമാരെ പരിഹാരമില്ലാത്ത അവസ്ഥയിലാക്കി.
സാങ്കേതികമായ പൊരുത്തക്കേട്
ഇതിന്റെ മൂലകാരണം Rolldown-ന്റെ നേറ്റീവ് ബൈൻഡിംഗിൽ ഉൾപ്പെട്ടിരുന്ന ഒരു ലോ-ലെവൽ അനുമാനമായിരുന്നു. പ്രോസസറിൽ ARMv8.1 ഇൻസ്ട്രക്ഷനുകൾ ഉണ്ടാവണമെന്ന് കോഡ് പ്രതീക്ഷിച്ചു—പുതിയ ചിപ്പുകളിൽ ഇത് ലഭ്യമാണെങ്കിലും, Cortex-A53 പോലുള്ള വ്യാപകമായി ഉപയോഗിക്കുന്ന പല ആൻഡ്രോയിഡ് SoCs-ലും ഇത് ലഭ്യമല്ല. ഈ ഇൻസ്ട്രക്ഷനുകൾ ഇല്ലാത്ത ഒരു ഉപകരണം ലൈബ്രറി ലോഡ് ചെയ്യാൻ ശ്രമിക്കുമ്പോൾ, CPU ഒരു 'illegal-instruction exception' ഉയർത്തുന്നു.
ഇതിനെ കൂടുതൽ സങ്കീർണ്ണമാക്കിയത്, mimalloc എന്ന ഡിപ്പൻഡൻസിയിലുള്ള കോഡാണ്. സപ്പോർട്ട് ചെയ്യാത്ത ഇൻസ്ട്രക്ഷനുകൾ തടയാൻ രൂപകൽപ്പന ചെയ്ത ഒരു സേഫ്റ്റി ഫ്ലാഗ് ഈ മെമ്മറി അലോക്കേറ്ററിൽ ഉണ്ട്. എന്നാൽ ഈ ഫ്ലാഗ് "സ്റ്റാൻഡാർഡ് ലിനക്സ്" എൻവയോൺമെന്റുകളിൽ മാത്രമേ പ്രവർത്തിക്കുമായിരുന്നുള്ളൂ. ആൻഡ്രോയിഡ് ലിനക്സ് കേർണൽ ഉപയോഗിക്കുന്നുണ്ടെങ്കിലും, അത് സ്വയം തിരിച്ചറിയുന്നത് വ്യത്യസ്തമായ രീതിയിലാണ്, അതിനാൽ ഈ സുരക്ഷാ സംവിധാനം പ്രവർത്തിച്ചില്ല, തൽഫലമായി ക്രാഷ് സംഭവിച്ചു.
പരിഹാരം എങ്ങനെ നിർമ്മിച്ചു
ഈ മാറ്റം mimalloc-ന്റെ സേഫ്റ്റി ചെക്ക് ആൻഡ്രോയിഡിനെയും (FreeBSD ഉൾപ്പെടെ) ഒരേ സംരക്ഷണം ആവശ്യമുള്ള പ്ലാറ്റ്ഫോമുകളായി തിരിച്ചറിയാൻ വിപുലീകരിക്കുന്നു. ഡെവലപ്പർമാരെ പാക്കേജുകൾ വീണ്ടും നിർമ്മിക്കാനോ മാറ്റാനോ നിർബന്ധിക്കുന്നതിന് പകരം, ലൈബ്രറി പാച്ച് ചെയ്യുന്നതിലൂടെ ഉപയോക്താക്കൾക്ക് അധിക നടപടികൾ ഇല്ലാതെ തന്നെ ഇത് പരിഹരിക്കപ്പെടുന്നു.
ഡെവലപ്പർമാർക്ക് ഇതിലൂടെ ലഭിക്കുന്നത്
- പ്രത്യേക Termux പാക്കേജുകൾ ആവശ്യമില്ല. Rolldown-ന്റെ സാധാരണ npm ഇൻസ്റ്റാൾ ഇപ്പോൾ പുതിയ സേഫ്റ്റി ചെക്ക് പാലിക്കുന്ന ഒരു ബൈനറി തന്നെ ലഭ്യമാക്കും.
- ഉടനടി പരിശോധന സാധ്യമാണ്. ഓപ്പൺ പുൾ റിക്വസ്റ്റിൽ (pull request) നൽകിയിട്ടുള്ള പ്രിവ്യൂ ബിൽഡ് ഉപയോഗിച്ച് ARM64 ആൻഡ്രോയിഡ് ഉപകരണം ഉള്ളവർക്ക് ഇന്ന് തന്നെ ഈ പരിഹാരം പരിശോധിക്കാവുന്നതാണ്. അടുത്ത ഔദ്യോഗിക Rolldown പതിപ്പ് npm-ൽ ലഭ്യമാകുന്നതുവരെ ഇത് ഉപയോഗിക്കാം.
ശ്രദ്ധിക്കേണ്ട കാര്യങ്ങൾ
Rolldown മെയിന്റൈനർമാർ അപ്ഡേറ്റ് ചെയ്ത പാക്കേജ് പ്രസിദ്ധീകരിക്കുന്നതിനെ ആശ്രയിച്ചിരിക്കും ഈ പരിഹാരം; അതുവരെ ഉപയോക്താക്കൾക്ക് പ്രിവ്യൂ ബിൽഡ് ഉപയോഗിക്കേണ്ടി വരും.
ഇനി ശ്രദ്ധിക്കേണ്ടത്
- npm റിലീസ് സമയം. Rolldown changelog ശ്രദ്ധിക്കുക; പുതിയ പതിപ്പ് രജിസ്ട്രിയിൽ ലഭ്യമാകുന്ന നിമിഷം, ലളിതമായ ഒരു
npm install rolldownഎന്ന കമാൻഡ് വഴി ഈ പരിഹാരം പ്രൊഡക്ഷനിലേക്ക് എത്തിക്കാം.
മാസങ്ങളായുള്ള പ്രതിസന്ധിയെ ഒരു സാധാരണ അപ്ഡേറ്റാക്കി മാറ്റുന്ന ഈ പാച്ച്, യഥാർത്ഥ ലോകത്തെ ഉപയോഗ വിവരങ്ങളും കമ്മ്യൂണിറ്റി റിപ്പോർട്ടുകളും എങ്ങനെ ഒരു "പ്ലാൻ ചെയ്യാത്ത" ബഗ്ഗിനെ പരിഹരിക്കപ്പെട്ട പ്രശ്നമാക്കി മാറ്റുന്നു എന്ന് കാണിച്ചുതരുന്നു. ഫോണിൽ വെബ് ആപ്പുകൾ നിർമ്മിക്കുന്നവർക്ക്, അടുത്ത Rolldown റിലീസ് പ്രോസസറിനെ തകരാതെ തന്നെ Vite പ്രവർത്തിപ്പിക്കാൻ സഹായിക്കും.
