কম্পিউটার টিউটোরিয়াল

বাইনারি (Binary) vs সোর্স (Source) প্যাকেজ: আপনি কোনটি ব্যবহার করবেন?

আপনি যেকোনো প্যাকেজ ম্যানেজার ব্যবহার করুন, লিনাক্সে প্রোগ্রাম ইনস্টল করার দুটি ব্রড (broad) উপায় রয়েছে। আপনি হয় একটি প্রি-বিল্ট (pre-built) প্যাকেজ ব্যবহার করবেন, অথবা আপনি নিজে প্রোগ্রাম কম্পাইল করবেন। এই দিনগুলো, পুরনো পদ্ধতিটি সাধারণত ডিফল্টভাবে জিতেছে, কিন্তু এমন সময়ও রয়েছে যখন আপনি সোর্স কোড থেকে কম্পাইল করার কথা বিবেচনা করতে চাইতে পারেন।

বাইনারি প্যাকেজ (Binary Packages) কী?

বাইনারি (Binary) vs সোর্স (Source) প্যাকেজ: আপনি কোনটি ব্যবহার করবেন?

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

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

আপনাকে একটি স্পেশাল প্রোগ্রাম দরকার এই ফাইলগুলো এক্সট্র্যাক্ট (extract) করে আপনার কম্পিউটারে ইনস্টল করার জন্য, সাধারণত আপনার প্যাকেজ ম্যানেজার বা অ্যাপ স্টোর। এই টুলস অন্যান্য কার্যকর ফাংশনও পারফর্ম করে, যেমন আপনি কী ফাইলগুলো ইনস্টল করেছেন তা ট্র্যাক রাখা, এবং সফটওয়্যার আপডেট ম্যানেজ করা।

প্যাকেজগুলো কোথা থেকে আসে?

সকল সফটওয়্যার সোর্স কোড (source code) নামে লাইন গুলোর টেক্সট নিয়ে গঠিত, নির্দিষ্ট প্রোগ্রামিং ল্যাঙ্গুয়েজে লেখা, যেমন C বা C++। আপনি সাধারণত এই সোর্স কোডকে একটি আর্কাইভে বান্ডেল করে সেটাকে একটি প্যাকেজ বলতে পারবেন না। এই লাইনগুলো আপনার কম্পিউটার বুঝতে এবং এক্সিকিউট করতে পারে এমন একটি ল্যাঙ্গুয়েজে ট্রান্সলেট করতে হবে।

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

"সোর্স থেকে ইনস্টল" (Installing "From Source") কী?

বাইনারি (Binary) vs সোর্স (Source) প্যাকেজ: আপনি কোনটি ব্যবহার করবেন?

একটি প্রোগ্রাম "সোর্স থেকে" (from source) ইনস্টল করা মানে একটি প্রোগ্রাম প্যাকেজ ম্যানেজার ছাড়া ইনস্টল করা। আপনি সোর্স কোড কম্পাইল করেন এবং বাইনারিগুলো আপনার কম্পিউটারে কপি করেন।

অধিকাংশ সময়, আপনি একটি প্রজেক্টের সোর্স কোড GitHub, GitLab, বা Bitbucket-এর মতো হোস্টিং সার্ভিস থেকে ডাউনলোড করতে পারেন। বড় প্রোগ্রামগুলো সোর্স কোড একটি পারসোনাল ওয়েবসাইটে হোস্ট করতে পারে। কোডটি সাধারণত একটি আর্কাইভ ফরম্যাটে জিপ (zip) করা থাকে (যেকেও সোর্স প্যাকেজ - source package বলা হয়)।

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

এই অটোমেশন কাজ করার জন্য, প্রোগ্রামগুলো make-কে একটি makefile প্রদান করে যা এটাকে বলে কী করতে হবে এবং কী কম্পাইল করতে হবে। এই দিনগুলো, এটি সাধারণত CMake-এর মতো স্পেশাল সফটওয়্যার দ্বারা অটোম্যাটিক্যালি জেনারেট (automatically generated) হয়। এখান থেকে আপনি আপনার সফটওয়্যারে কী ফিচার কম্পাইল করতে চান সেটা স্পেসিফিক্যালি স্পেসিফাই করতে পারেন।

"সোর্স থেকে বিল্ড" উদাহরণ

উদাহরণস্বরূপ, নিচের কমান্ড CMake ব্যবহার করে Calligra Office Suite-এর জন্য একটি কনফিগারেশন ফাইল জেনারেট করে। তৈরি হওয়া ফাইলটি make প্রোগ্রামকে বলে Calligra-এর শুধু Writer কম্পোনেন্টটি কম্পাইল করতে।

cmake -DPRODUCTSET=WORDS -DCMAKE_INSTALL_PREFIX=$HOME/kde/inst5 $HOME/kde/src/calligra

এটি করার পর, একজন ব্যক্তির শুধু make টুল রান করতে হবে কম্পাইল এবং ফলাফলগুলো তাদের কম্পিউটারে কপি করার জন্য। এটি নিচেরভাবে করা হয়:

make
make install

যদিও এটি প্রোগ্রাম কম্পাইল করার সাধারণ প্যাটার্ন, সোর্স প্যাকেজ ইনস্টল করার আরও অনেক উপায় রয়েছে। Gentoo Linux, উদাহরণস্বরূপ, এর জন্য একটি বিল্ট-ইন (built-in) পদ্ধতি রয়েছে, যা প্রসেসটি অনেক দ্রুত ও সহজ করে তোলে। কিন্তু বাইনারি প্যাকেজ বানানো উপরের কমান্ডগুলোর চেয়ে আরও কিছু ধাপ নেয়।

বাইনারি প্যাকেজ ব্যবহার করার সুবিধা

আপনি যদি লিনাক্স ব্যবহার করেন, কেউ আপনার ইনস্টল করা সফটওয়্যার প্রি-কম্পাইলড (pre-compiled) করেছে তার সম্ভাবনা বেশি। এটি সোর্স প্যাকেজ ব্যবহার করার চেয়ে অনেক বেশি সাধারণ হয়ে উঠেছে। কিন্তু কেন?

বাইনারি ভার্সনগুলো ম্যানেজ করা সহজ

বাইনারি (Binary) vs সোর্স (Source) প্যাকেজ: আপনি কোনটি ব্যবহার করবেন?

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

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

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

বাইনারি ভার্সনগুলোর উন্নত স্টেবিলিটি (Stability)

আপনার প্যাকেজ ম্যানেজারের জন্য রিপোজিটরি মেইনটেইন (maintain) করার লোকেরা বাইনারিগুলো সমস্যার জন্য টেস্ট করে এবং যেসব ظاهر হয় সেগুলো ফিক্স করার চেষ্টা করে তাদের সেরা দিয়ে। এটি প্রোগ্রামগুলোর উন্নত স্টেবিলিটিতে লিড (lead) করতে পারে, কিছুটা যা একজন ব্যক্তি সোর্স থেকে ইনস্টল করলে মিস আউট (miss out) করতে পারে।

প্লাস প্যাকেজগুলো সাধারণত একটি স্ট্রিক্ট নিয়ম সেট মেনে চলতে হয় যাতে নিশ্চিত হয় সেগুলো আপনার সিস্টেমে চলে। ডেবিয়ান এবং উবুন্টু উভয়ের একটি পলিসি ম্যানুয়াল (policy manual) আছে, অন্যান্য অনেক লিনাক্স ডিস্ট্রিবিউশনের মত।

কিছু প্রোগ্রাম একই সফটওয়্যার ডিপেন্ডেন্সির ভিন্ন ভার্সনে নির্ভরশীল থাকে চলে। প্যাকেজ রিপোজিটরি তাদের সেরা দিয়ে এই কনফ্লিক্টগুলো রেজলভ (resolve) করতে চেষ্টা করে যাতে আপনাকে এই নিয়ে চিন্তা করতে না পড়ে।

সোর্স প্যাকেজ কম্পাইল করার সুবিধা

সোর্স প্যাকেজ থেকে প্রোগ্রাম ইনস্টল করা সবার জন্য কিছু না, কারণ সাধারণত বাইনারি প্যাকেজের সাথে আপনার পিসি মেইনটেইন করা সহজ। 그렇다고 হলেও, এই কিছুটা বেশি জটিল পদ্ধতিতে প্রোগ্রাম ইনস্টল করার কিছু সুবিধা রয়েছে।

সোর্স কোড নবীনতম সফটওয়্যার অফার করে

প্রোগ্রামগুলো আরও নির্ভরযোগ্য করার একটি ডিসঅডভান্টেজ (disadvantage) হলো এতে সময় লাগে উন্নতি ও ফিক্স করার জন্য। ফলস্বরূপ, এটি আপনাকে সফটওয়্যারের পুরনো ভার্সন ব্যবহার করতে বাধ্য করতে পারে। যারা লেটেস্ট এবং গ্রেটেস্ট চান, তারা কিছুটা অনস্টেবিলিটি (instability) এক্সচেঞ্জে এটিই পছন্দ করতে পারে।

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

এটি কারণ বাইনারি প্যাকেজগুলো সাধারণত প্রোগ্রামের অফিশিয়াল রিলিজ থেকে তৈরি হয়। যেহেতু, এই ভার্সনগুলোর মাঝপথের পরিবর্তনগুলো সাধারণত কনসিডারড (considered) নয়। আপনার নিজস্ব সফটওয়্যার সোর্স থেকে কম্পাইল করে, আপনি এই পরিবর্তনগুলো থেকে অবিলম্বে সুবিধা নিতে পারেন।

এটিও সম্ভব যে আপনার লিনাক্স অপারেটিং সিস্টেমে আপনি যে সফটওয়্যার চান সেটি প্রি-মেড (pre-made) নেই। সেটা হলে, সোর্স থেকে ইনস্টল করা আপনার একমাত্র অপশন।

আপনি বেছে নিতে এবং বাদ দিতে পারেন (Pick and Choose)

বাইনারি (Binary) vs সোর্স (Source) প্যাকেজ: আপনি কোনটি ব্যবহার করবেন?

সোর্স প্যাকেজ ব্যবহার করার আরেকটি সুবিধা হলো আপনি ইনস্টল করছেন প্রোগ্রামগুলোর ওপর আরও নিয়ন্ত্রণ (control) পান। বাইনারি রিপোজিটরি থেকে ইনস্টল করার সময়, আপনি আপনার প্যাকেজ কাস্টোমাইজ করার উপায়গুলোতে রেস্ট্রিক্টেড (restricted) रहते পারেন।

উদাহরণস্বরূপ, FFmpeg-কে দেখুন, কমান্ড-লাইন-ভিত্তিক অডিও এবং ভিডিও কনভার্টার। ডিফল্টভাবে, এটি একটি বিশাল সংখ্যক ফিচারের সাথে আসে, যেকোনো আপনি হয়তো কখনো ছুঁবেন না। উদাহরণস্বরূপ, JACK অডিও সাপোর্ট FFmpeg-এ উপলব্ধ, যদিও এই সফটওয়্যারটি সাধারণত প্রোডাকশন এনভায়রনমেন্টে ব্যবহার হয়।

FFmpeg কম্পাইল করলে আপনাকে যেসব জিনিস দরকার নেই সেগুলো রিমুভ করতে দেয়, এটিকে হালকা এবং আপনার চাহিদার অনুযায়ী টেইলরড (tailored) করে তোলে। এবং একই বিষয় অন্যান্য হেভিওয়েট (heavyweight) প্রোগ্রামের জন্যও সত্য।

যখন রিসোর্স স્કার্স (scarce), ফিচার রিমুভ করা লোড হালকা করার একটি চমৎকার উপায় হতে পারে। আশ্চর্য নয় যে Chrome OS, অনেক লো-এন্ড কম্পিউটারে পাওয়া যায়, Gentoo Linux-র ওপর ভিত্তি করে তৈরি। Gentoo, সোর্স-ভিত্তিক হলে, এর অনেক সফটওয়্যার কম্পাইল করে, সম্ভবত এই সিস্টেমগুলোকে অনেক লাইটওয়েট করে তোলে।

দুটোই ব্যবহার করে ইনস্টল কেন না?

আপনি প্রতিদিন প্যাকেজ কম্পাইল করতে চাবেন না সম্ভবত, কিন্তু এটি মনে রাখতে একটি উপযোগী জিনিস। 그렇다고 হলেও, নতুন ইউনিভার্সাল প্যাকেজ ফরম্যাট Snap Store এবং Flathub-এর মতো সাইটগুলোর থেকে উপলব্ধ হওয়ায়, আপনি লেটেস্ট সফটওয়্যার পেতে সোর্স থেকে বিল্ড করার প্রয়োজন কম পড়বে।


  1. HDMI বনাম Display Port: আপনার জন্য কোনটি সেরা?

  2. স্ট্রিমিং বনাম ডাউনলোডিং: আপনার জন্য কোনটি উপযুক্ত?

  3. সঠিক রুবি IDE বেছে নিন: ডেভেলপারদের জন্য একটি প্র্যাক্টিক্যাল গাইড

  4. Shadowsocks vs VPN: কন্টেন্ট আনব্লক করার জন্য সেরা সমাধান কীভাবে বেছে নেবেন