0deps মুভমেন্ট: লোকাল ডিপেন্ডেন্সি এবং ইমিউটেবল কন্ট্রাক্ট

সফটওয়্যার ডেভেলপাররা প্রায়শই প্রতিটি প্রজেক্টে শত শত এক্সটার্নাল লাইব্রেরি ইনস্টল করেন। আধুনিক ফ্রেমওয়ার্কগুলো হাজার হাজার ট্রানজিটিভ ডিপেন্ডেন্সির (transitive dependencies) ওপর নির্ভর করে। এর মানে হলো আপনার অ্যাপ্লিকেশন শত শত অজানা কন্ট্রিবিউটরদের কোড রান করছে।

এই সেটআপ ডেভেলপমেন্টের গতি বাড়ায়। তবে এটি আপনার সফটওয়্যার সাপ্লাই চেইনে বিশাল নিরাপত্তা ঝুঁকিও তৈরি করে।

0deps মুভমেন্ট একটি সহজ প্রশ্ন জিজ্ঞাসা করে: আপনার অ্যাপ্লিকেশন যদি কেবল সেই কোডগুলোই রান করত যা আপনি আসলে নিয়ন্ত্রণ করেন, তবে কেমন হতো?

প্রতিটি ডিপেন্ডেন্সি আপনার অ্যাটাক সারফেস (attack surface) বাড়িয়ে দেয়। ডিপেন্ডেন্সিগুলো যা করতে পারে:

  • নিরাপত্তা ত্রুটি তৈরি করতে পারে।
  • সাপ্লাই চেইন অ্যাটাকের সম্মুখীন হতে পারে।
  • পরিত্যক্ত হয়ে যেতে পারে।
  • তাদের পাবলিক API পরিবর্তন করতে পারে।
  • ব্যাকওয়ার্ড কম্প্যাটিবিলিটি নষ্ট করতে পারে।

0deps মডেলে, আপনি সমস্ত প্রয়োজনীয় ডিপেন্ডেন্সি সরাসরি আপনার প্রজেক্ট রিপোজিটরিতে অন্তর্ভুক্ত করেন। আপনি ইনস্টলেশনের সময় সেগুলো ডায়নামিকভাবে ডাউনলোড করেন না। অ্যাপটি তৈরি এবং চালানোর জন্য যা কিছু প্রয়োজন, তা প্রথম ক্লোন (clone) থেকেই উপস্থিত থাকে।

এই পদ্ধতিটি প্রদান করে:

  • রিপ্রোডিউসিবল বিল্ড (Reproducible builds)।
  • এক্সটার্নাল প্যাকেজ রেজিস্ট্রির ওপর কম নির্ভরতা।
  • সেন্ট্রালাইজড সিকিউরিটি অডিট।
  • উচ্চতর প্রেডিক্টেবিলিটি (predictability)।
  • ছোট সাপ্লাই চেইন অ্যাটাক সারফেস।

0deps মানে এই নয় যে আপনি কোড আপডেট করা বন্ধ করে দেবেন। অ্যালগরিদম এবং সিকিউরিটি ফিক্স অবশ্যই বিবর্তিত হতে হবে। পরিবর্তে, আপনি পাবলিক কন্ট্রাক্টটি স্থিতিশীল রাখেন।

প্রতিটি লাইব্রেরি একটি সতর্কতার সাথে ডিজাইন করা ইন্টারফেস প্রকাশ করে। উদাহরণস্বরূপ:

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

এই ফাংশনগুলো একটি কন্ট্রাক্ট বা চুক্তি নির্ধারণ করে। এই কন্ট্রাক্টটি অপরিবর্তিত থাকে। আপনি আপনার অ্যাপ্লিকেশনের বাকি অংশের ওপর কোনো প্রভাব না ফেলে অন্তর্নিহিত কোডটি পুনরায় লিখতে পারেন বা ইন্টারনাল লাইব্রেরিগুলো পরিবর্তন করতে পারেন।

যখন কোনো ভালনারেবিলিটি (vulnerability) বা নিরাপত্তা ত্রুটি দেখা দেয়, তখন আপনি ইন্টারফেসের পেছনের ইমপ্লিমেন্টেশনটি আপডেট করেন। পাবলিক API একই থাকে। আপনার অ্যাপ্লিকেশন কোনো কোড পরিবর্তন ছাড়াই কাজ চালিয়ে যায়।

গঠনটি দেখতে এরকম: Application ↓ Public Interface ↓ Internal Adapter ↓ Implementation

যদি কোনো এক্সটার্নাল লাইব্রেরি হারিয়ে যায়, তবে আপনি কেবল অ্যাডাপ্টারটি পরিবর্তন করবেন। আপনার অ্যাপ্লিকেশনের অন্য কোনো অংশ ভেঙে পড়বে না। এই আইসোলেশন আপনাকে ম্যালিশিয়াস প্যাকেজ, রেজিস্ট্রির কম্প্রোমাইজ এবং ডিপেন্ডেন্সি কনফিউশন (dependency confusion) থেকে রক্ষা করে।

প্রজেক্টগুলো কয়েক দশক ধরে টিকে থাকে। লাইব্রেরি এবং ফ্রেমওয়ার্কগুলো তা পারে না। 0deps আপনার অ্যাপ্লিকেশনকে বছরের পর বছর ধরে একই স্থিতিশীল কন্ট্রাক্ট ব্যবহার করার সুযোগ দেয়, যদিও এর চারপাশের ইকোসিস্টেম পরিবর্তিত হয়।

আপনি প্রেডিক্টেবল, রেজিলিয়েন্ট এবং মেইনটেনেবল সফটওয়্যার পান।

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

Optional learning community: https://t.me/GyaanSetuAi