Movimento 0deps: مقامی انحصار اور غیر متبدل معاہدے

سافٹ ویئر ڈویلپرز اکثر سینکڑوں بیرونی لائبریریاں انسٹال کرتے ہیں۔ جدید فریم ورکس ہزاروں ٹرانسٹیو انحصار (transitive dependencies) پر انحصار کرتے ہیں۔ اس کا مطلب ہے کہ آپ کی ایپلی کیشن اجنبیوں کا کوڈ چلا رہی ہے۔

یہ سافٹ ویئر سپلائی چین کا خطرہ پیدا کرتا ہے۔

ہر انحصار آپ کے حملے کی سطح (attack surface) کو بڑھاتا ہے۔ یہ کر سکتا ہے:

  • سیکیورٹی کی خامیاں پیدا کرنا۔
  • سپلائی چین حملوں کا نشانہ بننا۔
  • مینٹینرز کی طرف سے نظر انداز کر دیا جانا۔
  • اپنی پبلک API کو تبدیل کرنا۔
  • بیک ورڈ کمپیٹیبلٹی (backward compatibility) کو توڑنا۔

0deps تحریک ایک سادہ سوال پوچھتی ہے: کیا ہو اگر آپ کی ایپلی کیشن صرف اس کوڈ پر انحصار کرے جس کا کنٹرول آپ کے پاس ہو؟

0deps ماڈل میں، آپ ضروری انحصار (dependencies) کو براہ راست اپنے پروجیکٹ ریپوزٹری میں شامل کر دیتے ہیں۔ آپ بلڈز کے دوران انہیں متحرک طور پر ڈاؤن لوڈ کرنا بند کر دیتے ہیں۔ ایپلی کیشن چلانے کے لیے ضروری ہر چیز شروع سے ہی ریپوزٹری میں موجود رہتی ہے۔

یہ طریقہ کار فراہم کرتا ہے:

  • قابلِ اعادہ بلڈز (reproducible builds)۔
  • بیرونی رجسٹریوں پر کم انحصار۔
  • مرکزی سیکیورٹی آڈٹ۔
  • زیادہ قابلِ پیش گوئی (predictability)۔

بنیادی اصول کوڈ کو ساکن رکھنا نہیں ہے۔ بگ (bug) کو ٹھیک کرنے اور سیکیورٹی کو بہتر بنانے کے لیے امپلیمنٹیشنز اور الگورتھم کا ارتقاء ضروری ہے۔ جو چیز مستحکم رہتی ہے وہ پبلک کنٹریکٹ (public contract) ہے۔

ہر لائبریری ایک احتیاط سے ڈیزائن کردہ انٹرفیس فراہم کرتی ہے۔ مثالوں میں شامل ہیں:

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

یہ فنکشنز ایک معاہدہ (contract) کی تعریف کرتے ہیں۔ یہ معاہدہ کبھی نہیں بدلتا۔ آپ اس کے پیچھے موجود کوڈ کو دوبارہ لکھ سکتے ہیں یا پوری لائبریری کو تبدیل کر سکتے ہیں۔ آپ کی ایپلی کیشن کا باقی حصہ اس تبدیلی کو محسوس نہیں کرے گا۔

جب کوئی کمزوری (vulnerability) سامنے آتی ہے، تو آپ کو عام طور پر دو مسائل کا سامنا کرنا پڑتا ہے:

  1. خامی کو ٹھیک کرنا۔
  2. یہ چیک کرنا کہ آیا اپ ڈیٹ آپ کی ایپ کو خراب تو نہیں کر رہی۔

0deps آرکیٹیکچر میں، دوسرا مسئلہ ختم ہو جاتا ہے۔ آپ اندرونی امپلیمنٹیشن کو اپ ڈیٹ کرتے ہیں جبکہ پبلک API وہی رہتی ہے۔ آپ کی ایپلی کیشن کوڈ کی تبدیلیوں کے بغیر کام کرتی رہتی ہے۔

آپ ایک اندرونی اڈاپٹر (adapter) کا استعمال کرتے ہوئے بیرونی انٹیگریشنز کو الگ کرتے ہیں: Application -> Public Interface -> Adapter -> Implementation

اگر کل کوئی لائبریری غائب ہو جائے، تو آپ کو صرف اڈاپٹر تبدیل کرنا ہوگا۔ آپ کی ایپ کا کوئی دوسرا حصہ خراب نہیں ہوگا۔

0deps سافٹ ویئر کو مکمل نہیں بناتا۔ یہ سپلائی چین کے خطرات کو کم کرتا ہے۔ یہ نقصان دہ پیکیجز (malicious packages)، رجسٹری کے ساتھ چھیڑ چھاڑ، اور ڈیپینڈنسی کنفیوژن (dependency confusion) جیسے مسائل کو روکتا ہے۔

پروجیکٹس دہائیوں تک چلتے ہیں۔ لائبریریاں اور فریم ورکس بدلتے رہتے ہیں۔ 0deps کے ساتھ، آپ کی ایپلی کیشن ایک ہی مستحکم معاہدوں کا استعمال جاری رکھتی ہے، قطع نظر اس کے کہ ایکوسسٹم (ecosystem) کس طرح ارتقاء پذیر ہوتا ہے۔

ماخذ: https://dev.to/fullagenticstack/movimento-0deps-dependencias-locais-contratos-imutaveis-e-seguranca-por-design-4coo