سیستمعامل یونیکس که در سال ۱۹۶۹ در راهروهای آزمایشگاههای بلِ AT&T متولد شد، نه محصول دستور شرکتی، بلکه زادهی کنجکاوی دو مهندس با نامهای کن تامپسون و دنیس ریچی بود.
آنچه با هدف نجات پروژهی شکستخوردهی مالتیکس آغاز شد، به معماری انقلابیای بدل شد که تعامل نرمافزار با سختافزار، درک توسعهدهندگان از پیچیدگی و مقیاسپذیری سیستمها را بازتعریف کرد. طی پنج دهه، مسیر یونیکس آینهای از تحولات دنیای کامپیوتر شد: از انشعاب به نسخههای انحصاری تا الهامبخشی به انقلاب متنباز و نفوذ ژرف به لایههای دنیای دیجیتال.
موفقیت و نبوغ یونیکس در اصول بنیادینش تعریف میشود: سادگی و ماژولار بودن. این مفاهیم که در دههی ۱۹۷۰ با نوآوریهایی مانند سلسلهمراتب فایلها، «پایپ» (Pipe) و زبان برنامهنویسی C تبلور یافتند، به یونیکس اجازه دادند از محدودهی PDP-7 فراتر رود. ریچی و تامپسون با جداسازی سیستمعامل از سختافزار از طریق کدهای قابل حمل، ناخواسته پایههای اکوسیستمهای ناهمگون و شبکهای رایانش قرن ۲۱ را بنا نهادند.
این مقاله سفر یونیکس از آغاز تا حضوری خاموش اما فراگیر در دنیای تکنولوژی را دنبال میکند؛ روایتی از سیستمعاملی که برای اجرای بازی «سفری فضایی» توسعه یافت و بعد به الگویی برای نرمافزارهای مقیاسپذیر، امن و سازگار تبدیل شد. برای توسعهدهندگان، مورخان و فناوران، داستان یونیکس گواهی است بر قدرت ماندگار ایدههایی که در محدودیت شکل میگیرند.
فهرست مطالب
یونیکس چیست؟
یونیکس یک سیستمعامل مبناست. تقریباً پایه تمامی سیستمهای عامل یا داس است یا یونیکس. سادهترین تفاوت این دو سلسله، کاربرد به ترتیب \ و / برای انتساب یک زیرشاخه است، که باعث خطای زمان اجرا در اجرای برنامهها و اپهای نوشته شده در سکوهای لینوکس و مک در ویندوز و بالعکس میشود.
انواع سیستمهای عامل بر پایه یونیکس
یونیکسهای رسمی عبارتند از:
- BSD از دانشگاه کالیفرنیا، برکلی
- AIX از آیبیام
- SunOS/سولاریس از سان مایکروسیستمز
- زنیکس از مایکروسافت
یونیکسهای غیررسمی با آن که با استانداردهای یونیکس سازگارند، اما توسعه دهندگان یونیکس تأییدشان نکردند و حق استفاده از نام Unix را ندارند. اینها عبارتند از:
- مینیکس
- فریبیاسدی
- نتبیاسدی
- اپنبیاسدی
- دراگونفلیبیاسدی
مشخصات
یونیکس یک سیستمعامل چند کاربره با قابلیت چندکارگی است.
اصطلاح یونیکس سنتی ممکن است برای توصیف سیستمعاملهایی که مشخصات و ویژگیهای نسخه ۷ یونیکس یا نسخه ۵ یونیکس را دارند، استفاده شود. هنگامی که کن تامسون هنوز به مولتیکس دسترسی داشت، شبیهسازهایی برای سیستم صفحهبندی و فایل سیستم نوشت. او همچنین یک بازی رایانهای به نام سفر فضایی نوشت، اما این بازی برای اجرا شدن به یک ماشین کارامدتر و ارزانتر احتیاج داشت و سرانجام او یک پیدیپی-۷ کماستفاده در آزمایشگاههای بل پیدا کرد. در سال ۱۹۶۹ تیمی به رهبری تامسون و ریچی، بر روی این ماشین پیدیپی-۷ یک سیستم فایل سلسله مراتبی، مفاهیم فرایند و فایل دستگاه، یک مفسر خط فرمان و تعدادی برنامه کوچک دیگر نوشتند.
سیستمهای یونیکس امروزی به شاخههای مختلفی تبدیل شدهاست که در مرور زمان به دست شرکت مخابرات آمریکا توسعه داده شدهاند. یونیکس طوری طراحی شدهاست تا قابل انتقال به هر سیستم چندکاره و چندکاربره باشد. سیستمهای یونیکس با ایدههای جدیدی که مطرح کردهاند، شناخته میشوند: پروندههای متنی ساده، مفسر خط فرمان و فایل سیستم سلسله مراتبی و غیره. در مهندسی نرمافزار، از یونیکس به خاطر زبان برنامهنویسی سی و فلسفه یونیکس یاد میشود.
سیستم عاملهای شبهیونیکس
از این زمان شمار فراوانی از شرکتهای بازرگانی نیز از یونیکس برای کارهای بازرگانی خود بهره میجویند و نسخههای بازرگانی یونیکس هم به بازار میآیند که از این گروه میتوان پخشهای زیر را نام برد.
- زنیکس از مایکروسافت
- ایآیاکس از آی بی ام
- اچ پی-یواکس از اچپی
- ULTRIX by Digital
- سان او اس از سان مایکروسیستمز
گذشته از سیستم عاملهایی که مؤسسهٔ اپن گروپ، آنها را کاملاً سازگار با مشخصات یونیکس یکتا دانسته، سیستم عاملهای فراوانی عرضه شدهاند که اگرچه استانداردهای لازم را فراهم آوردهاند اما با نام شبه یونیکس آوازه دارند. ویرایشهای پرشمار سیستم عامل متن باز لینوکس از این دستهاند. همچنین سیستم عامل نکستستپ (NextStep) که بر مبنای بیاسدی دانشگاه برکلی پدید آمد، خود پایهٔ سیستم عامل مک اُ. اس (Mac OS X) شرکت اپل شد. اپل آی.اُ. اس (iOS) را نیز بر پایهٔ مک اُ. اس گسترش داد. بسیاری از سیستمعاملهای دیگر مانند اُربیت (Orbis) که بر روی پلی استیشن چهار ارائه میشود نیز بر مبنای یکی از انواع سیستم عامل بیاسدی گسترش یافتهاند.
تولد یونیکس در آزمایشگاههای بل
در سال ۱۹۶۰، آزمایشگاههای بلِ AT&T، مؤسسه فناوری ماساچوست (MIT) و جنرالالکتریک (GE) پروژهای بلندپروازانه را برای توسعهی یک سیستمعامل اشتراک زمانی به نام مالتیکس (مخفف Multiplexed Information and Computing Service بهمعنی «خدمات محاسباتی و اطلاعاتی چندبخشی») آغاز کردند.
هدف بلندپروازانهی مالتیکس، ایجاد سیستمعاملی بود که بتواند بهطور همزمان به چندین کاربر اجازه دهد از طریق ترمینالها به اشتراک منابع یک رایانهی بزرگ (مینفریم) بپردازند؛ ایدهای انقلابی که پایههای محاسبات مدرن چندکاربره را بنا نهاد.
مالتیکس مفاهیم پیشرفتهای مانند فایلسیستم سلسلهمراتبی، حفاظت از حافظه و امنیت لایهبندیشده را معرفی کرد که بعدها به استانداردهای صنعت تبدیل شدند؛ اما پیچیدگی فزایندهی آن تا اوایل ۱۹۶۷ باعث نارضایتی جنرال الکتریک شد. این شرکت در اواخر ۱۹۶۷ از پروژه خارج شد و در ۱۹۷۰، کسبوکار رایانهای خود را به شرکت هانیول فروخت.
نسخهی نهایی مالتیکس در ۱۹۷۳ منتشر شد. اگرچه مالتیکس هرگز به موفقیت تجاری گستردهای دست نیافت، تا دههی ۱۹۹۰ در برخی مراکز دولتی و دانشگاهی مورد استفاده قرار گرفت و سرانجام در اکتبر ۲۰۰۰ بهطور رسمی بازنشسته شد. بنابراین، اگرچه نام مالتیکس امروز کمتر شنیده میشود، میراث آن در مفاهیم پایهای یونیکس، لینوکس و حتی سیستمعاملهای مدرنی مانند اندروید و macOS زنده است.
ریچی و تامپسون، برنامهنویسان بخش تحقیقاتی آزمایشگاههای بل، از آغاز تا پایان روی مالتیکس کار میکردند. شکست نسبی این پروژه، الهامبخش این دو برنامهنویس شد تا با درس گرفتن از پیچیدگیهای مالتیکس، سیستمعامل سادهتر و ماژولاری به نام یونیکس را خلق کنند.
پیشینه
توسعه یونیکس در سال ۱۹۶۹ به دست گروهی از کارمندان آزمایشگاههای بل متعلق به شرکت مخابرات آمریکا آغاز شد. اعضای این گروه کن تامسون، دنیس ریچی، برایان کرنیگان، داگلاس مکیلروی، مایکل لسک و جو اوسانا بودند. یونیکس در آغاز به زبان اسمبلی نوشته شد اما در سال ۱۹۷۳ بهطور کلی به زبان سی بازنویسی شد، که این کار توسعه یونیکس و پورت کردن آن به دیگر platform (سکو)ها را سادهتر میکرد. یونیکس در ابتدا برای استفاده در بل سیستم در نظر گرفته شد ولی از اواخر دهه ۷۰ شرکت مخابرات آمریکا مجوز یونیکس را به طرفهای بیرونی مختلفی داد که منجر به گونههای آکادمیک و تجاری از یونیکس شد، مانند BSD از دانشگاه کالیفرنیا، برکلی، AIX از آیبیام، SunOS/سولاریس از سان مایکروسیستمز و زنیکس از مایکروسافت. شرکت تلفن و تلگراف آمریکا در ابتدای دهه ۹۰ حقوق خود در یونیکس را به شرکت نوول فروخت که نوول هم تجارت یونیکس را به شرکت سانتا کروز اوپریشن در سال ۱۹۹۵ فروخت؛ ولی نشان تجاری یونیکس در اختیار اوپن گروپ که یک کنسرسیوم استانداردهای تجاری است قرار گرفت و این گروه این نشان را به نام خود ثبت کردهاست. تنها سیستمهایی که به صورت کامل با مشخصات یونیکس یکتا سازگار باشند و مبلغی پول به کنسرسیوم اوپن گروپ بپردازند، واجد شرایط استفاده از نام یونیکس هستند. دیگر سیستمها میتوانند شبه یونیکس نامیده شوند، هرچند که مؤسسه اوپن گروپ این نام را رد کردهاست.
در اواخر دهه ۱۹۷۰ و اوایل دهه ۱۹۸۰، نفوذ یونیکس در محافل دانشگاهی (بهویژه ویرایش BSD که از دانشگاه برکلی سرچشمه گرفتهاست) باعث پذیرش گسترده یونیکس توسط شرکتهای مختلف شد و نسخههای تجاری مختلفی از یونیکس پدید آمد، همانند SunOS, اچپی-یواکس، AIX.
اگر گفته شود یونیکس آغازگر «دوره اطلاعات» و در امتداد آن «عصر اینترنت» است، سخنی گزاف نیست. در واقع تا همین امروز هم، تقریباً ۱۰۰٪ پروتکلهای مهم و باز که جنبش اینترنت را پدیدآوردهاند، مانند وب، از خانوادهٔ یونیکس آمده و میآیند. اینترنت در آغاز در یونیکس گسترش یافت و تا سالها، واژهٔ «اینترنت» در میان کاربران یونیکس واژهای کاملاً عادی و روزمره بود، درحالی که دیگران حتی این واژه را نشنیده بودند یا با اکراه تمام به آن بیاعتنایی و حتی آن را مسخره میکردند.
از آغاز تا عرضه
داستان از سال ۱۹۶۰ آغاز میشود. در این زمان فکر سامانههای اشتراک زمان مطرح بود و نخستین سیستمعامل چند کاربره طراحی شد که به عنوان کارگزار(Server) میتوانست با نصب شدن بر روی یک رایانه به چند رایانه دیگر سرویس دهد. این سیستمعامل که CTSS نام داشت و میتوانست ۲۰ کاربر را با یک رایانه IBM ۷۰۹۰ به خوبی اداره کند به شدت مورد توجه و مفید واقع شد و همه دریافتند که بخش عظیمی از رایانههای آینده از این فناوری بهره خواهند گرفت. بهطوریکه در سال ۱۹۶۵ سه شرکت از برجستهترین نقش آفرینان رایانه در جهان، مؤسسه فناوری ماساچوست، آزمایشگاههای بل و جنرال الکتریک، یک سیستمعامل اشتراک زمان آزمایشی برای مینفریم جیای-۶۴۵ طراحی کردند که مولتیکس نامیده میشد.
مولتیکس نوآوریهای بسیاری را پیش روی نهاد، اما در عوض مشکلات فراوانی هم داشت. این سیستم اجزای زیادی داشت و از حد معین بزرگتر شد. آزمایشگاههای بل که از پیچیدگی زیاد مولتیکس ناامید شده بود، به آهستگی از پروژه کناره گرفت. آخرین محققان آنها، کن تامسون، دنیس ریچی، داگلاس مکیلروی و جو اوسانا تصمیم گرفتند کار را از آغاز اما در مقیاسی کوچکتر از سر بگیرند. ریچی گفت «چیزی که ما میخواستیم، تنها یک محیط خوب برای برنامهنویسی نبود، بلکه سامانهای بود که بتوان گرد آن دوستی را شکل داد.»
در ۱۹۷۰، پیتر نیومن نام Unics را برای پروژه ابداع کرد. این نام در حقیقت یک جور بازی با نام مولتیکس (Multics) بود. دنیس ریچی، کن تامسون و برایان کرنیگان، یونیکس (Unics) را بر اساس مولتیکس در آزمایشگاه بل پدیدآوردند. بعدها که Unics توانست همزمان به چند کاربر سرویس دهد، به Unix آوازه یافت.
تا آن زمان، هیچ حمایت مالی از طرف آزمایشگاههای بل وجود نداشت. وقتی که گروه تحقیقات علوم رایانه میخواست از یونیکس بر روی یک رایانه بزرگتر از پیدیپی-۷ استفاده کند، تامسون و ریچی قول دادند که برای ماشین پیدیپی۱۱/۲۰، قابلیتهای پردازش متن را به یونیکس اضافه کنند. این کار باعث حمایت مالی آزمایشگاه بل شد. برای اولین بار در سال ۱۹۷۰، سیستمعامل یونیکس رسماً نامگذاری و بر روی یک پیدیپی۱۱/۲۰ اجرا شد. یک برنامه قالببندی متن به نام roff و یک ویرایشگر متن هم اضافه شدند. تمام این سه جزء (یونیکس، roff و ویرایشگر متن) به زبان اسمبلی ماشین پیدیپی۱۱/۲۰ نوشته شده بودند. آزمایشگاههای بل از این سیستمِ پردازش متن اولیه که از یونیکس، roff و ویرایشگر تشکیل شده بود، برای پردازش متن برنامههای پتنت شدهاستفاده کرد. roff به زودی به troff، اولین برنامه چاپ و نشر الکترونیکی با قابلیت کامل حروفچینی تبدیل شد. کتاب راهنمای برنامهنویسان یونیکس هم در سوم نوامبر ۱۹۷۱ چاپ شد.
از آن جا که شرکت مخابرات آمریکا، یکی از شرکتهای دست اندرکار، از پروژه کنار گرفته بود، بنا بر قوانین آمریکا نمیتوانست از یونیکس استفادهٔ بازرگانی کند؛ به این ترتیب یونیکس رایگان به بازار عرضه شد. شرکت مخابرات آمریکا نیز یونیکس را برای دانشگاههای مختلف فرستاد و یونیکس کمکم در محافل علمی محبوب شد.
بازنویسی به زبان سی
در ۱۹۷۲، یونیکس به زبان سی بازنوشته شد. این برخلاف پندار همگانی آن زمان بود که میگفت «هر چیز پیچیدهای مثل یک سیستمعامل که باید با رویدادهای حساس به زمان سروکار داشته باشد، باید منحصراً به زبان اسمبلی نوشته شود.» نتیجه مهاجرت از زبان اسمبلی به زبان سطح بالاتر سی این بود که کد یونیکس پرتابلتر و قابل حملتر شد و برای اجرا بر روی ماشینهای دیگر تنها کافی بود قسمتهای کوچکی از آن به زبان اسمبلی مخصوص همان ماشین نوشته شوند.
شرکت مخابرات آمریکا کد منبع یونیکس را تحت مجوزهایی در دسترس دانشگاهها، شرکتهای تجاری و دولت ایالات متحده قرار داد. مجوزها در همه جای کد منبع قرار داده شده بودند، حتی کدهای وابسته به ماشین در داخل هسته سیستمعامل، که به زبان اسمبلی پیدیپی-۱۱ نوشته شده بودند. در اواخر دهه ۱۹۷۰، کدهای منبع یونیکس در کتابی به نام «نسخه ۶ یونیکس به روایت لیونز، به همراه کد منبع» که توسط جان لینوز نوشته شده بود، به صورت گسترده منتشر شد. این کار باعث شد یونیکس به شکل قابل توجهی برای مقاصد آموزشی استفاده گردد.
ویرایشهای گوناگون
نسخههای سیستمعامل یونیکس، توسط ویرایشهای کتاب راهنمای کاربرانش مشخص میشدند. برای مثال «پنجمین ویرایش یونیکس» و «نسخه ۵ یونیکس» هر دو برای اشاره به یک نسخه استفاده میشدند. توسعه یونیکس با انتشار نسخههای ۴، ۵ و ۶ که در سال ۱۹۷۵ ادامه یافت. در این نسخهها مفهوم تازهٔ لولهها اضافه شده بود که به طراحی ماژولار یونیکس و چرخه توسعه سریعتر آن کمک کرد. نسخهٔ ۵ و به ویژه نسخهٔ ۶، به پیدایش نسخههای مختلفی از یونیکس، چه در داخل آزمایشگاههای بل و چه در خارج از آن انجامید. مانند پیدبلیوبی/یونیکس و همچنین اولین نسخه تجاری یونیکس یعنی آیاس/۱. همانطور که قسمتهای بیشتری از یونیکس به زبان سی بازنویسی میشد، پرتابل بودن آن هم افزایش مییافت و آسانتر میشد آن را به دیگر سکوها انتقال داد. یونیکس توسط گروهی در دانشگاه ولونگوگ به اینتردیتا ۷/۳۲ پورت شد. آزمایشگاههای بل هم چند نسخه مختلف برای اهداف تحقیقاتی و استفاده داخلی در همانجا توسعه داد.
در سال ۱۹۷۴ دانشجویان دانشگاه برکلی آغاز به برنامهنویسی برای یونیکس میکردند و آن را برای دانشگاههای دیگر و ایتیاندتی فرستادند وبا ادامهٔ این کار یونیکس در سال ۱۹۷۷ به یک سیستمعامل کامل تبدیل میشود. در می ۱۹۷۵، دارپا مزایای سیستم اشتراک زمانی یونیکس که «چند قابلیت جالب ارائه کرده بود» را در RFC 681 مستند کرد. در ۱۹۷۸، یونیکس/۳۲وی برای ویایاکس، سیستم جدید DEC عرضه شد. در آن هنگام، یونیکس به اَشکال مختلفی بر روی ۶۰۰ ماشین اجرا میشد. آخرین نسخه تحقیقاتی از یونیکس، یعنی نسخه ۷ یونیکس، در سال ۱۹۷۹ منشتر شد. نسخههای ۸، ۹ و ۱۰ هم در دهه ۱۹۸۰ نوشته شدند اما فقط در بین چند دانشگاه منتشر شدند. دانشگاههای دیگر نیز مانند امآیتی، Purdue، استنفورد و… کارهای بسیاری برای یونیکس کردند. با نوشتن برنامههای اینترنتی برای یونیکس در سال ۱۹۸۰ به وسیلهٔ دانشگاه برکلی یونیکس در سازمانهای دولتی و شرکتهای شبکه و کارگزارها(Servers) به گستردگی به کار گرفته شد.
سفر فضایی: بازیای که یونیکس را شکل داد
در سال ۱۹۶۹، تامپسون که از متوقف شدن پروژهی مالتیکس ناراضی بود، برای پر کردن اوقات فراغتش، بازی سفر فضایی را ساخت که یک شبیهساز فضایی بود و به کاربر اجازه میداد فضاپیمایی را در مدلی کوچک از منظومهی شمسی هدایت کند. این بازی که روی مینفریم جنرالالکتریک توسعه یافته بود، نیروی گرانش و مکانیک مداری را بهصورت بلادرنگ محاسبه میکرد؛ اما با خاتمهی پروژهی مالتیکس، تامپسون دسترسی به سختافزار را از دست داد.
پیش از آنکه یونیکس به ستون دنیای کامپیوتر تبدیل شود، یک بازی ویدیویی تقریباً مسیر توسعهی آن را منحرف کرد
تامپسون که مصمم به نجات پروژهاش بود، بازی را به کامپیوتر قدیمی PDP-7 منتقل کرد؛ اما نبود سختافزار محاسبات اعشاری در PDP-7، او را مجبور کرد محاسبات فیزیک بازی را بهصورت نرمافزاری بازنویسی کند که فرایندی بسیار طاقتفرسا بود. برای سادهسازی توسعه، او یک سیستمعامل ابتدایی همراه با سیستم مدیریت فایل و مدیریت فرایند برای PDP-7 نوشت. در ابتدا، هدف تامپسون فقط زنده نگه داشتن بازیاش بود!
نسخهی اولیه این سیستمعامل، یونیکس (UNiplexed Information and Computing Service به اختصار UNICS و سپس UNIX) نامیده شد که اشارهای کوچک به پروژهی مالتیکس داشت. این سیستمعامل شامل یک سیستم فایل سلسلهمراتبی، مفسر خط فرمان (شِل) و ابزارهایی مانند ویرایشگر متن بود.
اگرچه یونیکس اولیه کاملاً به زبان اسمبلی و مختص معماری PDP-7 نوشته شده بود و قابلیت انتقال به سختافزارهای دیگر را نداشت، اصول طراحی آن نظیر سادگی، ترکیبپذیری ابزارها و فلسفهی «همهچیز یک فایل است»، پایههای آیندهی یونیکس را بنا نهاد.
سالها بعد تامپسون با شوخی گفت یونیکس «سیستمی برای اجرای بازی سفر فضایی بود»
تحول بزرگ زمانی رخ داد که آزمایشگاههای بل در سال ۱۹۷۰ یک کامپیوتر PDP-11 خریداری کرد و بازنویسی یونیکس آغاز شد. ریچی بین سالهای ۱۹۶۹ تا ۱۹۷۳ زبان برنامهنویسی C را بر پایهی زبان قدیمیتر B توسعه داد. زبان C دسترسی به سختافزار در سطح پایین و انتزاع سطح بالا (مانند ایدههای نزدیک به شیءگرایی نظیر struct) را ترکیب میکرد و امکان نوشتن کدهای قابل انتقال به سختافزارهای مختلف را فراهم کرد.
تا سال ۱۹۷۳، یونیکس کاملاً به زبان C بازنویسی و از وابستگی به کد اسمبلی سختافزار رها شد. در دستاوردی انقلابی در عصری که سیستمها عموماً انحصاری و وابسته به سختافزار بودند، این قابلیت، یونیکس را قادر ساخت تا بهراحتی با معماریهای جدید سازگار شود.
به این ترتیب، «سفر فضایی» غیرمستقیم به دو نقطهی عطف منجر شد: تولد نسخهی اولیهی یونیکس و ایجاد زبان C. این بازی همچنین اهمیت انتزاع سختافزاری را بهعنوان اصلی که یونیکس را در پلتفرمهای مختلف سازگار ساخت، برجسته کرد. سالها بعد، تامپسون با شوخی گفت که یونیکس «سیستمی برای اجرای سفر فضایی بود» و با فروتنی معمولش، جاهطلبی فنی پشت آن را پنهان کرد.
نوآوریهای معماری و فلسفه طراحی
هسته یونیکس مفاهیم نوینی در مدیریت فرایندها معرفی کرد، از جمله فراخوان سیستمی ()fork که با تکثیر فرایندهای موجود، ایجاد فرایندهای جدید را ساده میکرد؛ اما همچنان فرایندها از هم مستقل بودند و ارسال و دریافت داده بین آنها با مشکل صورت میگرفت.
در سال ۱۹۷۳ داگ مکایلروی (Doug McIlroy)، ریاضیدان و از پیشگامان توسعهی یونیکس، از روشهای ناکارآمد انتقال داده بین برنامهها ناراضی بود. در آن زمان، توسعهدهندگان مجبور بودند خروجی یک برنامه را در فایلهای موقت ذخیره کنند تا برنامهی بعدی آن را بخواند. این روش نهتنها کند بود، بلکه دایرکتوریها را شلوغ میکرد و پردازش بلادرنگ را غیرممکن میساخت.
ایدهی «پایپ» از مکایلروی، بخشی از نماد فلسفهی ماژولاریتی یونیکس شد
مکایلروی با الهام از خطوط مونتاژ صنعتی، مفهوم پایپ را پیشنهاد کرد. در این طرح، خروجی یک برنامه مستقیماً بهعنوان ورودی برنامهی بعدی و بدون نیاز به ذخیرهسازی موقت، جریان مییافت. کن تامپسون، از خالقان یونیکس، ابتدا این ایده را رد کرد، اما درنهایت اصرار مکایلروی نتیجه داد. طی یک جلسهی برنامهنویسی شبانه در ۱۹۷۳، تامپسون پیادهسازی ایده را در هستهی یونیکس کامل کرد و عملگر نمادین «|» را به شل افزود. مکایلروی بعدها با طنز گفت:
باید برنامه را مانند قطعات شلنگ به هم وصل کنیم. یعنی هرگاه لازم شد دادهها را به شکلی جدید پردازش کنیم، قطعهای جدید اضافه میکنیم.
– داگ مکایلروی، ریاضیدان و از پیشگامان توسعهی یونیکس
قابلیت پایپ، ابزارها را قادر میساخت تا رشتههای متنی را بین یکدیگر منتقل کنند. همچنین، سیستم یونیکس دسترسی یکپارچهای به دستگاهها و دادهها ارائه میداد و پیچیدگیهای سختافزاری را پشت یک لایهی انتزاعی پنهان میکرد. این طراحی نهتنها کارایی سیستم را افزایش داد، بلکه الهامبخش نسلهای بعدی سیستمعاملها شد و مفاهیمی مانند «ابزارهای کوچک با وظایف مشخص» را به یکی از ستونهای مهندسی نرمافزار تبدیل کرد.
تولد «دیمِن» یونیکس: میراث یک اشتباه تایپی
یکی از پایدارترین مفاهیم فنی یونیکس، دیمِن (Daemon) است که به فرایندهای پسزمینهای مدیریت وظایف سیستم اشاره دارد. این نامگذاری همچنین ریشه در یک اشتباه تایپی طنزآمیز و شوخی داخلی مهندسان آزمایشگاههای بل دارد.
سالها پیش از تولد یونیکس، سیستم اشتراک زمانی MIT موسوم به CTSS، ایدهی برنامههای «شیطانی» (Demon) را برای انجام خودکار وظایف معرفی کرد؛ اما این اصطلاح در دوران توسعهی یونیکس در آزمایشگاههای بل جان تازهای گرفت.
در سال ۱۹۷۱، تام لیون، برنامهنویس آزمایشگاههای بل، برای مدیریت خودکار ارسال ایمیل در آرپانت (پیشگام اینترنت)، نیاز به یک فرایند پسزمینهای داشت که بدون نیاز به کاربر، پیامها را ارسال کند. او بر اساس آزمایش فکری جیمز کلارک ماکسول (فیزیکدانی که دربارهی «شیطانی» فرضی صحبت میکرد که مولکولها را مرتب میکند) این فرایند را با طنز، «دیمِن» نامید.
اما پذیرش اصطلاح دیمِن در فرهنگ یونیکس مدیون یک اشتباه تایپی بود. هنگام نوشتن گزارشها، یکی از مسئولان آزمایشگاه به اشتباه «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 بود.
پیش از سلطهی ویندوز، آزمایشگاههای بل یک مجوز یونیکس را به مایکروسافت فروخت. مایکروسافت در سال ۱۹۸۰ این سیستم را با وجود مخالفتهای بخش بازاریابی، با نام زنیکس به تولیدکنندگان سختافزار (OEMها) عرضه کرد. در آن زمان، بازار OEMها عمدتاً شامل دستگاههای PDP بود.
مایکروسافت درنهایت زنیکس را به گروه SCO فروخت و این آغاز دعوای حقوقی بیپایان بین SCO و IBM بود. اگرچه مایکروسافت قصد داشت از تجارت یونیکس خارج شود، اما پیش از توسعهی DOS و ویندوز، در ساخت سری سیستمعاملهای IBM OS مشارکت کرد. این حرکت، مسیر تبدیل شدن ویندوز را به استاندارد همهگیر رایانههای شخصی، هموار ساخت.
در سال ۱۹۸۲، شرکت سان مایکروسیستمز، سیستمعامل SunOS را برای ایستگاههای کاری و سرورهای خود معرفی کرد. این سیستم که مبتنی بر BSD (از نسخهی ۱ تا ۵) بود، بعدها با ایدهبرداری از سیستم V، تحت نام سولاریس به بازار عرضه شد.
سولاریس بهعنوان نرمافزاری انحصاری شناخته میشد، تا اینکه در ژوئن ۲۰۰۵، سان مایکروسیستمز بخش عمدهی کدهای آن را تحت مجوز CDDL منتشر و پروژهی متنباز اوپنسولاریس را پایهگذاری کرد. هدف سان، ایجاد جامعهای از توسعهدهندگان حول این نرمافزار بود.
HP نیز در سال ۱۹۸۴ سیستمعامل HP-UX را بر پایهی سیستم V آزمایشگاههای بل معرفی کرد. این حرکت، گامی کلیدی در تثبیت جایگاه یونیکس بهعنوان پایهای برای سیستمعاملهای شرکتی بود و نشان داد که فلسفهی ماژولاریتی و انعطافپذیری یونیکس، چقدر میتواند الهامبخش نسلهای بعدی فناوری باشد.
یونیکس بهدلیل نبود قوانین مشخص برای کپیرایت نرمافزاری، موضوع درگیریهای حقوقی بسیاری شد
سال ۱۹۸۴، سالی پر رخداد برای یونیکس بود. AT&T که یونیکس را بهعنوان محصولی انحصاری میفروخت، وارد نبرد حقوقی با BSD شد. این دادگاه پنج سال طول کشید و در نهایت AT&T برنده شد. در این دوره، شرکتها برای جلوگیری از مشکلات قانونی، به سمت سیستم V گرایش پیدا کردند و محبوبیت BSD کاهش یافت.
در سال ۱۹۸۶، غول فناوری IBM نسخهای از یونیکس سیستم V با قابلیتهای سازگار با 4.3 BSD را از آزمایشگاههای بل خریداری کرد. این شرکت، سیستم را با سختافزارهای مبتنی بر معماری IBM سازگار کرد و آن را تحت نام IBM-AIX (Advanced Interactive eXecutive) به بازار عرضه کرد.
AIX در دههی ۹۰ میلادی و حتی پس از آن، به محبوبترین توزیع تجاری یونیکس تبدیل شد. این سیستمعامل ابتدا برای ایستگاههای کاری RISC مدل RT PC طراحی شد، اما امروز از طیف وسیعی از سکوهای سختافزاری مانند سری RS/6000، سیستمهای مبتنیبر POWER و PowerPC، سرورهای اپل و حتی رایانههای شخصی PS/2 پشتیبانی میکند.
آخرین نسخهی رسمی یونیکس از برکلی در سال ۱۹۹۵ همزمان با نام انتشار دوم BSD-Lite 4.4 منتشر شد و سرانجام، گروه CSRG منحل و توسعهی یونیکس در برکلی متوقف شد. از آن زمان، جامعهی متنباز مسئولیت نگهداری و توسعهی شاخههایی مانند FreeBSD، NetBSD و OpenBSD را برعهده گرفت که بهصورت مستقیم یا غیرمستقیم از 4.4 BSD-Lite الهام گرفتهاند.
تکامل یونیکس پس از ۱۹۹۵ و میراث آن در محاسبات مدرن
داستان یونیکس پس از سال ۱۹۹۵، روایتی از پراکندگی، سازگاری و تأثیر ماندگار است. درحالیکه ظهور لینوکس و نرمافزارهای متنباز، چهرهی سیستمعاملها را دگرگون کرد، یونیکس در محیطهای تخصصی سازمانی باقی ماند و الهامبخش پیشرفتهای بنیادین در فناوریهای مدرن شد.
یونیکس تجاری در اواخر قرن بیستم
تا اواسط دههی ۱۹۹۰، اکوسیستم یونیکس به شاخههای انحصاری مانند سولاریس سان مایکروسیستمز، IBM AIX و HP-UX تقسیم شده بود. این سیستمها بر پایداری، مقیاسپذیری و سازگاری با نرمافزارهای قدیمی تمرکز داشتند و برای پردازشهای حیاتی سازمانها طراحی شده بودند. برای مثال، سولاریس معرفیشده در سال ۲۰۰۵ قابلیت انقلابی ZFS (سیستم فایل زتابایت) را معرفی کرد که ترکیبی از سیستم فایل و مدیریت حجم منطقی برای تضمین یکپارچگی دادهها و مقیاسپذیری عظیم ذخیرهسازی بود.
بااینحال، این سیستمها با چالشهایی روبهرو شدند. وابستگی به سختافزارهای انحصاری و هزینههای بالای مجوزها، آنها را در مقایسه با جایگزینهای متنباز جدید، کُندتر کرد. در دههی ۲۰۰۰، ادغامهای بزرگی رخ داد: اوراکل در سال ۲۰۱۰ سان مایکروسیستمز را خریداری کرد و توسعهی سولاریس را با تمرکز بر زیرساخت ابری ادامه داد. HP-UX نیز که به پردازندههای ایتانیوم وابسته بود، با سلطهی معماری x86 اینتل بر مراکز داده، به حاشیه رانده شد.
صعود لینوکس
پرسش مهم اینجاست: با وجود سلطهی یونیکس در دو شاخهی تجاری (سیستم V) و آکادمیک (BSD)، لینوکس چگونه به صحنه آمد و به جایگاه پرطرفدار امروزی رسید؟
در سال ۱۹۸۳، ریچارد استالمن پروژهی گنو را با هدف ایجاد یک سیستمعامل شبهیونیکس و کاملاً رایگان آغاز کرد. تا اوایل ۱۹۹۰، ابزارهایی مانند کامپایلرها، ویرایشگرهای متن و پوستهی یونیکس آماده بودند، اما بخشهای پایهای مانند درایورهای سختافزاری تکمیل نشده بود. این خلأ با ظهور هستهی لینوکس در سال ۱۹۹۱ پر شد.
لینوکس در سال ۱۹۹۱ از سوی لینوس توروالدز، دانشجوی دانشگاه هلسینکی، معرفی شد. برخلاف یونیکس که برای سرورها طراحی شده بود، لینوکس ابتدا بر رایانههای شخصی متمرکز بود. توروالدز هستهی خود را با ابزارهای گنو ادغام کرد و سیستمعامل کامل گنو/لینوکس متولد شد.
هزینهی پایین راهاندازی و بینیازی به سختافزارهای خاص، باعث جذب محققان، دانشجویان و کسبوکارهای کوچک شد. با ورود شرکتهایی مانند ردهت و ارائه پشتیبانی تجاری، لینوکس بهتدریج جایگزین سیستمعاملهای انحصاری شبهیونیکس شد.
گذار از یونیکس به لینوکس بهصورت جدی از اواخر دههی ۱۹۹۰ آغاز شد. مدل متنباز لینوکس، هزینهی پایین و چرخهی سریع نوآوری، عوامل کلیدی این تحول بودند. هستهی لینوکس در ترکیب با ابزارهای گنو، معماری یونیکس را بازآفرینی کرد و در عین حال، ماژولاریتی و توسعهی جامعهمحور را به آن افزود.
شرکتهایی مانند IBM که پیشتر حامی پروپاقرص AIX بودند، سرمایهگذاری سنگینی روی لینوکس انجام دادند. رد هت، که در ۱۹۹۳ تأسیس شد، با ارائهی پشتیبانی تجاری و معرفی فناوریهایی مانند SELinux (لینوکس تقویتشدهی امنیتی) و systemd (سیستم مدیریت سرویسها)، نقش محوریای در آمادهسازی لینوکس برای محیطهای سازمانی ایفا کرد.
لینوکس اکنون بیشترین اشتراک را با یونیکس دارد. ابزارهایی مانند Emacs، Vi، پوستههای خط فرمان و کامپایلرها در هر دو سیستم یکسان هستند. فلسفهی ماژولار بودن، استفاده از فایلسیستم سلسلهمراتبی و تمرکز بر خط فرمان، میراثی است که یونیکس برای دنیای متنباز به جا گذاشت. این اصول نهتنها در لینوکس، بلکه در پروژههای مدرنی مانند اندروید و کروماواس نیز دیده میشود.