0deps ਮੂਵਮੈਂਟ: ਸਥਾਨਕ ਨਿਰਭਰਤਾਵਾਂ (Local Dependencies) ਅਤੇ ਅਟੱਲ ਇਕਰਾਰਨਾਮੇ (Immutable Contracts)

ਸਾਫਟਵੇਅਰ ਡਿਵੈਲਪਰ ਅਕਸਰ ਹਰ ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ ਸੈਂਕੜੇ ਬਾਹਰੀ ਲਾਇਬ੍ਰੇਰੀਆਂ ਇੰਸਟਾਲ ਕਰਦੇ ਹਨ। ਆਧੁਨਿਕ ਫਰੇਮਵਰਕ ਹਜ਼ਾਰਾਂ ਟ੍ਰਾਂਜ਼ੀਟਿਵ ਨਿਰਭਰਤਾਵਾਂ (transitive dependencies) 'ਤੇ ਨਿਰਭਰ ਕਰਦੇ ਹਨ। ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਸੈਂਕੜੇ ਅਣਜਾਣ ਯੋਗਦਾਨ ਪਾਉਣ ਵਾਲਿਆਂ ਦਾ ਕੋਡ ਚਲਾਉਂਦੀ ਹੈ।

ਇਹ ਰਫ਼ਤਾਰ ਤੁਹਾਡੀ ਸਾਫਟਵੇਅਰ ਸਪਲਾਈ ਚੇਨ ਲਈ ਇੱਕ ਵੱਡਾ ਖ਼ਤਰਾ ਪੈਦਾ ਕਰਦੀ ਹੈ।

0deps ਮੂਵਮੈਂਟ ਇੱਕ ਸਧਾਰਨ ਸਵਾਲ ਪੁੱਛਦੀ ਹੈ: ਕੀ ਹੋਵੇਗਾ ਜੇਕਰ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਸਿਰਫ਼ ਉਹ ਕੋਡ ਚਲਾਵੇ ਜਿਸ 'ਤੇ ਤੁਹਾਡਾ ਅਸਲ ਵਿੱਚ ਕੰਟਰੋਲ ਹੈ?

ਹਰ ਨਿਰਭਰਤਾ (dependency) ਤੁਹਾਡੇ 'ਅਟੈਕ ਸਰਫੇਸ' (attack surface) ਨੂੰ ਵਧਾਉਂਦੀ ਹੈ। ਇਹ ਸੁਰੱਖਿਆ ਕਮੀਆਂ ਪੈਦਾ ਕਰ ਸਕਦੀ ਹੈ, ਵਰਤੋਂ ਵਿੱਚੋਂ ਬਾਹਰ ਹੋ ਸਕਦੀ ਹੈ, ਜਾਂ ਨਵੇਂ ਅਪਡੇਟ ਨਾਲ ਤੁਹਾਡੇ ਕੋਡ ਨੂੰ ਖਰਾਬ ਕਰ ਸਕਦੀ ਹੈ। ਤੁਸੀਂ ਆਪਣੇ ਪ੍ਰੋਡਕਸ਼ਨ ਵਾਤਾਵਰਣ ਵਿੱਚ ਚੱਲ ਰਹੇ ਕੋਡ 'ਤੇ ਕੰਟਰੋਲ ਗੁਆ ਲੈਂਦੇ ਹੋ।

0deps ਮਾਡਲ ਵਿੱਚ, ਤੁਸੀਂ ਸਾਰੀਆਂ ਨਿਰਭਰਤਾਵਾਂ ਨੂੰ ਸਿੱਧੇ ਆਪਣੇ ਪ੍ਰੋਜੈਕਟ ਰਿਪੋਜ਼ਟਰੀ ਵਿੱਚ ਲਿਆਉਂਦੇ ਹੋ। ਤੁਸੀਂ ਇੰਸਟਾਲੇਸ਼ਨ ਦੌਰਾਨ ਉਹਨਾਂ ਨੂੰ ਡਾਇਨਾਮਿਕ ਤੌਰ 'ਤੇ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕਰਦੇ। ਤੁਹਾਡੀ ਐਪ ਨੂੰ ਬਣਾਉਣ ਅਤੇ ਚਲਾਉਣ ਲਈ ਲੋੜੀਂਦੀ ਹਰ ਚੀਜ਼ ਪਹਿਲਾਂ ਹੀ ਉੱਥੇ ਹੁੰਦੀ ਹੈ।

ਇਹ ਪਹੁੰਚ ਕਈ ਲਾਭ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ:

  • ਦੁਹਰਾਉਣਯੋਗ ਬਿਲਡਸ (Reproducible builds)
  • ਬਾਹਰੀ ਪੈਕੇਜ ਰਜਿਸਟਰੀਆਂ 'ਤੇ ਘੱਟ ਨਿਰਭਰਤਾ
  • ਕੇਂਦਰੀਕ੍ਰਿਤ ਸੁਰੱਖਿਆ ਆਡਿਟ
  • ਬਿਹਤਰ ਭਵਿੱਖਬਾਣੀਯੋਗਤਾ (Predictability)
  • ਘੱਟ ਸਪਲਾਈ ਚੇਨ ਜੋਖਮ

ਮੁੱਖ ਸਿਧਾਂਤ ਕੋਡ ਨੂੰ ਬਦਲਣ ਤੋਂ ਰੋਕਣਾ ਨਹੀਂ ਹੈ। ਐਲਗੋਰਿਦਮ ਅਤੇ ਸੁਰੱਖਿਆ ਫਿਕਸਾਂ ਨੂੰ ਵਿਕਸਿਤ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਜੋ ਚੀਜ਼ ਸਥਿਰ ਰਹਿੰਦੀ ਹੈ, ਉਹ ਹੈ ਪਬਲਿਕ ਕੰਟਰੈਕਟ (public contract)।

ਹਰੇਕ ਲਾਇਬ੍ਰੇਰੀ ਇੱਕ ਸਾਵਧਾਨੀ ਨਾਲ ਡਿਜ਼ਾਈਨ ਕੀਤਾ ਗਿਆ ਇੰਟਰਫੇਸ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ।

  • authenticate()
  • createSession()
  • verifyPasskey()

ਇਹ ਫੰਕਸ਼ਨ ਇੱਕ ਇਕਰਾਰਨਾਮਾ (contract) ਪਰਿਭਾਸ਼ਿਤ ਕਰਦੇ ਹਨ। ਉਹ ਇਕਰਾਰਨਾਮਾ ਕਦੇ ਨਹੀਂ ਬਦਲਦਾ। ਤੁਸੀਂ ਅੰਡਰਲਾਈਂਗ ਕੋਡ ਨੂੰ ਦੁਬਾਰਾ ਲਿਖ ਸਕਦੇ ਹੋ ਜਾਂ ਪੂਰੀ ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ ਬਦਲ ਸਕਦੇ ਹੋ। ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਦਾ ਬਾਕੀ ਹਿੱਸਾ ਉਵੇਂ ਹੀ ਰਹਿੰਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਸਿਰਫ਼ ਉਸ ਇਕਰਾਰਨਾਮੇ ਨਾਲ ਗੱਲ ਕਰਦਾ ਹੈ।

ਜਦੋਂ ਕੋਈ ਕਮਜ਼ੋਰੀ (vulnerability) ਸਾਹਮਣੇ ਆਉਂਦੀ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਇਸਨੂੰ ਅੰਦਰੂਨੀ ਤੌਰ 'ਤੇ ਠੀਕ ਕਰਦੇ ਹੋ। ਤੁਸੀਂ ਇੰਟਰਫੇਸ ਦੇ ਪਿੱਛੇ ਲਾਗੂ ਕੀਤੇ ਗਏ ਕੋਡ (implementation) ਨੂੰ ਅਪਡੇਟ ਕਰਦੇ ਹੋ। ਪਬਲਿਕ API ਬਿਲਕੁਲ ਉਹੀ ਰਹਿੰਦੀ ਹੈ। ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਕੋਡ ਵਿੱਚ ਬਦਲਾਅ ਕੀਤੇ ਬਿਨਾਂ ਕੰਮ ਕਰਦੀ ਰਹਿੰਦੀ ਹੈ।

ਇਹ ਢਾਂਚਾ ਬਾਹਰੀ ਕੋਡ ਨੂੰ ਅਲੱਗ ਕਰਨ ਲਈ ਇੱਕ ਅੰਦਰੂਨੀ ਐਡਾਪਟਰ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ: Application (ਐਪਲੀਕੇਸ਼ਨ) ↓ Public Interface (ਪਬਲਿਕ ਇੰਟਰਫੇਸ) ↓ Adapter (ਐਡਾਪਟਰ) ↓ Implementation (ਇੰਪਲੀਮੈਂਟੇਸ਼ਨ)

ਜੇਕਰ ਕੋਈ ਬਾਹਰੀ ਲਾਇਬ੍ਰੇਰੀ ਗਾਇਬ ਹੋ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਸਿਰਫ਼ ਐਡਾਪਟਰ ਨੂੰ ਅਪਡੇਟ ਕਰਦੇ ਹੋ। ਤੁਹਾਡੀ ਐਪ ਦਾ ਕੋਈ ਹੋਰ ਹਿੱਸਾ ਖਰਾਬ ਨਹੀਂ ਹੁੰਦਾ।

0deps ਮੂਵਮੈਂਟ ਓਪਨ ਸੋਰਸ (open source) ਦਾ ਵਿਰੋਧ ਨਹੀਂ ਕਰਦੀ। ਇਹ ਇਸਦੀ ਵਰਤੋਂ ਕਰਨ ਦੇ ਤਰੀਕੇ ਨੂੰ ਬਦਲਦੀ ਹੈ। ਲਾਇਬ੍ਰੇਰੀਆਂ ਅਜਿਹੇ ਅੰਗਤ ਹਿੱਸੇ (integrated components) ਬਣ ਜਾਂਦੀਆਂ ਹਨ ਜਿਨ੍ਹਾਂ ਦਾ ਆਡਿਟ ਅਤੇ ਵਰਜ਼ਨ ਤੁਸੀਂ ਖੁਦ ਕਰਦੇ ਹੋ।

ਇਹ ਅਜਿਹਾ ਸਾਫਟਵੇਅਰ ਬਣਾਉਂਦਾ ਹੈ ਜੋ ਦਹਾਕਿਆਂ ਤੱਕ ਚੱਲਦਾ ਹੈ। ਇੰਪਲੀਮੈਂਟੇਸ਼ਨ ਬਦਲਦੀ ਰਹਿੰਦੀ ਹੈ, ਪਰ ਤੁਹਾਡੇ ਇਕਰਾਰਨਾਮੇ (contracts) ਸਥਿਰ ਰਹਿੰਦੇ ਹਨ। ਇਹ ਸਥਿਰਤਾ ਤੁਹਾਡੇ ਸਾਫਟਵੇਅਰ ਨੂੰ ਭਵਿੱਖਬਾਣੀਯੋਗ ਅਤੇ ਲਚਕਦਾਰ (resilient) ਬਣਾਉਂਦੀ ਹੈ।

ਸਰੋਤ: https://dev.to/fullagenticstack/mouvement-0deps-dependances-locales-contrats-immuables-et-securite-par-conception-24c2