جنبش 0deps: وابستگیهای محلی و قراردادهای تغییرناپذیر
توسعهدهندگان نرمافزار اغلب صدها کتابخانه خارجی را نصب میکنند. فریمورکهای مدرن به هزاران وابستگی انتقالی (transitive dependencies) متکی هستند. این بدان معناست که اپلیکیشن شما کدی را از غریبههایی اجرا میکند که نمیشناسید.
این سرعت با هزینهای همراه است. شما با ریسکهای زنجیره تأمین نرمافزار روبرو هستید.
هر وابستگی سطح حمله (attack surface) شما را افزایش میدهد. وابستگیها میتوانند:
- حفرههای امنیتی ایجاد کنند.
- هدف حملات زنجیره تأمین قرار بگیرند.
- توسط نویسندگان رها شوند.
- API عمومی خود را تغییر دهند.
- سازگاری با نسخههای قبلی (backward compatibility) را از بین ببرند.
جنبش 0deps این وضعیت را تغییر میدهد. این جنبش میپرسد: چه میشود اگر اپلیکیشن شما فقط به کدی متکی باشد که خودتان کنترل میکنید؟
در مدل 0deps، شما تمام کدهای لازم را مستقیماً به مخزن (repository) پروژه خود میآورید. شما در زمان نصب یا ساخت (build time)، پکیجها را دانلود نمیکنید. هر آنچه نیاز دارید، هنگام کلون کردن مخزن در دسترس است.
این کار چندین مزیت دارد:
- بیلدهای بازتولیدپذیر (Reproducible builds).
- عدم اتکا به رجیستریهای پکیج خارجی.
- ممیزیهای امنیتی متمرکز.
- پیشبینیپذیری بالاتر.
- ریسک کمتر در زنجیره تأمین.
هدف این نیست که جلوی تغییر کد گرفته شود. الگوریتمها و اصلاحات امنیتی باید تکامل یابند. آنچه ثابت میماند، قرارداد عمومی (public contract) است.
شما یک رابط (interface) پایدار برای هر کتابخانه طراحی میکنید. برای مثال:
authenticate()createSession()verifyPasskey()
پیادهسازی پشت این توابع میتواند کاملاً تغییر کند. شما میتوانید منطق را بازنویسی کنید یا کتابخانه را جایگزین کنید. بقیه اپلیکیشن شما هرگز متوجه این تفاوت نخواهد شد.
این مسئله بزرگترین دردسر در طول بهروزرسانیها را حل میکند. معمولاً نگران این هستید که با رفع یک باگ، همزمان اپلیکیشن خود را خراب نکنید. با 0deps، API عمومی بدون تغییر باقی میماند. اپلیکیشن شما بدون نیاز به تغییر کد، به کار خود ادامه میدهد.
شما ابزارهای خارجی را پشت آداپتورهای (adapters) داخلی ایزوله میکنید. اگر کتابخانهای فردا از رده خارج شود، شما فقط آداپتور را بهروزرسانی میکنید. بقیه سیستم شما ایمن باقی میماند.
0deps با متنباز (open source) مخالف نیست؛ بلکه میخواهد از آن ایمنتر استفاده کند. به جای نصبهای پویا (dynamic installs)، با کتابخانهها مانند اجزای یکپارچه برخورد میکنید. آنها را ممیزی میکنید، نسخهبندی میکنید و کپسولهسازی (encapsulate) میکنید.
نرمافزارها دههها عمر میکنند، اما کتابخانهها و فریمورکها از بین میروند. 0deps تضمین میکند که اپلیکیشن شما در میان تمام این تغییرات، به کار خود ادامه دهد.
Optional learning community: https://t.me/GyaanSetuAi
