مهندس سخت افزاری که آهنگسازی میکنه و عاشق ادبیاته :) وبگاه شخصی : haghiri75.com
راهنمای عملی گذاشتن فیل در یخچال (ساخت یک توزیع لینوکس، برای علاقمندان)
مدت زیادیه که امکان دست به قلم شدن ندارم. یعنی، سرم زیادی شلوغه. قضیه هم از اینجا شروع میشه که مدتی پیش؛ یکی از دوستان عزیزم بخاطر این که سالیان پیش من یک توزیع لینوکسی ساخته بودم، من رو دعوت به کار کرد برای شرکتشون. یه مصاحبه و ... ای شد و تعیین شد که من، مسولیت تهیه اون اسکلت کلی قضیه رو برای سیستم عامل دسکتاپ شرکت، که یک توزیع مبتنی بر دبیانه؛ داشته باشم.
دو ماهی میشه که مشغول کار هستم و یکم که گذشت به ذهنم رسید که من، یک زمین بازی نیاز دارم برای این پروژه. پس پروژه کاپریس (لینک) رو راه انداختم. کاپریس هم مثل توزیع اصلی، مبتنی بر دبیانه. منتها با این فرق که پشتش به جامعه کاربریش (در حال حاضر، حتی بدون داشتن یه ریلیز اولیه؛ تقریبا ۱۵ نفر) گرمه و نه یک شرکت. یعنی اگر هزینهای هست، شخصی داره پرداخت میشه یا با دونیشن و ... . بگذریم. موضوع مهمتر، اینه که عده زیادی اومدن و ازم میپرسن «چطوری توزیع لینوکس ساحتی؟» و عده دیگر این که «چه چالشهایی در ساخت توزیع داشتی» و حتی سوالاتی مثل «چطوری میشه از توزیع لینوکس پول درآورد» و هزاران سوال مشابه که میخوام در این پست، بهش پاسخ بدم! البته که این پست ممکنه به شدت طولانی باشه ولی خب برای خودم، ارزش نوشتن داشت.
چطوری یک توزیع لینوکس ساختی؟
ساختن توزیع لینوکس، عین قرار دادن یک فیل در یخچاله. به ظاهر سخته اما در باطن اینه که شما در رو باز کنی، فیل رو بذاری در یخچال و در یخچال رو ببندی! همینقدر ساده و همینقدر احمقانه. اما خب این پروسه ساده و احمقانه هم روشهای مختلفی داره. سعی میکنم در ادامه، روشها رو تقسیمبندی کنم به دستههای کلی و توضیحشون بدم.
توزیع مستقل
توزیعهای مستقل، یعنی اونهایی که مستقلا ساخته شدند و به هیچ توزیع دیگری وابستگی ندارند (ولو این که از مدیربسته یه توزیع دیگه استفاده کنن، میزکاری که یه توزیع دیگه منتشر کرده داشته باشن و ... ). مثالاش؟ دبیان! فدورا! اوپن سوزه! هزاران هزار توزیع مستقل وجود داره ولی خب عمده توزیعهایی که به اسم مستقل یا اصلی میشناسیم در حال حاضر اینان : فدورا (زمین بازی ردهت که RHEL و سایر محصولات ردهت ازش مشتق میشن. همچنین به صورت غیرمستقیم، پایه CentOS و Oracle Linux هم هست)؛ دبیان (که احتمالا برای همه آشناست، توزیعی که پایه اوبونتو و هزاران توزیع دیگره و به پایداری و توسعه برمبنای جامعه معروفه)، اسلکور (که تقریبا اولین توزیع قابل نصب از لینوکس بوده)، اوپن سوزه (که ابتدا ترجمه آلمانی از اسلکور بوده و بعدها تبدیل میشه به یک توزیع مستقل به اسم سوزه، از روی اون اوپن سوزه ساخته میشه اما کم کم اوپن سوزه تبدیل به توزیع مستقل و زمینبازی سوزه میشه. مثل ردهت و فدورا)؛ آلپاین (که معرفی نمیخواد، پایه همه ایمیجهای داکر در حال حاضر این بزرگواره :)) ) و چند مورد دیگه که انقدر معروف نیستند.
حالا این توزیعها چطور ساخته میشن؟ یه توزیع لینوکس از دو بخش عمده تشکیل شده : محیط کاربر و محیط هسته. محیط هسته همون لینوکسه که از سایت کرنل (لینک) قابل دریافته. محیط کاربر، معمولا ابزارهای گنو رو شامل میشه اما میتونه نباشه. این دوستانی که این ها رو ساختن چه کار کردند؟ اومدن کرنل رو به همراه فضای کاربر کامپایل کردند و سپس ابزارهایی که نیاز داشتند رو براش ساختند. ابزارهایی مثل نصاب، مدیربسته، ابزارهای تامین امنیت و ... . به این شکل، توزیع یک توزیع «مستقل» شده. اگر میخواید بدونید یک توزیع مستقل چطور ساخته میشه؛ میتونید این کتاب رو بخونید:
اگر هم انگلیسی بلد نیستید مسالهای نیست؛ دانیال بهزادی سالها پیش یه نسخه قدیمیتر از LFS رو ترجمه کرده که آزاد در دسترسه (لینک).
حالا آیا ساخت توزیع مستقل منطقیه؟ از بعضی جهات بله و از بعضی جهات نه. به طور کلی وقتی مستقل از توزیعهای دیگر باشید، احتمال این که بابت نقض قوانین و قواعدی که برای توزیعشون دارن به مشکل بخورید به صفر میرسه (مثلا در نظر بگیرید یک توزیعی کل هدفش اینه که systemd نداشته باشه و شما در توزیعی که بر اساس اون ساختید؛ بیاید systemd رو بهش اضافه کنید. ممکنه باعث جنگ و جدال بشه). همچنین دعواهای برندینگ و کپیرایت و ... هم هست که خب، بهتره ازشون دوری جست :)).
اما از چه نظر منطقی نیست؟ از این نظر که رشد و بلوغ یک توزیع لینوکسی زمان و هزینه زیادی دربر داره. اگر نمیتونیم اون زمان رو برای توسعه کدبیس، توسعه جامعه و از همه مهمتر برندینگ پروژه بذاریم؛ بهتره به ساخت سیستم LFS به چشم یک سرگرمی نگاه کنیم و نه پروژه جدی.
بسیار عالی. تا اینجا با روشی که خیلی از توزیعهای قدیمی مثل اسلکور و دبیان باهاش ساخته شدند؛ آشنا شدیم. الان وقتشه یه نفسی تازه کنیم و به سراغ روشی بریم که اکثر توزیعهای پر استفاده (اوبونتو، مینت و ...) و همچنین توزیعی که دارم روش کار میکنم (پروژه شرکت!) و توزیع کاپریس برای ساخت ازش استفاده کردند. روشی که دردسرش کمتره. یعنی، فیل اینجا قراره کمتر مقاومت کنه برای تو یخچال رفتن!
انشقاق از یک توزیع دیگر
انشقاق یا fork یک اصطلاحه برای توزیعهایی که وابستگی به توزیع اصلی دارند، اما مسیر توسعه، مخازن و سیاستهای جداگانهای دنبال میکنند. این روش، روش کمهزینهتر و بهتری نسبت به ساخت یک توزیع از ابتداست. اما بیایم ببینیم که مثالای بزرگش کدومان؟ بدون شک اوبونتو؛ یکی از مثالای خیلی شناخته شده از این روش توسعهست (البته اوبونتو هر روز بیشتر از روز قبل، به این که یک توزیع کاملا مستقل بشه نزدیک میشه). اوبونتو به این شکل عمل میکنه از شاخه ناپایدار دبیان، هر ۶ ماه یک بار یک نسخه جدید میسازه و این وسط هر ۲ سال یک بار هم از شاخه آزمایشی (تستینگ) دبیان، برای ساخت نسخههای پشتیبانی طولانی مدت استفاده میکنه.
مثال دیگرش، ردهته. ردهت شرکتیه که از فدورا بعنوان یک زمینه بازی استفاده میکنه. اما موضوع مهم اینجاست که وقتی مطمئن میشن فدورا به قدر کافی خوب و ایمن بوده؛ بستهها رو میبرن و باهاش ردهت رو میسازن. اون موقع، به سادگی میتونن ازش پول دربیارن. اوراکل لینوکس هم همینطوره. منتظر میشه تا ردهت پکیجهاش رو تایید کنه و نسخه بده، سپس شروع میکنن به ساخت نسخه خودشون بر اساس سورسهای ردهت.
حالا پروسه ساخت این تیپ توزیع ها چطوریه؟ این خودش میتونه یه مطلب دیگه باشه. اما اجازه بدید روش سوم هم توضیح بدم و بعد یک لینک میدم به روش ساخت یک فورک از دبیان! چرا که روش سوم هم مشابه فورک کردنه تقریبا با یه سری فرقای ریز!
و اما روش آخر؛ ریمسترینگ!
ریمسترینگ (Remastering) یعنی : به هیچی تو توزیع اصلی دست نزنید! فقط تغییرات دلخواه رو بدید و برندینگ خودتون رو اضافه کنید و بعد ارائهش کنید. ریمستر کردن، کمهزینهترین و سادهترین راه ساخت توزیعه. در عین حال، روشیه که توزیعهای مطرحی مثل مینت باهاش جلو رفتن. البته لینوکس مینت در حال حاضر، از مخازن خودش داره استفاده میکنه و تقریبا به یک فورک از اوبونتو (و دبیان) تبدیل شده. اما قدیمترها حتی مخازنش هم مخازن اوبونتو بود. حالا این که چرا و چطور شد که تصمیم گرفتن جدا کنن، به خودشون ربط داره. از سایر ریمسترهای معروف میشه به طعمهای اوبونتو (زوبونتو، کوبونتو و ... ) اشاره کرد. همچنین اسپینهای فدورا. لینوکس علمی (Scientific Linux) یک ریمستر از CentOS بود.
و اما چطوری این کار رو میکنن؟ جواب سادهست :
البته لینک بالا، برای سیستمهای دبیانی نوشته شده ولی روش کار برای ساخت یک فورک یا ریمستر از توزیعهای دیگر هم تقریبا همینطوریه.
چه چالشهایی در ساخت یک توزیع لینوکس داشتی؟
این یکی از بحثای بزرگه. بحثایی که حتی توزیعهایی مثل دبیان، Void Linux ، جنتو و ... (توزیعهای عمدتا مستقل و شناخته شده با جوامع بزرگ) هم گهگداری باهاش دست به یقه میشن. حالا بریم سر پروژههای کوچکتر. پروژههایی مثل همین کاپریس خودمون! اینا هم از این مشکلات دارن ولی این مشکلات تو ابعاد کوچک، راحتتر حل میشن تا ابعاد بزرگ.
برای این که این قسمت رو راحتتر بتونم توضیح بدم، پروژههای بزرگ رو سعی میکنم ندید بگیرم و از دید پروژه کوچک و شخصی بهش نگاه کنم! پس بریم سراغ چالشها.
کاربر
اریک ریموند در مقاله «کلیسای جامع و بازار» (به انگلیسی The Cathedral and The Bazaar) یک قسمتی داره به اسم «سودهایی که از کاربران به شما میرسد». اگر حال خوندن اون مقاله تقریبا ۴۰ صفحهای رو ندارید، به جاش من اینجا بهتون توضیح میدم که کل حرفش چیه.
کل حرف اینه که داشتن کاربر به اندازه کافی، باعث میشه که شما روند توسعهتون سریعتر پیش بره و گذشته از این، مشکلات کمتر از دید پنهان میمونن (به قول لینوس تروالدز، هرقدر چشم بیشتر باشه سوراخا کمعمقتر میشن!).
نگهداری از پروژه
فقط نگاه بندازید به لیست توزیعهای ایرانی در دیستروواچ (فکر کنم تنها کشوری که تمام پروژههای این چنینیش Discontinued هستند):
چرا این اتفاقه میافته؟ به صورت کلی بخوایم نگاه کنیم وقتی شما یک پروژه به بزرگی توزیع لینوکس رو قبول کردید، این وظایف رو هم پذیرفتید :
- آماده سازی یک بستر مناسب برای توسعه
- هزینههای هاست، دامین، سرور دانلود و ... (چرا که بعضا Planet و مجله و این چیزا هم راه میندازن توزیعها)
- هزینههای مدیریت جامعه کاربری
- مدیریت جامعه کاربری
- پاسخگویی به نیاز کاربران جدیدتر
- رفع نیازهای پیشین (که خب شاید مهمترین قصد از تولید یک توزیع لینوکس همین باشه).
ولی خب بعضیاش راه حل داره. مثلا مورد اول، اینطوریه که شما میتونید از گیتهاب یا گیتلب استفاده کنید. یا از دوستی که gogs , gitea یا گیتلب شخصی آورده بالا خواهش کنید بخشی از ظرفیتش رو در اختیار شما بذاره. مورد دوم هم اینطوری بود که قدیما اکثر توزیعها روی SourceForge میزبانی میکردند و خب یه بخشی از هزینه خود به خود کم هم میشد. حتی میشد آمار دانلود هم از روی سورسفورج بدون بررسی گزارشهای سرور و ... هم دید!
اما هزینههای مدیریت جامعه کاربری، از اونجا که فقط پول نیست و زمان و حوصله هم هست بعضی وقتا عجیب میتونن سنگین بشن. خود اکت مدیریت جامعه کاربری هم همینطور (دقیقا به همین خاطره که عمده جوامع کاربری، به صورت جمهوری اداره میشن. یعنی در دورههای زمانی متنوعی، یک هد براش انتخاب میشه که جامعه کاربری رو مدیریت کنه).
و اما مورد پنجم. کاربر جدید، الزاما به معنای نیاز جدید نیست؛ ولی معمولش اینه که وقتی یک نسل جدید از کاربرها به سیستم اضافه شدن؛ نیازهای جدیدی هم با خودشون آوردن. به همین خاطر، باید برای این موضوع هم یک چاره اساسی اندیشیده بشه.
و اما مورد آخر. عمده هدفی که توزیعها دنبال میکنن وجود یک نیاز بزرگه. مثلا لینوکس شریف (لینک) و پارسیکس (لینک) هر دو با این هدف ارائه شدند که مشکلات کاربران فارسیزبان رو حل کنند. اما رفته رفته، این مشکلات کمرنگ تر شد (در حدی که الان هنگام نصب اکثریت قریب به اتفاق توزیعهای لینوکس، شما میتونید زبان و صفحهکلید پیشفرضتون رو فارسی قرار بدید) و خب طبیعتا نیاز به این توزیعها هم کمتر حس شد.
همچنین توزیع آریوس (لینک) هم وجود داشت که به شکل خارج از جعبه (Out of The Box) اوبونتو رو برای کاربر عمدتا ایرانی، شخصی سازی کرده بود. اما پس از ۴ نسخه، تصمیم گرفتن که کلا جمعش کنن برن. چون نیازها با خود اوبونتو یا مینت، پاسخ داده میشد.
خب این مورد خیلی طولانی شد. چرا که مواردی رو شامل میشد که عمدتا چالشهای بزرگی برای پروژههای متنباز و آزاد هستند. بریم سراغ آخرین چالش، و بزرگترینش!
جامعه کاربری نرمافزار آزاد
جامعه کاربری نرمافزار آزاد یکم خشنه :)) و ممکنه نسبت به پروژههای جدید، یکم خشن طور برخورد کنند. شما باید برندینگ شخصی خوبی در این جامعه داشته باشید که پروژههاتون مقبول باشه. فکر کنم مطلب در مورد رفتارهای عجیب غریب جامعه نرمافزار آزاد (حداقل نوع ایرانیش) زیاده. یکی از مطالب خوب در این زمینه رو میتونید از قلم سوشای عزیز بخونید :
و البته جامعه، جامعه کم تحملی هم هست. البته من رفتاری که جامعه در قبال اشخاص داره رو رد یا تایید نمیکنم، بعضا نیازه که خشن رفتار شه اما خیلی وقتا دوز خشونت الکی بالا میره. این هم یک مطلب دیگه پیرامون همین موضوع توسط سوشا:
خلاصه کلام اینه که جامعه کاربری نرمافزار آزاد، خودش میتونه یک چالش بزرگ پیش روی شما باشه. حداقل تا وقتی که به قدر کافی درش مشارکت نکردید! مشارکت هم از طرق مختلف ممکنه. شاید بعدها مطلبی بنویسم که چطور میشه تو این جامعه اعتبار کسب کرد.
مورد آخری که میخوام در موردش صحبت کنم، در مورد اینه که حرف و حدیث هم در مورد این جامعه زیاده. از یه جایی به بعد ممکنه این حرف و حدیثها حتی رنگ و بوی سیاسی هم به خودش بگیره. اگر دنبال دردسر نیستید، بهتره قبل شروع یک پروژه مواضع خودتون رو پیرامون اهداف (منظور از اهداف، اهداف غیرفنی پروژه یا مشارکتتونه) پروژه مشخص کنید. در یک سال یا یک سال و نیم گذشته، کم حاشیه در این جامعه درست نشده.
نمیدونم ساعت چند بود که این مطلب رو شروع کردم ولی داره طولانی میشه. شخصا نیاز دارم که الان نفسی تازه کنم و بعد ادامهش رو بنویسم :)) اما خب بگذریم، لازم بود که این حجم مطلب نوشته بشه! بریم سراغ مورد آخر.
چطور میشه از ساخت توزیع لینوکس، پول در آورد؟
پول درآوردن از توزیع لینوکس! روشهای مختلفی داره. شما میتونید مثل کنونیکال و ردهت (و حتی فکر کنم اوراکل و ناول(شرکتی که سالیان دراز پشت سوزه بود)) بیاید و «پشتیبانی» بفروشید. به این شکل که وقتی کسی توزیعتون رو نصب کرد (مثلا RHEL )، برای استفاده از مخازن رسمی و دریافت پشتیبانی تخصصی (یا به قولی انترپرایز) باید به شما پول پرداخت کنه. کنونیکال، صرفا پشتیبانی انترپرایز برای اوبونتو ارائه میده. اما ردهت و سوزه (چون ازشون مطمئنم) وقتی که شما کد نداشته باشید (مشابه سریالنامبر ویندوز و ...) نمیذارن از مخازن رسمی بروزرسانی دریافت کنید.
همینطور، کار کردن برای شرکتی که توزیع لینوکس میسازه هم؛ یکی از گزینههاست! این همون روشیه که من دارم پول درمیارم. البته من برای ردهت کار نمیکنم، برای یه شرکت ایرانی کار میکنم :)).
موارد دیگری هم هست، مثل تهیه و فروش Merch و فروش دیسک یا فلشی که توزیع روش نصبه و ... . خلاصه این مورد برمیگرده به خلاقیت خودتون.
اما مهمترین شکل درامدزایی از نرمافزار آزاد دریافت اعانه یا donation عه. همچنین، مقالات و مطالب مختلفی در مورد روشهای درآمدزایی از نرمافزار آزاد وجود داره (در این حد که میگن ریچارد استالمن آخر راهنمای ایمکس، چند خطی هم در این باره نوشته) و خب، میتونید از مدل فروش و کاسبی اون ها هم ایده بگیرید!
من عادت به طولانی نوشتن نداشتم هیچوقت. اگر جایی رشته کلام شفته شده، اگر جایی غلط نگارشی پیش اومده بخاطر همینه. شما خودتون ببخشید.
در نهایت، امیدوارم این مطلب که خودش اندازه یک کتاب توش بود! به دردتون خورده باشه. به نظرم از بخش چالشها به بعد، میتونه در هر پروژهای مواردی که قید کردم به کارتون بیاد. اگر مطلب به دردتون خورد، ممنون میشم که مطلب رو با دوستانتون هم به اشتراک بذارید.
با تشکر از شما، موفق و موید باشید :)
مطلبی دیگر از این انتشارات
پایتونستان-مینی پروژه یک برنامه GUI-قسمت دوم
مطلبی دیگر از این انتشارات
6 مرحله برای موفقیت در برنامه نویسی
مطلبی دیگر از این انتشارات
همه چیز درباره CSS