0deps تحریک: مقامی Dependencies اور سیکیورٹی
سافٹ ویئر ڈویلپرز تقریباً ہر پروجیکٹ میں سینکڑوں بیرونی لائبریریاں انسٹال کرتے ہیں۔ جدید فریم ورکس اکثر ہزاروں چھپی ہوئی dependencies پر انحصار کرتے ہیں۔ یہ سافٹ ویئر سپلائی چین کے لیے ایک بڑا خطرہ پیدا کرتا ہے۔
0deps تحریک ایک سادہ سوال پوچھتی ہے: کیا ہو اگر آپ کی ایپلی کیشن صرف وہی کوڈ چلائے جس پر آپ کا کنٹرول ہو؟
ہر dependency آپ کے حملے کے خطرے (attack surface) کو بڑھاتی ہے۔ Dependencies یہ کام کر سکتی ہیں:
- سیکیورٹی کی خامیاں پیدا کرنا۔
- حملوں کا نشانہ بننا۔
- اپ ڈیٹس موصول ہونا بند ہو جانا۔
- اپنا کوڈ تبدیل کرنا اور آپ کی ایپ کو خراب کرنا۔
- نئی چھپی ہوئی dependencies شامل کرنا۔
0deps ماڈل میں، آپ ہر dependency کو براہ راست اپنے پروجیکٹ ریپوزٹری (repository) میں رکھتے ہیں۔ آپ انہیں بلڈ (build) کے دوران ڈاؤن لوڈ نہیں کرتے۔ شروع سے ہی سب کچھ آپ کی ریپوزٹری کے اندر رہتا ہے۔
یہ طریقہ کار درج ذیل سہولیات فراہم کرتا ہے:
- قابلِ اعادہ بلڈز (Reproducible builds)۔
- بیرونی رجسٹرئیوں پر کم انحصار۔
- آسان سیکیورٹی آڈٹ۔
- زیادہ قابلِ پیش گوئی کوڈ۔
بنیادی خیال کوڈ کو تبدیل ہونے سے روکنا نہیں ہے۔ الگورتھم اور سیکیورٹی پیچز (patches) کو تبدیل ہونا چاہیے۔ جو چیز برقرار رہتی ہے وہ 'پبلک کانٹریکٹ' (public contract) ہے۔
ایک لائبریری فنکشنز کا ایک مخصوص سیٹ دکھاتی ہے۔ یہ فنکشنز ایک کانٹریکٹ بناتے ہیں۔
authenticate()createSession()verifyPasskey()
لائبریری کے اندر کی امپلیمنٹیشن (implementation) مکمل طور پر تبدیل ہو سکتی ہے۔ آپ الگورتھم یا ڈیٹا اسٹرکچرز کو بدل سکتے ہیں۔ آپ کی ایپلی کیشن کا باقی حصہ اس سے متاثر نہیں ہوتا کیونکہ انٹرفیس وہی رہتا ہے۔
جب کوئی سیکیورٹی خامی سامنے آتی ہے، تو آپ کو دو مسائل کا سامنا کرنا پڑتا ہے:
- خامی کو ٹھیک کرنا۔
- اس بات کو یقینی بنانا کہ اپ ڈیٹ آپ کی ایپ کو خراب نہ کرے۔
0deps آرکیٹیکچر دوسرے مسئلے کو حل کرتا ہے۔ آپ انٹرفیس کے پیچھے موجود کوڈ کو اپ ڈیٹ کرتے ہیں۔ پبلک API وہی رہتی ہے۔ آپ کی ایپلی کیشن بغیر کسی تبدیلی کے کام کرتی رہتی ہے۔
آپ بیرونی ٹولز کو ایک اندرونی ایڈاپٹر (adapter) کے پیچھے الگ کر دیتے ہیں: Application ↓ Public Interface ↓ Adapter ↓ Implementation
اگر کوئی لائبریری ختم ہو جائے، تو آپ صرف ایڈاپٹر کو تبدیل کرتے ہیں۔ آپ کی ایپ کا باقی حصہ محفوظ رہتا ہے۔ لائبریری کے ورژنز ایک بڑے سردرد کے بجائے محض ایک معمولی تفصیل بن جاتے ہیں۔
مقصد سافٹ ویئر کو مکمل بنانا نہیں ہے۔ مقصد سپلائی چین کے خطرے کو کم کرنا ہے۔ ڈائنامک انسٹالیشنز کو ختم کر کے، آپ درج ذیل چیزوں کو روکتے ہیں:
- نقصان دہ (malicious) پیکیج ریلیز۔
- سمجھوتہ شدہ (compromised) رجسٹریاں۔
- Dependency confusion حملے۔
کوڈ کی ہر لائن آپ کے پروجیکٹ کا حصہ بن جاتی ہے۔ یہ مکمل کنٹرول اور ریویو کی اجازت دیتا ہے۔
پروجیکٹس سالوں تک چلتے ہیں۔ لائبریریاں اور فریم ورکس غائب ہو جاتے ہیں۔ 0deps کے ساتھ، آپ کی ایپلی کیشن ایکوسسٹم (ecosystem) کے بدلنے کے باوجود وہی کانٹریکٹس استعمال کرتی رہتی ہے۔
