Rolldown team ਨੇ ਇੱਕ ਅਜਿਹਾ ਫਿਕਸ ਮਰਜ (merge) ਕੀਤਾ ਹੈ ਜੋ Termux ਦੇ ਅਧੀਨ ਚੱਲ ਰਹੇ Android ARM64 ਡਿਵਾਈਸਾਂ 'ਤੇ Vite ਨੂੰ “Illegal instruction” ਐਰਰ ਨਾਲ ਕ੍ਰੈਸ਼ ਹੋਣ ਤੋਂ ਰੋਕਦਾ ਹੈ। ਦਸ ਮਹੀਨਿਆਂ ਤੱਕ ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਆਪਣੇ ਬਿਲਡਸ ਨੂੰ ਕੋਡ ਚੱਲਣ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਫਟਦੇ ਦੇਖਣ ਤੋਂ ਬਾਅਦ, ਇਹ ਸਮੱਸਿਆ ਅੰਤ ਵਿੱਚ ਹੱਲ ਹੋ ਗਈ ਹੈ, ਅਤੇ npm 'ਤੇ ਅਗਲਾ Rolldown ਰਿਲੀਜ਼ ਬਿਨਾਂ ਕਿਸੇ ਵਾਧੂ ਤਿਆਰੀ ਦੇ ਕੰਮ ਕਰੇਗਾ।

ਇਹ ਕ੍ਰੈਸ਼ ਕਿਉਂ ਮਹੱਤਵਪੂਰਨ ਸੀ

Termux ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ Android ਫ਼ੋਨਾਂ 'ਤੇ Linux-ਸਟਾਈਲ ਵਾਤਾਵਰਣ ਚਲਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ, ਅਤੇ ਇੱਕ ਵਧ ਰਹੀ ਭਾਈਚਾਰਾ ਇਸ ਨੂੰ ਆਪਣੇ ਇਕਲੌਤੇ ਡਿਵੈਲਪਮੈਂਟ ਵਰਕਸਟੇਸ਼ਨ ਵਜੋਂ ਵਰਤ ਰਿਹਾ ਹੈ। ਬੰਗਲਾਦੇਸ਼, ਨਾਈਜੀਰੀਆ ਅਤੇ ਇੰਡੋਨੇਸ਼ੀਆ ਵਿੱਚ, ਬਹੁਤ ਸਾਰੇ ਪ੍ਰੋਗਰਾਮਰ ਵੈੱਬ ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਿਖਣ ਅਤੇ ਬੰਡਲ ਕਰਨ ਲਈ ਲੈਪਟਾਪ ਦੀ ਬਜਾਏ ਫ਼ੋਨ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ। Vite, ਇੱਕ ਤੇਜ਼ ਬਿਲਡ ਟੂਲ ਜੋ ਅਣਗਿਣਤ ਆਧੁਨਿਕ ਸਾਈਟਾਂ ਨੂੰ ਚਲਾਉਂਦਾ ਹੈ, ਉਸ ਵਰਕਫਲੋ ਦਾ ਇੱਕ ਮੁੱਖ ਹਿੱਸਾ ਹੈ। ਜਦੋਂ Vite ਸ਼ੁਰੂ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਸੀ, ਤਾਂ ਇਹ ਤੁਰੰਤ “Illegal instruction” ਫਾਲਟ ਦਾ ਸਾਹਮਣਾ ਕਰਦਾ ਸੀ, ਜਿਸ ਨਾਲ ਕੋਈ ਵੀ JavaScript ਪਾਰਸ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਪ੍ਰੋਸੈਸ ਖਤਮ ਹੋ ਜਾਂਦਾ ਸੀ। ਇਸ ਐਰਰ ਨੇ ਕੋਈ stack trace ਜਾਂ log ਨਹੀਂ ਦਿੱਤਾ ਕਿਉਂਕਿ ਇਹ ਇੱਕ native library ਲੋਡ ਕਰਦੇ ਸਮੇਂ ਹੋਇਆ ਸੀ, ਜਿਸ ਨਾਲ ਡਿਵੈਲਪਰਾਂ ਕੋਲ ਕੋਈ ਰਸਤਾ ਨਹੀਂ ਬਚਿਆ ਸੀ।

ਤਕਨੀਕੀ ਅਸੰਗਤਤਾ

ਇਸ ਦਾ ਮੂਲ ਕਾਰਨ Rolldown ਦੇ native binding ਵਿੱਚ ਮੌਜੂਦ ਇੱਕ ਲੋ-ਲੈਵਲ ਅਸੰਗਤਤਾ ਸੀ। ਕੋਡ ਇਹ ਉਮੀਦ ਕਰਦਾ ਸੀ ਕਿ ਪ੍ਰੋਸੈਸਰ ARMv8.1 instructions ਦਾ ਸਮਰਥਨ ਕਰੇਗਾ—ਇੱਕ ਅਜਿਹਾ ਸੈੱਟ ਜੋ ਨਵੇਂ ਚਿਪਸ ਵਿੱਚ ਮੌਜੂਦ ਹੈ ਪਰ Cortex-A53 ਵਰਗੇ ਕਈ ਵਿਆਪਕ ਤੌਰ 'ਤੇ ਵਰਤੇ ਜਾਣ ਵਾਲੇ Android SoCs ਵਿੱਚ ਨਹੀਂ ਹੈ। ਜਦੋਂ ਉਹਨਾਂ instructions ਦੀ ਘਾਟ ਵਾਲਾ ਡਿਵਾਈਸ ਲਾਇਬ੍ਰੇਰੀ ਲੋਡ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਸੀ, ਤਾਂ CPU ਇੱਕ illegal-instruction exception ਰਾਹੀਂ ਰੁਕ ਜਾਂਦਾ ਸੀ।

ਮਾਮਲੇ ਨੂੰ ਹੋਰ ਗੁੰਝਲਦਾਰ ਬਣਾਉਂਦੇ ਹੋਏ, ਇਹ ਖ਼ਰਾਬ ਕੋਡ mimalloc ਨਾਮਕ ਇੱਕ ਡਿਪੈਂਡੈਂਸੀ ਵਿੱਚ ਸੀ, ਜੋ ਕਿ ਇੱਕ memory allocator ਹੈ ਅਤੇ ਇਸ ਵਿੱਚ ਇੱਕ ਸੁਰੱਖਿਆ ਫਲੈਗ ਸ਼ਾਮਲ ਹੈ ਜੋ ਅਸਮਰਥ instructions ਦੀ ਵਰਤੋਂ ਨੂੰ ਰੋਕਣ ਲਈ ਬਣਾਇਆ ਗਿਆ ਹੈ। ਉਹ ਫਲੈਗ ਸਿਰਫ਼ “standard Linux” ਵਾਤਾਵਰਣਾਂ 'ਤੇ ਹੀ ਕੰਮ ਕਰਦਾ ਸੀ। Android, ਭਾਵੇਂ Linux kernel ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ, ਪਰ ਇਹ ਆਪਣੇ ਆਪ ਨੂੰ ਵੱਖਰੇ ਤਰੀਕੇ ਨਾਲ ਪਛਾਣਦਾ ਹੈ, ਇਸ ਲਈ ਉਹ ਸੁਰੱਖਿਆ ਕਦੇ ਵੀ ਸਰਗਰਮ ਨਹੀਂ ਹੋਈ ਅਤੇ ਕ੍ਰੈਸ਼ ਹੋ ਗਿਆ।

ਫਿਕਸ ਕਿਵੇਂ ਬਣਾਇਆ ਗਿਆ

ਮਰਜ ਕੀਤਾ ਗਿਆ ਬਦਲਾਅ mimalloc ਦੇ ਸੁਰੱਖਿਆ ਚੈੱਕ ਨੂੰ Android (ਅਤੇ FreeBSD) ਨੂੰ ਅਜਿਹੇ ਪਲੇਟਫਾਰਮਾਂ ਵਜੋਂ ਪਛਾਣਨ ਲਈ ਵਧਾਉਂਦਾ ਹੈ ਜਿਨ੍ਹਾਂ ਨੂੰ ਉਸੇ ਤਰ੍ਹਾਂ ਦੀ ਸੁਰੱਖਿਆ ਦੀ ਲੋੜ ਹੈ। ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਪੈਕੇਜਾਂ ਨੂੰ ਦੁਬਾਰਾ ਬਣਾਉਣ ਜਾਂ ਬਦਲਣ ਲਈ ਮਜਬੂਰ ਕਰਨ ਦੀ ਬਜਾਏ ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ ਪੈਚ (patch) ਕਰਕੇ, ਇਹ ਫਿਕਸ ਅੰਤਮ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਬਿਨਾਂ ਕਿਸੇ ਵਾਧੂ ਕਦਮ ਦੇ ਅਨੁਕੂਲਤਾ (compatibility) ਨੂੰ ਬਹਾਲ ਕਰਦਾ ਹੈ।

ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਇਸ ਤੋਂ ਕੀ ਮਿਲੇਗਾ

  • ਕੋਈ ਕਸਟਮ Termux ਪੈਕੇਜ ਦੀ ਲੋੜ ਨਹੀਂ। Rolldown ਦਾ ਸਟੈਂਡਰਡ npm install ਹੁਣ ਇੱਕ ਅਜਿਹਾ binary ਡਾਊਨਲੋਡ ਕਰੇਗਾ ਜੋ ਨਵੇਂ ਸੁਰੱਖਿਆ ਚੈੱਕ ਦਾ ਪਾਲਣ ਕਰਦਾ ਹੈ।
  • ਤੁਰੰਤ ਟੈਸਟਿੰਗ ਸੰਭਵ ਹੈ। ਖੁੱਲ੍ਹੇ ਹੋਏ pull request ਨਾਲ ਜੁੜਿਆ ਇੱਕ preview build ਕਿਸੇ ਵੀ ARM64 Android ਡਿਵਾਈਸ ਵਾਲੇ ਵਿਅਕਤੀ ਨੂੰ ਅੱਜ ਹੀ ਇਸ ਫਿਕਸ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ, ਜਦੋਂ ਕਿ ਅਗਲਾ ਅਧਿਕਾਰਤ Rolldown ਵਰਜ਼ਨ npm 'ਤੇ ਰਿਲੀਜ਼ ਹੋਵੇਗਾ।

ਬਾਕੀ ਰਹਿੰਦੀਆਂ ਗੱਲਾਂ

ਇਹ ਹੱਲ Rolldown maintainers ਦੁਆਰਾ ਅਪਡੇਟ ਕੀਤੇ ਗਏ ਪੈਕੇਜ ਨੂੰ ਪ੍ਰਕਾਸ਼ਿਤ ਕਰਨ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ; ਜਦੋਂ ਤੱਕ ਅਜਿਹਾ ਨਹੀਂ ਹੁੰਦਾ, ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ preview build 'ਤੇ ਭਰੋਸਾ ਕਰਨਾ ਪਵੇਗਾ।

ਅੱਗੇ ਕੀ ਦੇਖਣਾ ਹੈ

  • npm release timing। Rolldown changelog 'ਤੇ ਨਜ਼ਰ ਰੱਖੋ; ਜਿਸ ਪਲ ਨਵਾਂ ਵਰਜ਼ਨ ਰਜਿਸਟਰੀ ਵਿੱਚ ਆਵੇਗਾ, ਇੱਕ ਸਧਾਰਨ npm install rolldown ਇਸ ਫਿਕਸ ਨੂੰ production ਵਿੱਚ ਲੈ ਆਵੇਗਾ।

ਮਰਜ ਕੀਤਾ ਗਿਆ ਪੈਚ ਮਹੀਨਿਆਂ ਦੇ deadlocks ਨੂੰ ਇੱਕ ਰੁਟੀਨ ਅਪਡੇਟ ਵਿੱਚ ਬਦਲ ਦਿੰਦਾ ਹੈ, ਜੋ ਇਹ ਦਿਖਾਉਂਦਾ ਹੈ ਕਿ ਕਿਵੇਂ ਅਸਲ ਦੁਨੀਆ ਦੇ ਵਰਤੋਂ ਦੇ ਡੇਟਾ ਅਤੇ ਲਗਾਤਾਰ ਭਾਈਚਾਰੇ ਦੀਆਂ ਰਿਪੋਰਟਾਂ ਇੱਕ “not planned” ਬੱਗ ਨੂੰ ਹੱਲ ਕੀਤੀ ਗਈ ਸਮੱਸਿਆ ਵਿੱਚ ਬਦਲ ਸਕਦੀਆਂ ਹਨ। ਫ਼ੋਨ 'ਤੇ ਵੈੱਬ ਐਪ ਬਣਾਉਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਵਿਅਕਤੀ ਲਈ, ਅਗਲਾ Rolldown ਰਿਲੀਜ਼ ਅੰਤ ਵਿੱਚ Vite ਨੂੰ ਪ੍ਰੋਸੈਸਰ ਨੂੰ ਖਰਾਬ ਕੀਤੇ ਬਿਨਾਂ ਸ਼ੁਰੂ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦੇਵੇਗਾ।