Moviento 0deps: مقامی انحصار (Dependencies) اور سیکیورٹی
سافٹ ویئر ڈویلپرز زیادہ تر پروجیکٹس میں سینکڑوں بیرونی لائبریریاں انسٹال کرتے ہیں۔ جدید فریم ورکس ہزاروں ٹرانسٹیو (transitive) انحصار پر انحصار کرتے ہیں۔ اس کا مطلب ہے کہ آپ کی ایپلی کیشن سینکڑوں نامعلوم لوگوں کے لکھے ہوئے کوڈ کو چلا رہی ہے۔
یہ ماحولیاتی نظام (ecosystem) ڈویلپمنٹ کی رفتار کو تیز کرتا ہے۔ لیکن یہ سپلائی چین کے بڑے خطرات بھی پیدا کرتا ہے۔
0deps موومنٹ ایک سادہ سا سوال پوچھتی ہے: کیا ہو اگر آپ کی ایپلی کیشن صرف وہی کوڈ چلائے جس پر آپ کا اصل کنٹرول ہو؟
ہر انحصار (dependency) حملے کی ایک نئی سطح (attack surface) پیدا کرتا ہے۔ ایک انحصار یہ کر سکتا ہے:
- سیکیورٹی کی خامیاں پیدا کرنا۔
- سپلائی چین حملوں کا نشانہ بننا۔
- اپنے تخلیق کار کی طرف سے متروک چھوڑ دیا جانا۔
- اپنی پبلک API کو تبدیل کرنا۔
- بیک ورڈ کمپیٹیبلٹی (backward compatibility) کو خراب کرنا۔
0deps ماڈل میں، آپ تمام ضروری انحصار کو براہ راست اپنے پروجیکٹ ریپوزٹری (repository) میں منتقل کر دیتے ہیں۔ آپ بلڈ ٹائم (build time) کے دوران ڈائنامک طریقے سے پیکجز ڈاؤن لوڈ کرنا بند کر دیتے ہیں۔ ایپ چلانے کے لیے ضروری ہر چیز کلون (clone) کرنے کے لمحے سے ہی ریپوزٹری میں موجود رہتی ہے۔
یہ طریقہ کار درج ذیل فوائد فراہم کرتا ہے:
- قابلِ اعادہ بلڈز (Reproducible builds)۔
- بیرونی پیکج رجسٹریوں پر کم انحصار۔
- مرکزی سیکیورٹی آڈٹ۔
- قابلِ پیش گوئی نتائج۔
مقصد کوڈ کو جامد (static) بنانا نہیں ہے۔ بگ (bug) ٹھیک کرنے اور محفوظ رہنے کے لیے امپلیمنٹیشنز (implementations) اور الگورتھم کا ارتقاء ضروری ہے۔ مقصد پبلک کنٹریکٹ (public contract) کو مستحکم رکھنا ہے۔
ہر لائبریری ایک مخصوص انٹرفیس (interface) فراہم کرتی ہے۔ مثال کے طور پر:
authenticate()createSession()verifyPasskey()
یہ فنکشنز ایک کنٹریکٹ بناتے ہیں۔ اگر آپ بنیادی کوڈ کو دوبارہ لکھ بھی دیں، تب بھی کنٹریکٹ وہی رہتا ہے۔ آپ اپنی ایپلی کیشن کے باقی حصوں کو خراب کیے بغیر لائبریریاں تبدیل کر سکتے ہیں یا پروٹوکولز بدل سکتے ہیں۔
جب کوئی کمزوری (vulnerability) سامنے آتی ہے، تو آپ کو عام طور پر دو مسائل کا سامنا کرنا پڑتا ہے:
- بگ (bug) کو ٹھیک کرنا۔
- یہ چیک کرنا کہ آیا اپ ڈیٹ آپ کی ایپ کو خراب تو نہیں کر رہی۔
0deps آرکیٹیکچر میں، دوسرا مسئلہ ختم ہو جاتا ہے۔ آپ انٹرفیس کے پیچھے موجود امپلیمنٹیشن کو اپ ڈیٹ کرتے ہیں۔ پبلک API بالکل ویسی ہی رہتی ہے۔ آپ کی ایپلی کیشن کوڈ میں تبدیلی کے بغیر کام کرتی رہتی ہے۔
بیرونی کوڈ کو اندرونی ایڈاپٹرز (adapters) کے پیچھے الگ تھلگ کر کے، آپ طویل مدتی خطرے کو کم کرتے ہیں۔ اگر کل کوئی لائبریری غائب ہو جائے، تو آپ کو صرف ایڈاپٹر کو اپ ڈیٹ کرنا ہوگا۔
0deps اوپن سورس (open source) کے خلاف نہیں ہے۔ یہ اس کے استعمال کا طریقہ بدل دیتا ہے۔ لائبریریاں ڈائنامک بیرونی لنکس کے بجائے مربوط اجزاء (integrated components) بن جاتی ہیں۔
اس سے ایسا سافٹ ویئر تیار ہوتا ہے جو قابلِ پیش گوئی، لچکدار اور برقرار رکھنے میں آسان ہو۔ امپلیمنٹیشنز ارتقاء پذیر ہوتی ہیں، جبکہ کنٹریکٹ برقرار رہتا ہے۔
