0deps মুভমেন্ট: লোকাল ডিপেন্ডেন্সি এবং অপরিবর্তনীয় কন্ট্রাক্টস

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

এটি একটি সফটওয়্যার সাপ্লাই চেইন ঝুঁকি তৈরি করে।

প্রতিটি ডিপেন্ডেন্সি আপনার অ্যাটাক সারফেস বাড়িয়ে দেয়। এটি যা করতে পারে:

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

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

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

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

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

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

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

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

এই ফাংশনগুলো একটি কন্ট্রাক্ট নির্ধারণ করে। এই কন্ট্রাক্টটি কখনোই পরিবর্তন হয় না। আপনি এর পেছনের কোডটি নতুন করে লিখতে পারেন বা সম্পূর্ণ লাইব্রেরিটি বদলে ফেলতে পারেন। আপনার অ্যাপ্লিকেশনের বাকি অংশ এই পরিবর্তনটি টের পাবে না।

যখন কোনো ভালনারেবিলিটি দেখা দেয়, তখন সাধারণত আপনি দুটি সমস্যার সম্মুখীন হন:

  1. ত্রুটিটি সমাধান করা।
  2. আপডেটটি আপনার অ্যাপকে ভেঙে ফেলছে কি না তা পরীক্ষা করা।

0deps আর্কিটেকচারে দ্বিতীয় সমস্যাটি আর থাকে না। আপনি ইন্টারনাল ইমপ্লিমেন্টেশন আপডেট করতে পারেন অথচ পাবলিক API একই থাকে। আপনার অ্যাপ্লিকেশন কোনো কোড পরিবর্তন ছাড়াই কাজ চালিয়ে যায়।

আপনি একটি ইন্টারনাল অ্যাডাপ্টার ব্যবহার করে এক্সটার্নাল ইন্টিগ্রেশনগুলোকে আলাদা করতে পারেন: Application -> Public Interface -> Adapter -> Implementation

যদি আগামীকাল কোনো লাইব্রেরি হারিয়ে যায়, তবে আপনাকে শুধু অ্যাডাপ্টারটি পরিবর্তন করতে হবে। আপনার অ্যাপের অন্য কোনো অংশ ভেঙে পড়বে না।

0deps সফটওয়্যারকে নিখুঁত করে তোলে না। এটি সাপ্লাই চেইন ঝুঁকি কমায়। এটি ম্যালিশিয়াস প্যাকেজ, রেজিস্ট্রির নিরাপত্তা বিঘ্নিত হওয়া এবং ডিপেন্ডেন্সি কনফিউশনের মতো সমস্যা প্রতিরোধ করে।

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

উৎস: https://dev.to/fullagenticstack/movimento-0deps-dependencias-locais-contratos-imutaveis-e-seguranca-por-design-4coo