লিনাস টরভাল্ডস বহনযোগ্যতা সম্পর্কে তার উদ্ধৃতি দ্বারা কী বোঝায়? [বন্ধ]


41

ইন অ্যান্ড্রু Tanenbaum সঙ্গে বিতর্কে বনাম একশিলা অপারেটিং সিস্টেম আর্কিটেকচার microkernel ধরে লিনাস টোরভাল্ডস বললেন,

বহনযোগ্যতা এমন লোকদের জন্য যারা নতুন প্রোগ্রাম লিখতে পারেন না।

তার মানে কী?


8
"পুরানো" দিনগুলি থেকে এই "বিতর্কগুলি" (ফ্লেয়ারওয়ার্স) কে বের করার সময় আপনি যা পড়ছেন সে সম্পর্কে সতর্ক থাকুন। এটি বিবেচনা করুন কারণ লিনাসের হৃদয় লিনাক্সের খুব প্রিয় ছিল কারণ এই আলোচনার সময় সম্ভবত প্রচুর সংবেদন অনুভূত হয়েছিল। সুতরাং আপনার সম্ভবত অনেকগুলি বিবৃতি আসার সম্ভাবনা রয়েছে যা কেবলমাত্র বোকা বা কাউকে ত্যাগ করার জন্য তৈরি করা হচ্ছে।
ওয়েইন কোর্টস

এই জাতীয় প্রশ্নটি এখন আমাদের মেটা-আলোচনার সাইটে আলোচনা করা হচ্ছে ।

1
প্রস্তাবিত পাঠ: এই $ {ব্লগ} আলোচনা
মশা

উত্তর:


82

বিতর্কে যেমন লিনাস লিখেছেন, এটি গালে জিহ্বা সহ (যেমন খুব বেশি গুরুত্ব সহকারে নেওয়া হবে না)।

তারপরে, তিনি ব্যাখ্যা করে যান যে বহনযোগ্যতা ভাল জিনিস হ'ল এটি একটি বাণিজ্য-বন্ধও; অপরিবর্তনীয় কোড অনেক সহজ হতে পারে। এটি হ'ল, কোডটি পুরোপুরি পোর্টেবল করার পরিবর্তে, কেবল এটি সহজ এবং পোর্টেবল যথেষ্ট করুন ("একটি পোর্টেবল এপিআই মেনে চলেন") এবং তারপরে যদি এটি পোর্ট করা প্রয়োজন হয় তবে এটি প্রয়োজনীয় হিসাবে পুনরায় লিখুন। কোডকে পুরোপুরি পোর্টেবল বানানো অকাল অপ্টিমাইজেশনের একটি রূপ হিসাবেও দেখা যায় - প্রায়শই ভালের চেয়ে বেশি ক্ষতি harm

আপনি যদি নতুন প্রোগ্রাম লিখতে না পারেন এবং মূলটির সাথে তাল মিলাতেই পারেন তা অবশ্যই সম্ভব নয় :)


20
অকাল অপটিমাইজেশনে সম্মত।
গিগাড

4
+1 লিনাস গাল হাস্যরসে জিহ্বার জন্য পরিচিত তবে কেউ কেউ তাঁর বক্তব্যকে খুব গুরুত্ব সহকারে নেন।
Spoike

12

আমি মনে করি এর অর্থ হ'ল প্রতিটি প্রোগ্রামটি বিশেষভাবে লেখা হার্ডওয়্যার এবং অপারেটিং সিস্টেমের জন্য লেখা উচিত।

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


আমি মনে করি এই হল ঠিক কি তিনি অভিপ্রেত
Chani

9

লিনাক্স প্রথম লেখা হয়েছিল যখন, এটি শুধুমাত্র i386 সিপিইউতে উপলব্ধ বৈশিষ্ট্যগুলি ব্যবহার করেছিল যা সে সময় মোটামুটি নতুন এবং ব্যয়বহুল ছিল।

লিনাক্স ঠিক এটিই করে: এটি অন্যান্য কার্নেলগুলির মতো মনে হচ্ছে 386 বৈশিষ্ট্যের একটি বৃহত উপসেট ব্যবহার করে। অবশ্যই এটি কার্নেলটিকে যথাযথভাবে অপ্রয়োজনীয় করে তোলে, তবে এটি একটি / অনেক / সহজ নকশা তৈরি করে। একটি গ্রহণযোগ্য বাণিজ্য বন্ধ, এবং এমন একটি যা লিনাক্সকে প্রথম স্থানে সম্ভব করেছিল।

একবিংশ শতাব্দীতে যাওয়ার পরে, i386 অনন্য করে তোলে এমন বৈশিষ্ট্যগুলি সম্পূর্ণ মূলধারায় পরিণত হয়েছিল, যার ফলে লিনাক্সটি খুব বহনযোগ্য হয়ে উঠতে পারে।


2
"... লিনাক্সকে খুব পোর্টেবল হওয়ার সুযোগ দিয়ে পুরোপুরি মূলধারায় পরিণত হয়েছিল," এবং প্রমাণ করেছিলেন যে সেই সময়ে লিনাক্সের বহনযোগ্যতা অকালীন অপ্টিমাইজেশন হতে পারে।

2
@ রোজার: আমি সত্যিই একমত হতে পারি না। এই বৈশিষ্ট্যগুলি মূলধারার হয়ে উঠেছে - তবে সেই সময়ের পরে, সিপিইউগুলি আরও বেশি বৈশিষ্ট্য যুক্ত করেছে, যার মধ্যে অনেকগুলি লিনাক্স সম্পূর্ণরূপে উপেক্ষা করে, কেবলমাত্র ন্যূনতমভাবে ব্যবহার করে, বা যুক্তিসঙ্গতভাবে ভালভাবে ব্যবহার করতে ব্যাপকভাবে (এবং বেদনাদায়ক) পুনর্লিখন করতে হয়েছিল। একই সাথে লিনাসের কমপক্ষে কিছু বক্তব্য রয়েছে: এমন কিছু যা এখন যুক্তিযুক্তভাবে ভালভাবে কাজ করে (এমনকি অ-বহনযোগ্যও) এমন কিছুকে মারধর করে যা বছরের পর বছর ধরে আলোচনা হয় তবে কখনও শেষ হয় না (যেমন, জিএনইউ এইচআরডি)।
জেরি কফিন

@ জেরি - এমন জায়গাগুলির মতো গবেষণা প্রকল্পগুলির মতো শব্দগুলি যেখানে আমি কাজ করতাম: "আপনার এখনই হাল ছেড়ে দেওয়া উচিত I'm আমি যা নিয়ে কাজ করছি সেগুলি আপনাকে অপ্রচলিত করে দেবে"। এটা 20 বছর আগে ছিল। এখনও দেখা যায় নি যে হুইস-ব্যাং নতুন স্টাফ গবেষণা ল্যাব ছেড়ে যায়।
দ্রুত_বলি

@ রোজার, বহনযোগ্যতা কোনও অপ্টিমাইজেশন নয়।

7

যিনি প্রচুর জাভা করেছেন, এবং "একবার লিখুন, সর্বত্রই ডিবাগ করুন" ঘটনাটি অভিজ্ঞ হিসাবে বহু বছর ধরে সাপ্তাহিক ভিত্তিতে আমি সম্পূর্ণরূপে এর সাথে সম্পর্কিত হতে পারি।

এবং জাভা সম্ভবত একটি হালকা উদাহরণ। এমনকি এমন কোনও ভাষা / টুলকিটের পোর্টেবল কোড বেস যা এমনকি নিজের এবং বহনযোগ্য হিসাবে নকশাকৃত হয়নি এমন সময়ে লোকেরা কী চেষ্টা করে তা আমি কল্পনাও করতে পারি না।

এই মুহুর্তে কর্মক্ষেত্রে, আমরা মোবাইল ডিভাইসের জন্য আমাদের পণ্যগুলির একটির একটি হালকা সংস্করণ লেখার ধারণাটি তদন্ত করছি। J2ME এবং অ্যান্ড্রয়েড উভয়ের জন্য কীভাবে এর বহনযোগ্য সংস্করণটি করা যায় সে সম্পর্কে আমি কিছু গবেষণা করেছি - যা যতটা সম্ভব কোডবেসকে ভাগ করে নেওয়ার চেষ্টা করে (স্পষ্টতই সে পুরোপুরি পুরোপুরি "পোর্টেবল" হতে পারে না, তবে এটি একটি অনুরূপ দর্শন) )। এটা দুঃস্বপ্ন।

হ্যাঁ, কখনও কখনও প্রদত্ত কাজের জন্য প্রদত্ত সরঞ্জামগুলি ব্যবহারের ক্ষেত্রে বিবেচনা করতে (এবং করতে) সক্ষম হওয়া সত্যিই ভাল। অর্থাত্ এক, একক, একঘেয়েমি প্ল্যাটফর্ম / পরিবেশের বিরুদ্ধে অবাধে বিকাশ। এবং প্রতিটি জন্য পৃথক, পরিষ্কার সংস্করণ লিখছি।


5

যদিও কিছু লোক বহনযোগ্যতা, আচরণের মানগুলি, ইত্যাদিকে নৈতিকভাবে উচ্চতর হিসাবে দেখেন বা চিকিত্সা করেন, বা সেই আদেশে কিছু, এটি আসলে কী উত্সাহিত হয় তা অর্থনীতি।

পোর্টেবল কোড লেখার কোডকে পোর্টেবল করার চেষ্টা করার শর্তে একটি ব্যয় রয়েছে এবং (প্রায়শই) পূর্ববর্তী কিছু বৈশিষ্ট্য যা সমস্ত লক্ষ্যবস্তুতে পাওয়া যায় না।

নন-পোর্টেবল কোডের কোডটি পোর্ট করার প্রচেষ্টার ক্ষেত্রে যখন / আপনি কোনও নতুন স্থাপত্যের বিষয়ে যত্নশীল হন এবং (প্রায়শই) পূর্ববর্তী কিছু বৈশিষ্ট্য যা মূল টার্গেটে পাওয়া যায় না (বা না ছিল) পূর্বেই বহন করে।

সেখানে বড় বাছাইকারীটি "যখন / আপনি কোনও নতুন স্থাপত্যের বিষয়ে যত্নশীল হন"। পোর্টেবল কোড রচনার জন্য সামান্য বা কোনও প্রয়াস ছাড়াই নতুন / বিভিন্ন আর্কিটেকচারে সেই কোডটি ব্যবহার করতে সক্ষম হওয়ার একটি শেষ পয়সের আশায় প্রচেষ্টা আপ-ফ্রন্টের প্রয়োজন । অ-বহনযোগ্য কোড আপনাকে পোর্টিংয়ে সেই বিনিয়োগটি বিলম্ব করতে দেয় যতক্ষণ না আপনি (অন্তত যুক্তিসঙ্গতভাবে) নিশ্চিত হন যে আপনাকে কোনও নির্দিষ্ট লক্ষ্যে সত্যই পোর্ট করা দরকার।

আপনি যদি নিশ্চিত হয়ে থাকেন যে আপনি প্রচুর লক্ষ্যবস্তুতে বন্দরে যাচ্ছেন, তবে দীর্ঘমেয়াদী পোর্টিং ব্যয় হ্রাস করতে সাধারণত ফ্রন্ট বিনিয়োগ করা সার্থক। কোডটি আপনাকে কতটা পোর্ট করতে হবে (বা তা সত্ত্বেও) সে সম্পর্কে আপনি যদি কম সুনিশ্চিত হন তবে নন-পোর্টেবল কোড লেখার ফলে আপ-ফ্রন্ট ব্যয় হ্রাস করা যায়, বিলম্বিত হতে পারে বা এমনকি কোডটি বহনযোগ্য করার ব্যয়কে সম্পূর্ণভাবে এড়ানো যায়।

আমি মনে করি এটিও লক্ষণীয় যে আমি "পোর্টেবল" এবং "নন-পোর্টেবল" কথা বলেছি যেন উভয়ের মধ্যে স্পষ্ট-কাট বিভাজন রয়েছে। বাস্তবে, এটি সত্য নয় - বহনযোগ্যতা একটি ধারাবাহিকতা, পুরোপুরি নন-পোর্টেবল (উদাহরণস্বরূপ, অ্যাসেম্বলি কোড) থেকে অত্যন্ত পোর্টেবল (উদাহরণস্বরূপ, ইনফো-জিপ) এবং এর মধ্যে যে কোনও জায়গায় running


4

তেনেনবাউম এই বিন্দুটি তৈরি করেছেন যে, লিনাক্সের অনেকাংশ সিপিইউ ইন্টারেক্টেশনকে একটি উপাদান হিসাবে তৈরি করার পরিবর্তে 386 সিপিইউ, সেই সময়কার শিল্পের অবস্থা লাভ করার জন্য একটি নন-মডুলার উপায়ে লেখা হয়েছিল, এবং খুব সহজেই অদলবদল হয়ে যায়। তেনেনবাউম মূলত বিশ্বাস করে যে কার্নেলটি এত একঘেয়ে এবং 386 সিপিইউতে আবদ্ধ, এটি করা খুব কঠিন করে তোলে,

  • পোর্ট লিনাক্স নিজেই অন্য সিপিইউ প্ল্যাটফর্মের (স্পষ্টতই ভুল, এএমডি 64, পাওয়ারপিসি, ইত্যাদি)
  • অন্য সিপিইউ আর্কিটেকচারে লিনাক্স x86 এর জন্য লেখা পোর্ট প্রোগ্রামগুলি (এটিও ভুল)

লিনাক্স শিবিরটি কয়েকটি পয়েন্ট দেয়, যার মধ্যে:

  • লিনাক্স ডিজাইনের অংশ হিসাবে মাল্টিথ্রেডেড ফাইল সিস্টেম সরবরাহ করে
  • মাইক্রোকার্নেল, যদিও আকর্ষণীয় এবং স্বজ্ঞাত খুব পারফর্ম্যান্ট নয়
  • পোর্টেবল এপিআই মেনে চলার ফলে কোনও ব্লকারের বিপরীতে বহনযোগ্যতার ইস্যুটিকে আরও বেশি বা একটি নিগল করে তোলে।

1
এখন ধরে রাখুন ... এই বিতর্কের সময়ে বহনযোগ্যতা অনেক বড় উদ্বেগ ছিল। এএমডি and৪ এবং পিপিসি অনেক বছর পরে এসেছিল।
ম্যাট ওলেনিক

1
আপনি একেবারে ঠিক বলেছেন - তবে লিনাসহ অন্যরাও উল্লেখ করেছেন যে তেনেনবাউম মনে করেছিলেন যে এটি এতটা উদ্বেগের বিষয় নয়
আনাতোলি জি

মাইক্রোকার্নেলগুলি ভাল পারফর্ম করে না? এটি তাদের মধ্যে যারা তাদের ব্যবহার করেছেন তাদের জন্য এটি একটি ধাক্কা হিসাবে আসে।
আমার সঠিক মতামতটি

আমি মনে করি না যে মাইক্রোকার্নেলগুলি ভাল কাজ করে না - আমি ম্যাক (ওএসএক্স) ব্যবহার করি এবং এটি দুর্দান্ত কাজ করে। লিনাস অবশ্য তা উল্লেখ করেনি।
আনাতলি জি

3

আপনি যদি পোর্টেবল কোড লিখতে চান তবে আপনাকে পোর্টেবল কোডটি লিখতে হবে।

আমি এর অর্থ কি?

নকশা অবশ্যই উদ্দেশ্য প্রতিফলিত করা উচিত। উদাহরণস্বরূপ, ভাষাটি যদি সি হয় তবে এটির নকশা তৈরি করুন যাতে নূন্যতম সংখ্যার কোডের লাইনের কাজ করার জন্য এটি পরিবর্তন করতে হয়। এর অর্থ প্রায়শই গণনা থেকে প্রদর্শনকে আলাদা করা হবে, এটি যাইহোক একটি ভাল নকশার দর্শন (এমভিসি)। বেশিরভাগ সি কোড যে কোনও জায়গায় সংকলন করা যায়, আপনি যদি কোনও ভাল সংকলকের অ্যাক্সেস পান। যেটি উত্সাহিত করুন এবং জেনেরিক হওয়ার জন্য যতটা লিখুন।

বিটিডাব্লু, এই উত্তরটি কেবলমাত্র অ্যাপ্লিকেশনের জন্য প্রযোজ্য। ওএস এবং এম্বেড করা সম্পূর্ণরূপে অন্য একটি প্রাণী।


2

এই বিবৃতিটি "আক্ষরিকভাবে" এর মতোভাবে ব্যাখ্যা করুন।

লিনাসের অন্য একটি উদ্ধৃতিতে তিনি বলেছিলেন: "সি ++ সমস্ত ভুল সমস্যা সমাধানের চেষ্টা করছে। সি ++ যে বিষয়গুলি সমাধান করে তা সত্যিকারের গভীর সমস্যা সমাধানের পরিবর্তে সিটিতে প্রায় বিশুদ্ধভাবে সিনট্যাকটিক এক্সটেনশন" "

এছাড়াও তার জীবনীতে, "জাস্ট ফর ফান" লিনাস মাইক্রোকার্নেলগুলির কথা উদ্ধৃত করে বলেছিল যে জটিলতার সাথে 'এন' সমস্যাটির জন্য যদি আপনি সমস্যাটিকে '1 / n' অনন্য অংশে বিভক্ত করেন .. তবে এ জাতীয় সিস্টেমের বিকাশের মোট জটিলতা হবে 'এন!' এটি নিজেই এই জাতীয় জিনিসটির চেষ্টা না করার জন্য যথেষ্ট কারণ এবং এই জাতীয় জটিল সিস্টেম থেকে দক্ষতা আহরণ করা খুব কঠিন হবে।


2

আপনাকে এই বিষয়টি বিবেচনায় নিতে হবে যে এই বিতর্কগুলির সময়, লিনাক্স খুব নতুন ছিল এবং মূলত কেবলমাত্র একটি 386 ওএস ছিল। আমি মনে করি আপনি যদি আজ লিনাসকে জিজ্ঞাসা করেন তবে তার আলাদা মতামত থাকবে। ট্যানেনবাউমসের মতো চূড়ান্ত নাও হতে পারে, তবে তিনি সম্ভবত হিমকে সম্মতি দেবেন এবং বলবেন যে তিনি কিছু বিষয়ে সঠিক ছিলেন।

লিনাস এবং অন্যান্য কার্নেল বিকাশকারীরা লিনাক্সকে বহনযোগ্য করে তোলার জন্য প্রচুর ব্যথা পেয়েছিল, তবে লিনাসকে আরম্ভ করার জন্য পোর্টেবল তৈরি করতে হলে লিনাক্সের অস্তিত্ব কখনও থাকতে পারে না।


2

এর অর্থ হল যে লোকেরা ভাল প্রোগ্রাম লিখতে পারে তাদের পোর্টেবল হওয়ার জন্য জিনিসগুলির প্রয়োজন হয় না, কারণ তারা স্ক্র্যাচ থেকে কাজ করতে পারে।

এটি কম প্রতিভাশালী প্রোগ্রামাররা যারা বর্তমানের অন্যান্য প্রোগ্রাম (বহনযোগ্যতা) "আমদানি" করতে চায় want

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.