যে কোনও আন্তঃনির্ভরশীল সিস্টেমে মূলত দুটি পছন্দ থাকে। বিমূর্ততা এবং সংহতকরণ। (আমি উদ্দেশ্যমূলকভাবে প্রযুক্তিগত শর্তাদি ব্যবহার করছি না)। বিমূর্ততা সহ, আপনি বলছেন যে আপনি যখন এমন কোনও এপিআইতে কল করেন যখন এপিআইর পেছনের কোডটি পরিবর্তিত হতে পারে, ফলাফল সর্বদা একই রকম হয়। উদাহরণস্বরূপ, আমরা যখন ফোন fs.open()
করি তখন এটি কোনও ড্রাইভ বা ড্রাইভ, কোনও এসএসডি বা হার্ডড্রাইভ কিনা সে বিষয়ে আমাদের চিন্তা নেই, আমরা সর্বদা একটি উন্মুক্ত ফাইল বিবরণী পেয়ে যাব যা আমরা স্টাফ করতে পারি। "সংহতকরণ" এর সাথে লক্ষ্য হ'ল উপায় পরিবর্তন হলেও কোনও কাজ করার জন্য "সেরা" উপায় সরবরাহ করা। উদাহরণস্বরূপ, একটি ফাইল খোলার ডিস্কের একটি ফাইলের চেয়ে কোনও নেটওয়ার্ক শেয়ারের জন্য আলাদা হতে পারে। উভয় পদ্ধতিই আধুনিক লিনাক্স ডেস্কটপে বেশ বিস্তৃতভাবে ব্যবহৃত হয়।
বিকাশকারীদের দৃষ্টিকোণ থেকে এটি "যে কোনও সংস্করণের সাথে কাজ করে" বা "একটি নির্দিষ্ট সংস্করণ দিয়ে কাজ করে" এর একটি প্রশ্ন। এর একটি দুর্দান্ত উদাহরণ ওপেনজিএল। বেশিরভাগ গেমস ওপেনগিএলের একটি নির্দিষ্ট সংস্করণ নিয়ে কাজ করার জন্য সেট করা আছে। আপনি উত্স থেকে সংকলন করছেন কিনা তা বিবেচ্য নয়। যদি গেমটি ওপেনজিএল 1.1 ব্যবহার করতে লেখা হয় এবং আপনি এটি 3.x এ চালানোর চেষ্টা করছেন তবে আপনি ভাল সময় যাবেন না। বর্ণালীটির অন্য প্রান্তে, কিছু কলগুলি প্রত্যাশা করা হয় যে তা যাই হোক না কেন কাজ করবে। উদাহরণস্বরূপ, আমি কল fs.open()
করতে চাই আমি কী কার্নেল সংস্করণে আছি সেদিকে খেয়াল রাখতে চাই না। আমি শুধু একটি ফাইল বর্ণনাকারী চাই।
প্রতিটি উপকারিতা আছে। ইন্টিগ্রেশন পিছনের সামঞ্জস্যের ব্যয়ে "আরও নতুন" বৈশিষ্ট্য সরবরাহ করে। বিমূর্ততা "নতুন" কলগুলির উপরে স্থিতিশীলতা সরবরাহ করে। যদিও এটি লক্ষ্য করা গুরুত্বপূর্ণ যে এটি অগ্রাধিকারের বিষয়, সম্ভাবনার নয়।
সাম্প্রদায়িক অবস্থান থেকে, সত্যিই ভাল কারণ ছাড়াই বিমূর্ততা একটি জটিল সিস্টেমে সর্বদা ভাল। উদাহরণস্বরূপ, fs.open()
কার্নেল সংস্করণের উপর নির্ভর করে আলাদাভাবে কাজ করা হয়েছে তা কল্পনা করুন। তারপরে একটি সাধারণ ফাইল সিস্টেম ইন্টারঅ্যাকশন লাইব্রেরির জন্য কয়েক শতাধিক "ওপেন ফাইল" পদ্ধতিগুলি (বা সম্ভবত ব্লকগুলি) বজায় রাখা দরকার। যখন কোনও নতুন কার্নেল সংস্করণ প্রকাশিত হবে, আপনি "আপগ্রেড" করতে সক্ষম হবেন না, আপনার ব্যবহৃত প্রতিটি সফটওয়্যার পরীক্ষা করতে হবে। কার্নেল 6.2.2 (জাল) কেবলমাত্র আপনার পাঠ্য সম্পাদককে ভেঙে দিতে পারে।
কিছু বাস্তব বিশ্বের উদাহরণগুলির জন্য ওএসএক্স ব্যবহারকারীর স্পেস ভাঙার বিষয়ে চিন্তা করে না। তারা আরও ঘন ঘন "বিমূর্ত" ওভার "সংহতকরণ" লক্ষ্য করে। এবং প্রতিটি বড় ওএস আপডেটে জিনিসগুলি ভেঙে যায়। এটি বলার অপেক্ষা রাখে না যে একটি উপায় অন্যভাবে ভাল better এটি একটি পছন্দ এবং ডিজাইনের সিদ্ধান্ত।
সবচেয়ে বড় কথা, লিনাক্স ইকো-সিস্টেমটি দুর্দান্ত টিউনসোর্স প্রকল্পগুলিতে পূর্ণ, যেখানে ব্যক্তি বা গোষ্ঠীগুলি তাদের ফ্রি সময়ে প্রকল্পে কাজ করে, বা সরঞ্জামটি কার্যকর বলে। এটি মনে রেখে, দ্বিতীয়টি মজা করা বন্ধ করে এবং পিআইএ হওয়া শুরু করে, সেই বিকাশকারীরা অন্য কোথাও চলে যাবে।
উদাহরণস্বরূপ, আমি একটি প্যাচ জমা দিয়েছি BuildNotify.py
। আমি পরার্থবাদী হওয়ার কারণে নয়, তবে আমি এই সরঞ্জামটি ব্যবহার করেছি এবং আমি একটি বৈশিষ্ট্য চেয়েছিলাম। এটা সহজ ছিল, তাই এখানে, একটি প্যাচ আছে। যদি এটি জটিল, বা কষ্টকর ছিল তবে আমি ব্যবহার BuildNotify.py
করব না এবং আমি অন্য কিছু খুঁজে পাব। যদি প্রতিবার কোনও কার্নেল আপডেট আসে তবে আমার পাঠ্য সম্পাদকটি ভেঙে যায়, আমি কেবল একটি আলাদা ওএস ব্যবহার করব। সম্প্রদায়ের জন্য আমার অবদানগুলি (তবে ছোট) অবিরত বা অস্তিত্ব থাকবে না, ইত্যাদি।
সুতরাং, ডিজাইনের সিদ্ধান্তটি সিস্টেম কলগুলিতে বিমূর্ত করার সিদ্ধান্ত নেওয়া হয়েছিল, যাতে আমি যখন fs.open()
এটি করি তখন এটি কেবল কার্যকর হয়। এর অর্থ জনপ্রিয়তা অর্জনের fs.open
দীর্ঘকাল ধরে বজায় রাখা fs.open2()
।
.তিহাসিকভাবে, এটি সাধারণভাবে পসিক্স সিস্টেমগুলির লক্ষ্য। "এখানে কলগুলির একটি সেট এবং প্রত্যাশিত রিটার্ন মানগুলি রয়েছে, আপনি মাঝখানেটি খুঁজে বের করবেন" " আবার বহনযোগ্যতার কারণে। লিনাস কেন সেই পদ্ধতিটি তার মস্তিষ্কের অভ্যন্তরীণ ব্যবহারটি বেছে নেয় এবং আপনাকে তাকে কেন এটি জানতে জিজ্ঞাসা করতে হবে। এটি যদি আমার হয় তবে আমি একটি জটিল সিস্টেমে সংহতকরণের বিষয়ে বিমূর্ততা বেছে নেব।