Termux ಅಡಿಯಲ್ಲಿ ಚಲಿಸುವ Android ARM64 ಸಾಧನಗಳಲ್ಲಿ Vite "Illegal instruction" ದೋಷದೊಂದಿಗೆ ಕ್ರ್ಯಾಶ್ ಆಗುವುದನ್ನು ತಡೆಯಲು Rolldown ತಂಡವು ಈಗ ತಾನೇ ಒಂದು ಪರಿಹಾರವನ್ನು (fix) ವಿಲೀನಗೊಳಿಸಿದೆ. ಹತ್ತು ತಿಂಗಳುಗಳ ಕಾಲ ಯಾವುದೇ ಕೋಡ್ ರನ್ ಆಗುವ ಮೊದಲೇ ಬಿಲ್ಡ್ಗಳು ವಿಫಲವಾಗುವುದನ್ನು ನೋಡಿದ ನಂತರ, ಕೊನೆಗೂ ಈ ಸಮಸ್ಯೆಯು ದೂರವಾಗಿದೆ ಮತ್ತು npm ನಲ್ಲಿನ ಮುಂದಿನ Rolldown ಬಿಡುಗಡೆಯು ತಕ್ಷಣವೇ ಕೆಲಸ ಮಾಡುತ್ತದೆ.
ಈ ಕ್ರ್ಯಾಶ್ ಏಕೆ ಮುಖ್ಯವಾಗಿತ್ತು
Termux ಬಳಕೆದಾರರಿಗೆ Android ಫೋನ್ಗಳಲ್ಲಿ Linux-ಶೈಲಿಯ ಪರಿಸರವನ್ನು ಬಳಸಲು ಅನುಮತಿಸುತ್ತದೆ ಮತ್ತು ಬೆಳೆಯುತ್ತಿರುವ ಸಮುದಾಯವು ಇದನ್ನು ತಮ್ಮ ಏಕೈಕ ಡೆವಲಪ್ಮೆಂಟ್ ವರ್ಕ್ಸ್ಟೇಷನ್ ಆಗಿ ಅವಲಂಬಿಸಿದೆ. ಬಾಂಗ್ಲಾದೇಶ, ನೈಜೀರಿಯಾ ಮತ್ತು ಇಂಡೋನೇಷ್ಯಾದಲ್ಲಿ, ಅನೇಕ ಪ್ರೋಗ್ರಾಮರ್ಗಳು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಬರೆಯಲು ಮತ್ತು ಬಂಡಲ್ ಮಾಡಲು ಲ್ಯಾಪ್ಟಾಪ್ ಬದಲಿಗೆ ಫೋನ್ ಬಳಸುತ್ತಾರೆ. ಅಸಂಖ್ಯಾತ ಆಧುನಿಕ ಸೈಟ್ಗಳಿಗೆ ಶಕ್ತಿಯನ್ನು ನೀಡುವ ವೇಗದ ಬಿಲ್ಡ್ ಟೂಲ್ ಆದ Vite, ಆ ವರ್ಕ್ಫ್ಲೋದ ಪ್ರಮುಖ ಭಾಗವಾಗಿದೆ. Vite ಪ್ರಾರಂಭಿಸಲು ಪ್ರಯತ್ನಿಸಿದಾಗ, ಅದು ತಕ್ಷಣವೇ "Illegal instruction" ದೋಷವನ್ನು ಎದುರಿಸಿತು, ಇದರಿಂದ ಯಾವುದೇ JavaScript ಪಾರ್ಸ್ ಆಗುವ ಮೊದಲೇ ಪ್ರಕ್ರಿಯೆಯು ಸ್ಥಗಿತಗೊಂಡಿತು. ಈ ದೋಷವು ನೇಟಿವ್ ಲೈಬ್ರರಿಯನ್ನು (native library) ಲೋಡ್ ಮಾಡುವಾಗ ಸಂಭವಿಸಿದ್ದರಿಂದ, ಯಾವುದೇ ಸ್ಟ್ಯಾಕ್ ಟ್ರೇಸ್ (stack trace) ಅಥವಾ ಲಾಗ್ ಸಿಗಲಿಲ್ಲ, ಇದು ಡೆವಲಪರ್ಗಳನ್ನು ಯಾವುದೇ ಪರಿಹಾರವಿಲ್ಲದೆ ಕಷ್ಟದಲ್ಲಿ ಎಳೆದುಹಾಕಿತು.
ತಾಂತ್ರಿಕ ಅಸಮತೋಲನ
ಇದರ ಮೂಲ ಕಾರಣ Rolldown ನ ನೇಟಿವ್ ಬೈಂಡಿಂಗ್ನಲ್ಲಿ (native binding) ಅಡಗಿದ್ದ ಒಂದು ತಾಂತ್ರಿಕ ಕಲ್ಪನೆಯಾಗಿತ್ತು. ಪ್ರೊಸೆಸರ್ ARMv8.1 ಸೂಚನೆಗಳನ್ನು (instructions) ಬೆಂಬಲಿಸುತ್ತದೆ ಎಂದು ಈ ಕೋಡ್ ನಿರೀಕ್ಷಿಸಿತ್ತು—ಇದು ಹೊಸ ಚಿಪ್ಗಳಲ್ಲಿ ಇರುತ್ತದೆ ಆದರೆ Cortex-A53 ನಂತಹ ವ್ಯಾಪಕವಾಗಿ ಬಳಕೆಯಾಗುವ ಅನೇಕ Android SoC ಗಳಲ್ಲಿ ಇರುವುದಿಲ್ಲ. ಅಂತಹ ಸೂಚನೆಗಳಿಲ್ಲದ ಸಾಧನವು ಲೈಬ್ರರಿಯನ್ನು ಲೋಡ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿದಾಗ, CPU "illegal-instruction exception" ಅನ್ನು ಎತ್ತಿತು.
ವಿಷಯವನ್ನು ಮತ್ತಷ್ಟು ಸಂಕೀರ್ಣಗೊಳಿಸಿದ್ದು ಏನೆಂದರೆ, ಈ ದೋಷವು mimalloc ಎಂಬ ಡಿಪೆಂಡೆನ್ಸಿಯಲ್ಲಿತ್ತು. ಇದು ಮೆಮೊರಿ ಅಲೋಕೇಟರ್ ಆಗಿದ್ದು, ಬೆಂಬಲವಿಲ್ಲದ ಸೂಚನೆಗಳ ಬಳಕೆಯನ್ನು ತಡೆಯಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಸೇಫ್ಟಿ ಫ್ಲಾಗ್ ಅನ್ನು ಒಳಗೊಂಡಿದೆ. ಆದರೆ ಆ ಫ್ಲಾಗ್ ಕೇವಲ "standard Linux" ಪರಿಸರಗಳಲ್ಲಿ ಮಾತ್ರ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿತ್ತು. Android, Linux ಕರ್ನಲ್ ಅನ್ನು ಬಳಸುತ್ತಿದ್ದರೂ, ತನ್ನನ್ನು ತಾನು ವಿಭಿನ್ನವಾಗಿ ಗುರುತಿಸಿಕೊಳ್ಳುತ್ತದೆ, ಆದ್ದರಿಂದ ಆ ಸುರಕ್ಷತಾ ಕ್ರಮವು ಸಕ್ರಿಯಗೊಳ್ಳಲಿಲ್ಲ ಮತ್ತು ಕ್ರ್ಯಾಶ್ ಸಂಭವಿಸಿತು.
ಪರಿಹಾರವನ್ನು ಹೇಗೆ ನಿರ್ಮಿಸಲಾಯಿತು
ವಿಲೀನಗೊಳಿಸಲಾದ ಈ ಬದಲಾವಣೆಯು Android (ಮತ್ತು FreeBSD) ಅನ್ನು ಸಹ ಅಷ್ಟೇ ರಕ್ಷಣೆ ಬೇಕಾದ ಪ್ಲಾಟ್ಫಾರ್ಮ್ಗಳೆಂದು ಗುರುತಿಸಲು mimalloc ನ ಸೇಫ್ಟಿ ಚೆಕ್ ಅನ್ನು ವಿಸ್ತರಿಸುತ್ತದೆ. ಡೆವಲಪರ್ಗಳು ಪ್ಯಾಕೇಜ್ಗಳನ್ನು ಮರುನಿರ್ಮಿಸಲು (rebuild) ಅಥವಾ ಬದಲಾಯಿಸಲು ಒತ್ತಾಯಿಸುವ ಬದಲು, ಲೈಬ್ರರಿಯನ್ನು ಪ್ಯಾಚ್ ಮಾಡುವ ಮೂಲಕ, ಈ ಪರಿಹಾರವು ಬಳಕೆದಾರರಿಗೆ ಯಾವುದೇ ಹೆಚ್ಚಿನ ಹಂತಗಳಿಲ್ಲದೆ ಹೊಂದಾಣಿಕೆಯನ್ನು (compatibility) ಮರುಸ್ಥಾಪಿಸುತ್ತದೆ.
ಡೆವಲಪರ್ಗಳಿಗೆ ಇದರಿಂದ ಸಿಗುವ ಪ್ರಯೋಜನಗಳು
- ಯಾವುದೇ ಕಸ್ಟಮ್ Termux ಪ್ಯಾಕೇಜ್ ಅಗತ್ಯವಿಲ್ಲ. Rolldown ನ ಸ್ಟ್ಯಾಂಡರ್ಡ್
npm installಈಗ ಹೊಸ ಸೇಫ್ಟಿ ಚೆಕ್ ಅನ್ನು ಗೌರವಿಸುವ ಬೈನರಿಯನ್ನು ಪಡೆಯುತ್ತದೆ. - ತಕ್ಷಣದ ಪರೀಕ್ಷೆ ಸಾಧ್ಯ. ಓಪನ್ ಪುಲ್ ರಿಕ್ವೆಸ್ಟ್ನಲ್ಲಿ (pull request) ಲಗತ್ತಿಸಲಾದ ಪ್ರಿವ್ಯೂ ಬಿಲ್ಡ್ ಮೂಲಕ ARM64 Android ಸಾಧನ ಹೊಂದಿರುವ ಯಾರೇ ಆದರೂ ಇಂದು ಈ ಪರಿಹಾರವನ್ನು ಪರಿಶೀಲಿಸಬಹುದು, ಮುಂದಿನ ಅಧಿಕೃತ Rolldown ವರ್ಷನ್ npm ನಲ್ಲಿ ಬಿಡುಗಡೆಯಾಗುವವರೆಗೆ ಇದು ಸಹಕಾರಿ.
ಉಳಿದಿರುವ ಪರಿಗಣನೆಗಳು
ಈ ಪರಿಹಾರವು Rolldown ನಿರ್ವಹಕರು ಅಪ್ಡೇಟ್ ಮಾಡಿದ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಪ್ರಕಟಿಸುವುದರ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ; ಅಲ್ಲಿಯವರೆಗೆ, ಬಳಕೆದಾರರು ಪ್ರಿವ್ಯೂ ಬಿಲ್ಡ್ ಅನ್ನು ಅವಲಂಬಿಸಬೇಕಾಗುತ್ತದೆ.
ಮುಂದೆ ಏನನ್ನು ಗಮನಿಸಬೇಕು
- npm ಬಿಡುಗಡೆಯ ಸಮಯ. Rolldown ಚೇಂಜ್ಲಾಗ್ (changelog) ಅನ್ನು ಗಮನಿಸುತ್ತಿರಿ; ಹೊಸ ವರ್ಷನ್ ರಿಜಿಸ್ಟ್ರಿಗೆ ತಲುಪಿದ ತಕ್ಷಣ, ಸರಳವಾದ
npm install rolldownಮೂಲಕ ಈ ಪರಿಹಾರವನ್ನು ಪ್ರೊಡಕ್ಷನ್ಗೆ ತರಬಹುದು.
ಈ ವಿಲೀನಗೊಂಡ ಪ್ಯಾಚ್ ತಿಂಗಳುಗಟ್ಟಲೆ ಇದ್ದ ಬಿಕ್ಕಟ್ಟನ್ನು ಒಂದು ಸಾಮಾನ್ಯ ಅಪ್ಡೇಟ್ ಆಗಿ ಪರಿವರ್ತಿಸಿದೆ. ಇದು ನೈಜ ಪ್ರಪಂಚದ ಬಳಕೆಯ ಡೇಟಾ ಮತ್ತು ಸಮುದಾಯದ ವರದಿಗಳು ಹೇಗೆ "ಯೋಜನೆ ಇಲ್ಲದ" ಬಗ್ ಅನ್ನು ಪರಿಹಾರವಾದ ಸಮಸ್ಯೆಯಾಗಿ ಬದಲಾಯಿಸಬಲ್ಲವು ಎಂಬುದನ್ನು ತೋರಿಸುತ್ತದೆ. ಫೋನ್ನಲ್ಲಿ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸುವ ಯಾರಿಗಾದರೂ, ಮುಂದಿನ Rolldown ಬಿಡುಗಡೆಯು ಪ್ರೊಸೆಸರ್ ಕ್ರ್ಯಾಶ್ ಆಗದಂತೆ Vite ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ಅನುಮತಿಸುತ್ತದೆ.
