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

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

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

اول اینو روشن کنم، آزاد با مجانی فرق داره

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

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

این آزادی رو معمولا با چهار حق توضیح می دن. شماره هاش هم از صفر شروع می شن، چون خب ما برنامه نویس ها حتی موقع شماره گذاری هم دوست داریم با بقیه فرق داشته باشیم.

  1. بتونم برنامه رو برای هر کاری که می خوام اجرا کنم.
  2. بتونم ببینم برنامه چطور کار می کنه و برای نیاز خودم تغییرش بدم.
  3. بتونم یه نسخه از برنامه رو به بقیه بدم.
  4. بتونم نسخه تغییر داده شده رو هم منتشر کنم تا بقیه از تغییرم استفاده کنن.

برای اینکه بتونم یه برنامه رو ببینم و تغییر بدم، خب سورسش باید در دسترس باشه. فایل نهایی برنامه برای من مثل یه غذای آماده می مونه. می تونم بخورمش، ولی از ظاهرش همیشه نمی شه فهمید داخلش چی ریختن. سورس کد بیشتر شبیه دستور پخته. شاید خودم آشپزی نکنم، ولی حداقل یکی می تونه نگاه کنه و بگه این سوپ چرا بوی جوراب خیس می ده.

من که قرار نیست کرنل بخونم، این آزادی به چه دردم می خوره؟

به نظرم این سوال کاملا منطقیه. بیشتر ما نه وقتش رو داریم و نه حوصله اش رو که هزاران خط کد بخونیم. حتی بیشتر برنامه نویس ها هم صبح بیدار نمی شن که قبل از چای چند خط از کرنل رو بررسی کنن.

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

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

گنو از یه غر کاملا جدی شروع شد

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

هدف گنو هم اصلا کوچیک نبود. می خواستن یه سیستم عامل کامل بسازن که کاربرهاش آزاد باشن. اسم GNU هم یه شوخی برنامه نویسیه و از عبارت GNU’s Not Unix میاد. یعنی گنو یونیکس نیست، با اینکه از نظر طراحی شبیه یونیکسه. بله، حتی اسم پروژه هم رفته توی یه حلقه بی پایان شوخی.

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

تصویرسازی ریچارد استالمن در میان ابزارهای دیجیتال
استالمن پروژه گنو رو با یه ایده ساده راه انداخت. من نباید برای استفاده از ابزار خودم از یکی دیگه اجازه بگیرم.

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

لینوکس دقیقا کجای قصه میاد وسط؟

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

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

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

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

کپی لفت یعنی وقتی رفتی بالا نردبون رو برنداری

فقط باز گذاشتن کد همیشه برای نگه داشتن آزادی کافی نیست. ممکنه یکی یه پروژه آزاد رو برداره، بهترش کنه و نسخه جدید رو دوباره پشت در بسته بذاره. اینجا ایده Copyleft میاد وسط.

کپی لفت از قانون کپی رایت استفاده می کنه تا آزادی نرم افزار حفظ بشه. مجوزهایی مثل GPL می گن می تونیم نرم افزار رو استفاده کنیم، تغییر بدیم و منتشر کنیم، ولی اگه نسخه تغییر داده شده رو پخش کردیم باید همون آزادی ها رو برای نفر بعدی هم نگه داریم. یعنی اجازه دارم از نردبون بالا برم، ولی نباید بعدش نردبون رو بردارم و به بقیه بگم خودتون یه فکری کنین.

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

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

نرم افزار آزاد و متن باز واقعا یکی ان؟

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

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

آزادی هم همیشه گل و بلبل نیست

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

ولی آزادی قرار نیست تضمین کنه همه چیز بی نقصه. برای من یعنی اگه مشکلی هست، راه تغییرش از قبل برای همیشه بسته نشده. می تونم گزارش بدم، پول بدم یکی درستش کنه، خودم دست به کار بشم یا یه نسخه دیگه از پروژه رو انتخاب کنم.

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

چرا این فلسفه هنوز برام مهمه؟

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

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

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

چیزی که من از گنو و لینوکس دوست دارم

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

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

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

مهم اینه که اگه یه روز خواستم در رو باز کنم، کلیدش فقط دست یکی دیگه نباشه.