تولد یک سیستمعامل، بخش سوم
سال تحصیلیای که در پاییز ۱۹۹۰ شروع شد، اولین سالی بود که در آن، دانشگاه هلسینکی از یونیکس، سیستمعامل قدرتمندی که در اواخر دهه ۱۹۶۰ در آزمایشگاههای بل ساخته شده اما در جای دیگری توسعه یافته بود، استفاده میکرد. در اولین سال تحصیل من، ما یک VAX داشتیم که دارای سیستمعامل VMS بود. این سیستم وحشتناک بود و محال بود کسی با خودش بگوید «وای! کاش یکی از اینها را در خانه داشتم». در عوض همه میپرسیدند «اوه! حالا چطور باید این کار را انجام دهم؟» استفاده از آن مشکل بود. ابزارهای زیادی نداشت. با آن نمیشد به این راحتیها به اینترنت که روی یونیکس پیادهسازی شده بود، وصل شد. حتی به سادگی نمیتوانستید متوجه شوید که حجم یک فایل چقدر است. میپذیرم که VMS برای یکسری از مقاصد، مثلا بانکهای اطلاعات بسیار خوب بود اما از آن نوع سیستمعاملهایی نبود که برایشان هیجان داشته باشید.
دانشگاه فهمیده بود که باید به سراغ چیزهای جدید برود. دنیای دانشگاهی شیفته یونیکس بود و دانشگاه هم یک Micro VAX خرید که اولتریکس یا نسخه یونیکس شرکت دیجیتال اکوییپمنت را اجرا میکرد. این راهی بود برای غوطهور شدن در محیط یونیکس.
با خواندن کتاب آندرو تاننباوم و یاد گرفتن چیزهایی که اگر تراشه ۳۸۶ داشتم میتوانستم به سراغشان بروم، بیشتر و بیشتر مشتاق تجربه دنیای یونیکس میشدم. هیچ راهی نبود که ۱۸۰۰۰ مارک فنلاندی جور کنم و یکی بخرم. میدانستم که اگر ترم پاییزی شروع شود تا وقتی که کامپیوتر شخصی خودم که بتواند یونیکس را اجرا کند نخریدهام، میتوانم از طریق سینکلرم به کامپیوتر یونیکس دانشگاه متصل شوم.
پس آن تابستان دو کار اصلی کردم: هیچچیز و خواندن ۷۱۹ صفحه کتاب سیستمهای عامل: طراحی و اجرا. این کتاب جلد قرمز یک جورهایی روی تخت من زندگی میکرد.
دانشگاه هلسینکی، نسخه شانزده کاربره Micro VAX را خریده بود و این یعنی فقط ۳۲ نفر حق داشتند در کلاس «سی و یونیکس» ثبتنام کنند؛ احتمالا اینگونه محاسبه کرده بودند که ۱۶ نفر صبح با سیستم کار کنند و ۱۶ نفر شب. معلم هم مثل بقیه ما در یونیکس تازهکار بود. از قبل این را اعلام کرد و در نتیجه مشکلی نداشتیم. او کتاب درسی را یک فصل جلوتر از دانشجویان میخواند در حالی که بعضی از دانشجویان سه فصل از کلاس جلو بودند. این که بچهها سوالهایی بپرسند که به دو سه فصل آینده مربوط شود تا ببینند آیا معلم تا آنجا را خوانده است یا نه، به یک بازی تبدیل شده بود.
همه ما بچههایی در جنگلهای یونیکس بودیم و کلاس هم هر جلسه پیش میرفت. چیزی که از این کلاسها مشخص بود این بود که پشت یونیکس، یک فلسفه نهفته است. این نکته را از همان اولین ساعت کلاس میشد فهمید. بقیه کلاس، تنها به ارائه جزییات میپرداخت.
چیزی که یونیکس را ممتاز میکند، ایدههای بنیادینی است که این سیستمعامل به دنبالشان است. این سیستمعامل تمیز و زیبا است. از حالتهای خاص اجتناب میکند. یونیکس مفهوم پروسس را عمده میکند. پروسس هر چیزی است که کاری انجام میدهد. بگذارید یک مثال ساده بزنم. در یونیکس، پوسته فرمان یعنی چیزی که برای دستور دادن به سیستمعامل در آن دستوراتی را وارد میکنید، بخشی از خود سیستمعامل نیست (در حالی که مثلا در داس اینطور است). این پوسته فقط یک وظیفه است. مثل هر وظیفه دیگر. فقط مساله این است که این وظیفه دستورات را از صفحهکلید میخواند و خروجی را روی نمایشگر نشان میدهد. هر چیزی که در یونیکس کاری میکند، یک پروسس است. علاوه بر این، فایلها را هم دارید.
این طراحی ساده همان چیزی بود که من و خیلیهای دیگر را -حداقل بین ما گیکها- فریفته یونیکس کرد. تقریبا هر کاری که در یونیکس میکنید تنها از شش عمل ساده ساخته شده (که فراخوانیهای سیستمی نامیده میشوند چون فراخوانیهایی هستند که از سیستمعامل درخواست انجام کارها را میکنند). شما میتوانید با استفاده از این شش فراخوانی سیستمی، تقریبا هر چیزی بنویسید و هر کاری بکنید.
مفهوم فورک یکی از عملیاتهای پایهای یونیکس است. وقتی پروسه فورک میکند، یک کپی کاملا مشابه از خودش را میسازد. با این کار دو کپی کاملا مشابه از یک چیز دارید. کپی فرزند، معمولا یک پروسه دیگر را اجرا میکند -خودش را با یک برنامه دیگر جایگزین میکند- و این دومین عمل اصلی است. چهار عمل اصلی دیگر عبارتاند از: باز کردن، بستن، خواندن و نوشتن و همه آنها روی فایل عمل میکنند. این شش عمل اصلی، عناصر تشکیل دهنده سیستمعامل یونیکس هستند.
بدون شک هزاران فراخوانی سیستم دیگر وجود دارند تا همه جزییات را پوشش دهند، ولی وقتی که شش فراخوانی اصلی را درک کردید، یونیکس را فهمیدهاید. یکی از زیباییهای یونیکس همین است که بفهمید برای انجام کارهای پیچیده، نیازی به رابطهای پیچیده ندارید. با ترکیب متقابل اجزای ساده، میتوان به هر مقدار پیچیدگی رسید. کاری که باید کرد ایجاد کانالهای ارتباطی (که در زبان یونیکسی، پایپ نامیده میشوند) بین پروسههای ساده به منظور حل مسایل پیچیده است.
یک سیستم زشت، سیستمی است که برای حل هر مساله، یک رابطه پیچیده داشته باشد. یونیکس درست برعکس است و به شما آجرهایی را میدهد که با آنها میتوانید هر چیزی بسازید. این دقیقا معنای طراحی یک سیستم تمیز است.
همین مساله در مورد زبانها هم صادق است. انگلیسی بیست و شش حرف دارد که میتوانید با استفاده از آنها هر چیزی بنویسید. در مقابل چینی را داریم که برای هر چیزی که بخواهید بگویید، یک علامت مجزا دارد. در چینی با پیچیدگی شروع میکنید و امکان ترکیب چیزهای پیچیده با هم، بسیار اندک است. جریان شبیه رویکرد VMS است که برای هر کار، عملیات پیچیده و جذابی دارد اما امکان استفاده از این اجزا به شکلی جز طراحی اولیه، وجود ندارد. ویندوز هم به همین شیوه طراحی شده.
در مقابل یونیکس بنا به فلسفه «کوچک، زیبا است» پایهریزی شده. اینجا آجرهای کوچک و سادهای دارید که با کنار هم چیدن آنها میتوانید به نهایت پیچیدگی برای بیان دقیق آن چیزی که نیاز دارید، برسید.
به هرحال این همان روشی است که فیزیک هم بر اساس آن کار میکند. در فیزیک هم به دنبال قوانین پایهای میگردیم که منطقا باید ساده و مفید باشند. پیچیدگی جهان محصول ترکیبهای شگفتانگیز این قوانین ساده با یکدیگر است و نه محصول پیچیدگی خود قوانین حاکم بر جهان.
سادگی یوینکس خودبهخود به وجود نیامده. یونیکس و مفهوم عملیات پایهای سادهاش، با زحمت و دردسر توسط دنیس ریچی و کن تامپسون در آزمایشگاههای بل طراحی و نوشته شد. به هیچ وجه نباید سادگی را با آسان بودن اشتباه گرفت. برای رسیدن به سادگی نیازمند طراحی و سلیقه خوب هستیم.
برگردیم به مثال زبان: نوشتار تصویری و زبانهای مبتنی بر اشکال، مثل چینی، زودتر به وجود میآیند و «سادهتر» هستند چون استفاده از حروف به عنوان پایههای نوشتار، نیازمند تفکری انتزاعیتر است. به همین ترتیب نباید سادگی یونیکس را حاصل پیشرفته نبودن آن دانست؛ اتفاقا مساله برعکس است.
توجه کنید که نمیگویم دلیلی اصلی به وجود آمدن یونیکس یک چیز خیلی پیشرفته بود. مثل خیلی چیزهای دیگر در دنیای کامپیوتر، این یکی هم به عنوان یک بازی شروع شد. یک نفر بود که میخواست روی پی.دی.پی-۱۱ بازی کند. یونیکس اینطوری شروع شد: پروژه شخصی دنیس و کن تا بتوانند جنگ کهکشانها بازی کنند. از آنجایی که این سیستمعامل چیز جدیای حساب نمیشد، AT&T هم به آن نگاه تجاری نداشت. در واقع AT&T یک شرکت انحصاری تنظیم شده بود و چیزی که اصلا نمیتوانست به سراغش برود، فروش کامپیوتر بود. به همین خاطر کسانی که یونیکس را نوشتند، برنامه و کدهای منبعش را به رایگان در اختیار دیگران و بخصوص دانشگاهها قرار دادند. این یک قدم بزرگ بود.
اینها باعث شدند تا یونیکس به عنوان یک پروژه بزرگ دانشگاهی مطرح شود. در سال ۱۹۸۴، بالاخره AT&T اجازه پیدا کرد تا در تجارت کامپیوتر هم سهیم شود؛ ولی تا آن موقع، سالها بود که دانشمندان زیادی بهخصوص در دانشگاه کالیفرنیا -برکلی- تحت راهنمایی کسانی مثل بیل جوی و مارشال کرک مکوییسک روی این سیستمعامل کار کرده و آن را توسعه داده بودند. آدمها الزاما برای مستند کردن کارهایی که میکنند وقت چندانی صرف نمیکنند.
اما در اوایل دهه ۱۹۹۰، یونیکس به سیستمعامل شماره یک همه سوپرکامپیوترها و سرورها تبدیل شده بود. این بازار بزرگی بود. یکی از مشکلات این بود که حالا دیگر نسخههای مختلف این سیستمعامل مشغول رقابت با یکدیگر بودند. بعضی از نسخهها با وفاداری خاصی به کدهای پایه AT&T رشد کرده بودند (و خانواده System V خوانده میشدند). بعضیها از نسخه BSD که در دانشگاه کالیفرنیا-برکلی توسعه داده شده بود مشتق شده بودند و گروهی هم بودند که ترکیبی از این دو به حساب میآمدند.
یکی از مشتقات BSD به طور خاص قابل ذکر است؛ پروژه 386BSD که توسط بیل جولیتز بر اساس کد پایه BSD نوشته شده و به رایگان در اینترنت توزیع شده بود. این پروژه بعدها چند شاخه شد و نسخههای آزاد BSD (از جمله NetBSD، FreeBSD و OpenBSD) از آن به وجود آمد و توجه زیادی را در دنیای یونیکس به خودش جلب کرد.
به هین دلیل بود که AT&T تازه از خواب بیدار شد و علیه دانشگاه کالیفرنیا-برکلی شکایت کرد. کد اصلی متعلق به AT&T بود ولی بعدا کارهای بسیاری در دانشگاه برکلی روی آن انجام شده بود. هیات مدیره دانشگاه مدعی بود که دانشگاه حق توزیع یا فروش ارزان نسخه یونیکس خودش را دارد. آنها نشان دادند که آن قدر کد را تغییر دادهاند که عملا دیگر ردپاهای بسیار اندکی از کد اولیه در آن باقی مانده است و بسیاری از قسمتها بازنویسی شدهاند. این پرونده حقوقی بعد از اینکه شرکت ناول سیستمعامل یونیکس را از AT&T خرید، با توافق بسته شده. البته به این شرط که بخشهایی از کد که AT&T به شکل عمومی منتشر کرده بود، از برنامه فعلی حذف شود.
در این حین، این دعواهای حقوقی دستاویزی شد برای یک بچه جدید تا با استفاده از فرصت رشد کند و پراکنده شود. عملا، این مهلتی برای لینوکس بود تا بازار را تصاحب کند. البته دارم از خودم جلو میافتم.
حالا که از موضوع پرت شدیم، میخواهم یک نکته دیگر را هم توضیح دهم. یونیکس مشهور است به اینکه آدمهای عجیب و غریب و حاشیهای دنیای کامپیوتر را به خودش جذب میکند. علیه این شهرت نمیشود حرف زد چون درست است.
صادقانه باید بگویم که کلی آدم دیوانه در دنیای یونیکس هستند. نه دیوانههای زنجیری. نه از آن دیوانهها که سگ همسایهشان را مسموم میکنند. منظورم آدمهایی با شیوه زیست بسیار متفاوت است.
به یاد بیاورید که فعالترین سالهای یونیکس، دهههای ۱۹۶۰ و اوایل ۱۹۷۰ بود. دورهای که من در سبد لباسهای چرک آپارتمان مادربزرگم خواب بودم. اینها آدمهایی بودند که از گل نیرو میگرفتند -البته آدمهای فنی. بخش عمده فلسفه یونیکس که-باید-آزاد-باشد، مربوط به شرایط آن دوره است و نه نظریات سیستمعامل. آن دوره، دوره ایدهآل گرایی عمومی بود. انقلاب؛ آزادی از قدرت؛ عشق آزاد -که من از دست دادمش، هرچند که اگر هم دربارهاش میدانستم، نمیدانستم باید با آن چهکار کنم. باز بودن نسبی یونیکس، هرچقدر هم که به نبود انگیزههای مالی مربوط شود، باعث شده بود تا این سیستمعامل برای آن مردم جذاب شود.
اولین باری که من با این جنبه از یونیکس آشنا شدم، احتمالا حوالی ۱۹۹۱ و به همت لارس ویرزنیوس بود که من را با خودش به یک همایش در دانشگاه پلیتکنیک هلسینکی برد -که همانطور که همه میدانند، نه در هلسینکی که در کنار مرز اسپو قرار دارد. آنها میخواستند ولو اگر شده فقط با اسم، به هلسینکی مشهور متصل باشند. سخنران ریچارد استالمن بود.
ریچارد استالمن خدای نرمافزار آزاد است. او در ۱۹۸۴ شروع به کار روی یک جایگزین و مشابه یونیکس کرد و آن را سیستم گنو (GNU) نامید. گنو خلاصه گنو یونیکس نیست و یکی از چندین خلاصه بازگشتیای است که یکی از حرفهایش، به خودش باز میگردد. این نوعی شوخی کامپیوتری است که غیرکامپیوتریها از آن سر در نمیآورند. بودن با ما گیکها خیلی مفرح است.
از این مهمتر، آر.ام.اس. (او ترجیح میدهد این طور صدایش بزنند)، نویسنده بیانیه نرمافزار آزاد و همچنین لیسانس کپیرایت نرمافزار آزاد یا همان General Public License است که به طور خلاصه GPL خوانده میشود. عملا او پیشرو مفهوم نرمافزار آزاد به عنوان یک امر تصمیمگیری شده و نه اتفاقی است. قبل از او، یونیکس اصلی بنا به یکسری حوادث به شکل آزاد در اختیار دیگران قرار گرفته بود.
باید اعتراف کنم که من چندان نسبت به موضوعات پیچیدهای که برای آر.ام.اس. آن قدر اهمیت داشتند و دارند آگاه نیستم. حتی باید بگویم که درباره بنیاد نرمافزار آزاد که او تاسیس کرده بود و از آن دفاع میکرد هم اطلاعات کمی داشتم. با در نظر گرفتن این واقعیت که چیز چندانی از سخنرانی سال ۱۹۹۱ به یاد نمیآورم، باید بگویم که احتمالا در آن دوره تاثیر زیادی در زندگی من نداشته است. من به فناوری علاقه داشتم، نه به سیاست -در بچگی به اندازه کافی سیاست دیده بودم؛ اما لارس یک ایدهآل گرا بود و تا آخر جلسه ماند و گوش کرد.
برای اولین بار در ریچارد تیپ ایدهآل یک هکر ریشو با موی بلند را دیدم. این تیپ از هکرها در هلسینکی زیاد پیدا نمیشود.
درست که من نور هدایت را در آن سخنرانی ندیدم، ولی یک چیزی باید درونم تکان خورده باشد چون بعدها برای لینوکس از لیسانس جی.پی.ال. استفاده کردم. بازهم دارم از خودم جلو میافتم.