بعد از نوشتن این پست به نظرم اومد که خیلی سخت توضیح دادم و نیاز هست که بهتر و روان‌تر بنویسم. ولی فعلا از کمال‌گرایی می‌گذرم و می‌گذارم که به همین شکل اینجا باشه تا درستش کنم.

فضا طوری هست که هر کسی میگه لینوکس باید فورا بگه که میدونم گنو-لینوکس اصطلاح درست‌تری هست و تفاوت این با اون رو بگه؛ ولی من همچنان ترجیح میدم (مثل بسیاری از نویسندگان و متخصصان دیگه) از لغت لینوکس در معنای عام‌ استفاده کنم.

به نظر میاد علت همچین کاربردی بیشتر ساده‌سازی جهت استفاده بوده. معنای لغت لینوکس در طول زمان انقدر تغییر کرده که گنو-لینوکس رو هم دربرمی‌گیره. به نظرم اصطلاح مضری هم نیست. در مقابل تفاوت چیزی مثل SD Card و RAM که در کشور ما اشتباه جا افتاده، بسیار مهمه. قبلا در اینجا راجع به کج‌فهمی‌هایی که این غلط مصطلح ایجاد می‌کنه، صحبت کردم.

لینوکس در معنای تخصصی‌ به معنای دقیقا خود کرنل هست که بخش اصلی ارتباط بین‌ سخت‌افزار و نرم‌افزار هست. در کرنل، درایورها وجود دارند. در کرنل برنامه‌ریزها وجود دارند. کلا اگر درس سیستم‌عامل پاس کرده باشید، تقریبا هر چی اونجا خوندید در سطح کرنل پیاده‌سازی میشه. مک و ویندوز و لینوکس هم هر کدوم کرنل خودشون رو دارند.

البته اندروید از کرنل Customizeشده لینوکس استفاده می‌کنه. معمولا تو قسمت About موبایل‌تون نوشته که از کدوم ورژن کرنل استفاده می‌کنید.

در این پست قراره یک دسته‌بندی در مورد توزیع‌های لینوکس ارائه بدم و بعدا درباره تجربیاتی که تو این مدت از لینوکس بدست آوردم صحبت کنم و بگم در آینده چطور می‌خوام مسیر یادگیری لینوکس رو ادامه بدم.

شاید لازم باشه قبلش درباره توزیع لینوکس هم صحبت کنم. لینوکس مثل بسیاری از سیستم‌های مرسوم مثل ویندوز و مک نیست که یک نسخه واحد داشته باشه. Open-Source هست و واقعا هر کسی می‌تونه یک نسخه مخصوص خودش (با نرم‌افزار‌ها و ویژگی‌هایی که خودش دوست داره)، درست کنه. به این نسخه مخصوص، توزیع یا Distribution می‌گیم.

اصلا زیبایی لینوکس به همین هست. شما در لینوکس واقعا صاحب سیستم‌عامل‌تون هستید و می‌تونید هر چیزی رو دوست داشتید تغییر بدید یا دستکاری کنید و کسی نمی‌تونه جلوتون رو بگیره.

همین مسئله رو میشه از جنبه دیگه ایراد در نظر گرفت؛ چون کسی که تازه وارد لینوکس میشه نمی‌دونه دقیقا باید کدوم توزیع رو نصب کنه.

توزیع‌های مختلف لینوکس رو میشه از دو جهت بهشون نگاه کرد: مدیر پکیج و محیط دستکاپ.

به نظرم چیزی که باعث تمایز اکثر توزیع‌های مختلف لینوکس میشه، همین دو عامل هستند.

مدیر بسته (Package Manager)

پکیج منیجر یا مدیر پکیج یا مدیر بسته، همون‌طور که از اسمش مشخصه نرم‌افزارها و پکیج‌ها رو مدیریت می‌کنه یعنی کار نصب و بروزرسانی و حذف پکیج‌ها رو به عهده می‌گیره.

پکیج منیجر از نظر کارکردی مثل Google Play یا App Store اپل هست.

اکثر کسانی که از ویندوز میان با پکیج منیجر آشنا نیستند. تو ویندوز عادت داریم بریم تو اینترنت و خودمون دستی نرم‌افزار رو دانلود کنیم. بعد Next Next بزنیم تا نصب بشه.

ولی تو لینوکس معمولا اینطوری نیست. شما وارد ترمینال می‌شید و میگید:

sudo apt install telegram-desktop

و لینوکس خودش میره آخرین نسخه تلگرام رو دانلود می‌کنه و براتون نصب می‌کنه.

این تجربه بسیار متفاوت از مدلی هست که داخل ویندوز وجود داره. در اینجا خود سیستم‌عامل قبول کرده که مدیریت پکیج بخش مهمی از سیستم‌عامل باشه و ساختارش رو بر همین مبنا طراحی کرده.

البته شاید بگید که من دوست ندارم برای نصب نرم‌افزار، داخل ترمینال دستور تایپ کنم. حرف خیلی منطقی‌ای هم هست؛ به همین علت، اکثر توزیع‌های لینوکس نرم‌افزارهایی دارند که می‌تونید داخل‌شون بصورت Visual نرم‌افزار رو نصب کنید (البته معمولا توصیه میشه کامند بزنید).

البته می‌دونم که مک هم پکیج منیجر بسیار خوبی به نام Brew داره و برای ویندوز هم ابزاری به نام Choco داریم و خود مایکروسافت هم اخیرا Winget رو کامل کرده و بصورت پیش‌فرض نصب هست اما مفهوم پکیج منیجر تو لینوکس بسیار گسترده‌تر از اینهاست که جلوتر توضیح میدم.

تو لینوکس مدیر پکیج بهانه‌ای هست برای این که آدم‌های مختلف فلسفه‌های مختلف نصب نرم‌افزار رو تست کنند. در واقع توزیع‌های مختلف با پکیج‌ منیجرشون تعریف میشن. این پکیج منیجر به قدری مهم هست که توزیع‌هایی که یک پکیج‌ منیجر دارند رو جزو یک خانواده به حساب میارن.

خانواده‌های لینوکس

پس گفتیم یک سری خانواده وجود داره و قاعدتا هر خانواده بر اساس ارزش‌ها و باورهای متمایزی شکل گرفتند. در اینجا دوست دارم چند نمونه از ارزش‌های چند تا از مهم‌ترین خانواده‌های لینوکس رو توضیح بدم.

بعضی ها تو لینوکس اعتقاد دارند که سیستم‌عامل و نرم‌افزارهاش باید پایدار (Stable) باشند. مهم نیست که فلان کتابخونه آپدیت داده. ما صبر می‌کنیم تا چندین ماه تو جاهای دیگه تست بشه و بعد به مخزن‌های (Repositoryهای) خودمون اضافه‌اش می‌کنیم. اینجا خانواده دبین Debian بوجود میان. پس پایداری یا Stability، مهم‌ترین ارزش برای اعضای این خانواده - همون توزیع‌ها - هست.

بعضی‌ها میگن ما می‌خوایم تغییرات رو در سریع‌ترین زمان ممکن داشته باشیم. تا این حد که اگر یک کامیت روی سورس تلگرام اومد، ما می‌خوایم اون تغییر رو داخل تلگرام نصب‌شده داخل لپ‌تاب خودمون داشته باشیم؛ حتی اگر خود تلگرام هنوز Release نداده باشه. اینجا خانواده آرچ Arch بوجود میاد. به خانواده توزیع‌های آرچ Rolling-Release میگن؛ چون اصلا مثل Debian نیست که مجبور باشید صبر کنید تا اول سال بشه بعد ورژن جدیدش بیاد. شما همیشه جدیدترین ورژن رو خواهید داشت.

یکی از مهم‌ترین ویژگی‌های اعضای خانواده آرچ، Rolling-Release بودن اون هست. Rolling-Release در مقابل Point-Release یا Standard-Release تعریف میشه. مثلا Ubuntu یک توزیع Point-Release هست و شما مجبورید صبر کنید که سیستم‌عامل آپدیت بده و تعداد زیادی نرم‌افزارهای سیستمی با هم آپدیت بشن. تقریبا میشه گفت همه نرم‌افزارهایی که ما باهاشون بصورت روزانه کار می‌کنیم، Point-Release هستند؛ به این معنا که کاربر صبر می‌کنه و وقتی تیم توسعه تشخیص داد که نرم‌افزار آماده آپدیت هست، یه نسخه ارائه میشه و کاربر می‌تونه نرم‌افزارش رو آپدیت کنه.

جالب این که بعضی کسانی که با خانواده آرچ کار می‌کنند، احساس می‌کنند که خیلی آدم‌های خفنی هستند و اصولا هویت خودشون رو با سیستم‌عاملی که ازش استفاده می‌کنند، تعریف می‌کنند. برای همین در Reddit و جاهای مشابه، زیاد عبارت I use Arch btw (I use Arch by the way) رو می‌بینید. اینطوری می‌خوان خودشون رو از بقیه متمایز کنند.

من هم زمانی از آرچ استفاده کردم و قبول دارم که واقعا نصب آرچ و همچنین تنظیمات بعد نصب اون - خصوصا Pure Arch - کار سختی هست؛ ولی آیا لزوما این که کسی پدرش در اومده تا یه سیستم‌عامل روی لپ‌تابش نصب کنه، ارزش خاصی برای جامعه ایجاد کرده؟ آیا اصلا میشه این رو به عنوان معیار تمایز مطرح کرد؟

مثل همیشه بعضی‌ها هم می‌خوان بهترین‌های دو تا دنیا (به تعبیر خودشونBest of two worlds) رو داشته باشند. پکیج‌های Debian خیلی وقت‌ها قدیمی هستند و از طرفی Arch هم دیگه زیادی جدیده. خانواده Fedora یا RedHat اینجا بوجود میان. البته RedHat جنبه صنعتی‌بودنش بسیار پررنگ‌تره.

خانواده‌هایی دیگه‌ای هم داریم ولی من تا حالا باهاشون کار نکردم و فلسفه شکل‌گیری‌شون رو نمی‌دونم. توضیح تمام خانواده‌های لینوکس و مفاهیم ارزشی‌شون از سطح درک و سواد من خیلی بالاتره. در کل تو مدتی که تو لینوکس می‌گشتم، این سه تا خانواده خیلی برام پررنگ شدند و متوجه شدم بسیاری از توزیع‌هایی که اسم‌شون رو می‌شنویم متعلق به یکی از این سه خانواده هستند.

فکر هم نکنید که تعداد اعضای هر خانواده کم هست. خانواده Debian هزاران توزیع رو شامل میشه. شاید بهتر باشه به جای خانواده بهشون بگیم طایفه یا Clan.

از بحث اصلی خارج نشیم. گفتم که هر خانواده فلسفه متفاوتی برای توزیع‌هاش در نظر داره و قاعدتا پکیج‌ منیجر مناسب خودش رو هم طراحی می‌کنه.

خانواده Debian، پکیج منیجر APT رو میسازه. خانواده آرچ با Pacman کار می‌کنه و خانواده Fedora با RPM کار می‌کنه.

حالا اینطور در نظر بگیرید که هر خانواده که یک فلسفه کاملا متفاوتی برای توزیع‌هاش در نظر داشته، یک پکیج منیجر کاملا متفاوتی هم بوجود آورده. خانواده Debian پکیج منیجر APT رو ساخته. خانواده Arch با پکیج منیجر Pacman کار می‌کنند و خانواده Fedora با rpm کار می‌کنه.

شاید پیش خودتون فکر کنید که چرا باید پکیج منیجرهای متفاوتی بوجود بیان؟ مگر نه این که هر کدوم از نسخه‌های متفاوتی از یک نرم‌افزار استفاده می‌کنند (یکی پایدارتر و یکی جدیدتر)؟ آیا نمیشد که مخزن‌های متفاوتی داشته باشیم و هر کسی بسته به نیازش بسته رو از جاهای متفاوت دانلود کنه؟

مسئله به این سادگی‌ها نیست. مثلا وقتی من میگم که می‌خوام آخرین نسخه تلگرام (با آخرین کامیت برنامه‌نویس) رو روی سیستمم داشته باشم و با اون کار کنم‌، قاعدتا باید فایل‌نصبی تلگرام با آخرین کامیت رو پیدا کنم یا خودم بسازم (قاعدتا هیچ‌ نرم‌افزاری به ازای هر کامیت یه فایل نصبی به مشتریانش نمیده).

یعنی چی؟ یعنی تمام ابزارهایی که برنامه‌نویس تلگرام برای ساخت بسته‌ تلگرام ازش استفاده می‌کنه رو روی سیستمم نصب کنم، سپس سورس تلگرام رو دانلود کنم و بسته رو بصورت لوکال، Build و Compile کنم و بعد همون رو نصب کنم.

تعجب نکنید. این کار واقعا انجام میشه و به نظرم چند تا علت می‌تونه داشته باشه که یکیش اینه که طرف بسته به شغلش واقعا به همچین چیزی نیاز داره. یکی دیگه‌اش (که زیاد شنیدم) هم اینه که طرف به بسته Pre-Compiled (از پیش‌ آماده) مشکوک هست و فکر می‌کنه که ممکنه کد جاسوسی داخلش باشه؛ ولی وقتی خودش بسته رو بسازه، خیالش راحت‌تره.

پس میشه گفت به ازای هر خانواده، یک پکیج منیجر مخصوص اون خانواده طراحی کردند و ساختند. همه توزیع‌های اون خانواده هم از اون پکیج‌ منیجر استفاده می‌کنند.

مهم‌تر از اون پکیج‌منیجر قابل تعویض نیست و به احتمال زیاد نصب دو تا پکیج‌منیجر مختلف، سیستم‌تون رو خراب خواهد کرد (اصطلاحا میگن Breaking the distribution) مگر این که خیلی حرفه‌ای باشید یا از پکیج‌منیجرهای موازی استفاده کنید که بعدا توضیح میدم.

باز هم اینجا طبق انتظار بین اعضای یک خانواده اختلاف‌های جزئی‌ای وجود داره. مثلا بعضی‌ها تو آرچ میگن که کاش بشه در عین این که آخرین نسخه تلگرام رو داریم، از نسخه پیش‌ساخته افرادی که بهشون اعتماد داریم استفاده بکنیم. اینجا AURتشکیل میشه و پکیج منیجری هم به نام Aura بوجود میاد که با این ایده کار کنه.

معمولا میشه پکیج‌منیجرهای داخل یک خانواده رو بصورت همزمان نصب کرد و مشکلی بوجود نمیاد.

مقداری از حرفام در مورد پکیج‌منیجر رو گفتم. بقیه‌اش رو اینجا نمی‌گم و در قالب پست دیگه‌ای منتشر می‌کنم. فکر می‌کنم تا همین‌جا هم کلی حاشیه رفتم. امیدوارم که اصل مطلب فراموش نشده باشه. اصل مطلب این بود که هر توزیع لینوکس رو میشه با دو مؤلفه شناخت: اولی مدیر پکیج و دومی محیط دستکاپ.

محیط دستکاپ (Desktop Environment)

بحث محیط دستکاپ مثل پکیج منیجر انقدر پیچیده نیست. محیط دستکاپ به یه سری نرم‌افزار گفته میشه که باعث میشن بتونیم بصورت Visual با سیستم‌عامل سر و کله بزنیم.

برای کسانی که تا حالا با لینوکس کار نکردند، این حرف عجیب به نظر میاد. مگه میشه سیستمی اصلا محیط دستکاپ نداشته باشه؟ اره. میشه. کلی توزیع داریم که تنها راه ارتباطی شما با اونها یک ترمینال هست که اون هم با یه سری دستور تایپی کار می‌کنه.

در واقع خیل عظیمی از سرورهای لینوکسی‌ای که وجود دارند، اصلا محیط دستکاپ ندارند. نیازی هم بهش ندارند. فرض کنید یک سرور داریم که یک عالمه دیتابیس داخلش وجود داره. این سرور فقط نیاز داره که کوئری کاربر رو بگیره و جواب کوئری رو (در قالب متن یا هر قالب دیگه‌ای) بهش برگردونه.

تو همچین سرور نیازی به این که کسی جایی کلیک کنه یا صداش کم و زیاد بشه، وجود نداره چون اصلا کاربر مستقیم (به معنای عام اون) نداره. یه کاربر حرفه‌ای داره که با ترمینال بهش وصل میشه و تنظیماتش رو انجام میده. به بقیه هم که صرفا کوئری جواب میده.

تو ویندوز و مک جداکردن محیط دستکاپ از خود سیستم‌عامل کاری بسیار سخت هست چون اصولا اون سیستم‌عامل از اول با کاربر مستقیم تعریف شده. الان هم اگر به آمارها نگاه کنید، بازار سرورهای جهان، با قدرت، دست لینوکس و خانواده‌های اون هست.

برگردیم به بحث اصلی.

محیط دستکاپ در واقع مجموعه‌ بزرگی از نرم‌افزارهای مختلف هست. اگر بخوام با ادبیات ویندوزی بگم، می‌تونید به Taskbar و File Manager و Sound Mixer و Bluetooth Manager و Clock و Mail و Cortana و حتی Pictures ویندوز فکر کنید.

تو لینوکس برای هر کدوم از اینها یک عالمه انتخاب وجود داره! File Manager پیش‌فرض رو دوست ندارید؟‌ اشکال نداره. ده مدل File Manager مختلف داریم که هر کدوم مزایا معایب خودشون رو دارند. یکی پر از ویژگی‌های عجیب غریبه (Feature-Rich) و دیگری Minimal و ساده.

همین انتخاب رو برای تک‌تک نرم‌افزارهای پیش‌فرض سیستم در نظر بگیرید؛ تو این مورد حتی Screen Saver هم می‌تونه یه نرم‌افزار جداگانه باشه که افراد مختلف با ایده‌های مختلف توسعه‌اش بدن.

حالا فرض کنید یکی بیاد، این انتخاب‌ها رو برای همه نرم‌افزارهای مهم انجام بده و یک‌جا اون‌ها رو Pack کنه. اسمش رو می‌گذاریم Desktop Manager.

اینجا هم محیط دستکاپ‌های مختلف ویژگی‌های مختلفی دارند: یکی مثل Gnome سعی می‌کنه ساده باشه و کار راه بنداز. یکی مثل KDE می‌خواد ویژگی‌های زیادی رو داشته باشه و کاملا Customizable باشه. یکی مثل XFCE سعی می‌کنه کم حجم و سریع باشه.

حالا که کمی در مورد توزیع‌ها و ویژگی‌هاشون حرف زدیم، بهتر می‌تونیم بفهمیم با چی سر و کار داریم.

مثلا اوبونتو (Ubuntu) از خانواده Debian هست و دستکاپ Gnome رو داره. کوبونتو (Kubuntu = Ubuntu + KDE) همون Ubuntu هست که دسکتاپش رو KDE گذاشته. لوبونتو (Lubuntu = Ubuntu + LXQT) همون Ubuntu هست با دستکاپ LXQT. اینها همه توزیع‌های مشابه Ubuntu متعلق به خانواده Debian بودند.

از طرفی Manjaro یه نسخه به ازای هر دسکتاپ داره. از KDE Plasma بگیرید تا Gnome و i3 و Budgie.

حالا اینا رو میگی که چی بشه؟

میگم که بدونیم با چه غول بزرگی رو به رو هستیم. حالا که این مدل راجع به دسته‌بندی توزیع‌ها رو بهتون گفتم، می‌تونم از مسیری که من تو لینوکس پیش رفتم بهتون توضیح بدم.

می‌تونم براتون از مزایا معایب هر خانواده بگم و بگم که به نظر من استفاده از کدوم توزیع (از بین این هزاران توزیع) برای شما مناسب‌تر خواهد بود.

به نظرم این طور نگاه کردن به توزیع‌های لینوکس خیلی بهتره. اینطوری اگر هم خواستیم راجع به انتخاب یک توزیع تصمیم بگیریم اول به این دو مسئله فکر می‌کنیم و می‌بینیم که با نظام ارزشی کدوم خانواده بیشتر هماهنگ هستیم و بعد میریم راجع به جزئیات کم‌‌اهمیت‌تر جستجو و فکر می‌کنیم.

در پست آینده راجع به این مسیر خواهم نوشت.