داستان توسعه یونیکس؛ سیستمعاملی که بیسروصدا بر دنیا پادشاهی میکند
نوآوریهای معماری و فلسفه طراحی
هسته یونیکس مفاهیم نوینی در مدیریت فرایندها معرفی کرد، از جمله فراخوان سیستمی ()fork که با تکثیر فرایندهای موجود، ایجاد فرایندهای جدید را ساده میکرد؛ اما همچنان فرایندها از هم مستقل بودند و ارسال و دریافت داده بین آنها با مشکل صورت میگرفت.
در سال ۱۹۷۳ داگ مکایلروی (Doug McIlroy)، ریاضیدان و از پیشگامان توسعهی یونیکس، از روشهای ناکارآمد انتقال داده بین برنامهها ناراضی بود. در آن زمان، توسعهدهندگان مجبور بودند خروجی یک برنامه را در فایلهای موقت ذخیره کنند تا برنامهی بعدی آن را بخواند. این روش نهتنها کند بود، بلکه دایرکتوریها را شلوغ میکرد و پردازش بلادرنگ را غیرممکن میساخت.
ایدهی «پایپ» از مکایلروی، بخشی از نماد فلسفهی ماژولاریتی یونیکس شد
مکایلروی با الهام از خطوط مونتاژ صنعتی، مفهوم پایپ را پیشنهاد کرد. در این طرح، خروجی یک برنامه مستقیماً بهعنوان ورودی برنامهی بعدی و بدون نیاز به ذخیرهسازی موقت، جریان مییافت. کن تامپسون، از خالقان یونیکس، ابتدا این ایده را رد کرد، اما درنهایت اصرار مکایلروی نتیجه داد. طی یک جلسهی برنامهنویسی شبانه در ۱۹۷۳، تامپسون پیادهسازی ایده را در هستهی یونیکس کامل کرد و عملگر نمادین «|» را به شل افزود. مکایلروی بعدها با طنز گفت:
باید برنامه را مانند قطعات شلنگ به هم وصل کنیم. یعنی هرگاه لازم شد دادهها را به شکلی جدید پردازش کنیم، قطعهای جدید اضافه میکنیم.
– داگ مکایلروی، ریاضیدان و از پیشگامان توسعهی یونیکس
قابلیت پایپ، ابزارها را قادر میساخت تا رشتههای متنی را بین یکدیگر منتقل کنند. همچنین، سیستم یونیکس دسترسی یکپارچهای به دستگاهها و دادهها ارائه میداد و پیچیدگیهای سختافزاری را پشت یک لایهی انتزاعی پنهان میکرد. این طراحی نهتنها کارایی سیستم را افزایش داد، بلکه الهامبخش نسلهای بعدی سیستمعاملها شد و مفاهیمی مانند «ابزارهای کوچک با وظایف مشخص» را به یکی از ستونهای مهندسی نرمافزار تبدیل کرد.
تولد «دیمِن» یونیکس: میراث یک اشتباه تایپی
یکی از پایدارترین مفاهیم فنی یونیکس، دیمِن (Daemon) است که به فرایندهای پسزمینهای مدیریت وظایف سیستم اشاره دارد. این نامگذاری همچنین ریشه در یک اشتباه تایپی طنزآمیز و شوخی داخلی مهندسان آزمایشگاههای بل دارد.
سالها پیش از تولد یونیکس، سیستم اشتراک زمانی MIT موسوم به CTSS، ایدهی برنامههای «شیطانی» (Demon) را برای انجام خودکار وظایف معرفی کرد؛ اما این اصطلاح در دوران توسعهی یونیکس در آزمایشگاههای بل جان تازهای گرفت.
در سال ۱۹۷۱، تام لیون، برنامهنویس آزمایشگاههای بل، برای مدیریت خودکار ارسال ایمیل در آرپانت (پیشگام اینترنت)، نیاز به یک فرایند پسزمینهای داشت که بدون نیاز به کاربر، پیامها را ارسال کند. او بر اساس آزمایش فکری جیمز کلارک ماکسول (فیزیکدانی که دربارهی «شیطانی» فرضی صحبت میکرد که مولکولها را مرتب میکند) این فرایند را با طنز، «دیمِن» نامید.
عکاس: Foglio Magnet
اما پذیرش اصطلاح دیمِن در فرهنگ یونیکس مدیون یک اشتباه تایپی بود. هنگام نوشتن گزارشها، یکی از مسئولان آزمایشگاه به اشتباه «Demon» را «Daemon» تایپ کرد. این اشتباه ماندگار شد و تیم توسعهی آن را بهعنوان سرواژهی «Disk And Execution MONitor» (به معنی «نظارتگر دیسک و اجرا») تعریف کردند!
دیمِنها به بخشی جداییناپذیر از معماری یونیکس تبدیل شدند و وظایفی مانند چاپ (lpd)، زمانبندی (cron) و خدمات شبکه (inetd) را مدیریت میکردند. این فرایندها در پسزمینه و مستقل از ترمینال کاربرها اجرا میشدند.
این مفهوم، بخش دیگری از تجسم فلسفهی ماژولاریتی یونیکس بود: ابزارهای تخصصی و کوچکی که هماهنگ باهم کار میکنند. امروزه اصطلاح اشتباه یادشدهی Daemon در تمام سیستمعاملها حضور دارد و یادگاری بر فرهنگ همکاری و بداههپردازی پیشگامان سیستمعامل است.
یونیکس چگونه همگانی شد؟
در اولین قدم و برای معرفی به علاقهمندان، در نوامبر ۱۹۷۱، نخستین نسخهی یونیکس همراه با کتاب راهنمای برنامهنویسان یونیکس منتشر شد. در آن دوران، انتشار مستندات فنی همراه محصولات، رویکردی استاندارد بود تا محققان بتوانند با مطالعهی جزئیات، به درک عمیقی از سیستم برسند.
در نوامبر ۱۹۷۳ (آبان ۱۳۵۲)، تامپسون و ریچی، یونیکس را در کنفرانس اصول سیستمعاملها در دانشگاه پردو آمریکا رسماً به علاقهمندان معرفی کردند. در این رویداد، دانشجویان، استادان، محققان و نمایندگان شرکتهای فناوری حضور داشتند. یکی از حضار تأثیرگذار، پروفسور باب فابری از دانشگاه کالیفرنیا برکلی بود که مسیر توسعهی یونیکس را با انتقال آن به برکلی تغییر داد.
امروز میراث یونیکس در سیستمعاملهایی مانند لینوکس و BSD زنده است
پس از این کنفرانس، یونیکس به نمادی از پیشرفت محاسبات تبدیل شد. رسانهها دربارهی این سیستم انقلابی گزارش دادند و دسترسی به آن با اعطای مجوز به دولت، ارتش و دانشگاهها آغاز شد. این اتفاق، پایههای گسترش یونیکس بهعنوان یک سیستمعامل چندمنظوره و ایدهمحور را تقویت کرد.
پروفسور باب فابری نسخهای از یونیکس را با تنها ۹۹ دلار برای کاهش هزینههای راهاندازی منابع رایانهای دانشگاه خریداری کرد. در آن زمان، مجوز یونیکس شامل تمام کدهای منبع نیز میشد و محققان اجازه داشتند آن را تغییر داده یا گسترش دهند. بیل جُوی، دانشجوی کارشناسی ارشد، به همراه گروهی از محققان و هکرهای برکلی، شروع به اصلاح و توسعهی نسخهی اصلی یونیکس کردند.
شهرت این نسخهی اصلاحشده به سرعت افزایش یافت و یونیکس برکلی در میان پژوهشگران، مؤسسات آموزشی و دانشگاهها، محبوبیت فراوانی پیدا کرد. در اوایل ۱۹۷۷، جُوی این نسخه را تحت نام BSD (توزیع نرمافزار برکلی) منتشر کرد، درحالیکه AT&T همچنان به توسعهی یونیکس با نامهای «سیستم III» و بعدها «سیستم V» ادامه میداد. تا سال ۱۹۸۰، آزمایشگاههای بل چندین نسخه از یونیکس را برای استفادهی داخلی و سازگاری با سختافزارهای مختلف توسعه دادند.
یونیکس هم بهوسیلهی شرکتهای معتبر و هم زیر نظر دانشگاهها توسعه مییافت
در این دوره، دو مسیر موازی برای توسعهی یونیکس شکل گرفت: یکی تحت مدیریت AT&T و دیگری جامعهی آکادمیک به رهبری گروه تحقیقات سیستمهای رایانهای (CSRG) در دانشگاه برکلی کالیفرنیا.
جنگهای یونیکس
از اواخر دههی ۱۹۸۰ تا اوایل ۱۹۹۰، رقابت بین دو شاخهی اصلی یونیکس، سیستم V و BSD، به اوج خود رسید. با گذشت سالها، هر دو نسخه ویژگیهای کلیدی یکدیگر را اقتباس کردند. از نظر تجاری، سیستم V از این نبرد پیروز بیرون آمد و اکثر رابطهای آن به استانداردهای رسمی تبدیل شد. این امر باعث شد شرکتهای سختافزاری به سمت سیستم V جذب شوند.
در دههی ۱۹۸۰، شرکتهای متعددی با اقتباس از یونیکس، سیستمعاملهای اختصاصی خود را توسعه دادند. آنها با دریافت مجوز از آزمایشگاههای بل یا توزیع برکلی، یونیکس را برای سختافزارهای خود سازگار میکردند. نتیجهی این تلاشها، ظهور سیستمعاملهایی مانند FreeBSD، NetBSD، Sun Solaris، زنیکس، IBM-AIX و HP-UX بود.