جرقهای برای بازآفرینی یونیکس
یک ریکارد استالمن در سپتامبر 1983 پروژه گنو را راه اندازی کرد تا سیستمعاملی کاملاً آزاد و مستقل از یونیکس بسازد. هدف بلندپروازانهای بود که در نهایت نیازمند یک هسته قدرتمند بود. تا اواخر دهه 80 میلادی، گنو ابزارهای حیاتی از جمله کامپایلرها، شلها و مجوز عمومی گنو (GPL) را به جامعه نرمافزاری تحویل داده بود، اما حلقه گمشده معماری هنوز پابرجا بود. در سال 1990، پروژهای به نام هارد (Hurd) وارد میدان شد تا دقیقاً همان نقش را ایفا کند. بیش از 30 سال از آن زمان میگذرد، اما هارد هرگز به نسخه پایدار تولیدی نرسید و در سایه صعود سریع لینوکس باقی ماند. با این حال، این پروژه شکست نبوده، بلکه یک آزمایشگاه معماری حیاتی برای دنیای سیستمعاملها محسوب میشود.
فلسفه نامگذاری و معماری سرویسمحور
نام هارد از همان روزهای نخست، رمزگشایی معماری بود. توماس بوشنل، معمار اصلی این پروژه، در سال 1991 توضیح داد که «هارد مخفف دیمنهای جایگزین یونیکس است و خودِ هیرد مخفف سطحهای رابطهای عمیق میباشد.» این بازی زبانی هوشمندانه، ایده اصلی پلتفرم را لو میداد: هستهای که وظایف سنگین را به سرویسهای مستقل در فضای کاربر واگذار میکند. لوگوی معروف آن نیز همین معماری را با گرههای بههمپیوسته و فلشهای ارتباطی بینفرآیندی (IPC) به تصویر میکشد.
مسیر پرپیچوخم از TRIX تا Mach
مسیر شکلگیری هارد هموار نبود. جرقه اولیه آن به پروژه TRIX در آزمایشگاه علوم کامپیوتر MIT برمیگشت که در اواخر دهه 80 میلادی ناتمام ماند. استالمن پس از آن تصمیم گرفت هسته میکروکرنل Mach دانشگاه کارنگی ملون را در دل گنو جای دهد، اما تا 3 سال دیگر از ابهامات مجوز کدهای دانشگاه گریبانگیر توسعهدهندگان بود. در همین برزخ، لینوتور تورد لینوس در سال 1991 نسخه اولیه هسته لینوکس را منتشر کرد. تغییر ناگهانی قطبنمای جامعه متنباز رخ داد. توسعهدهندگان گنو که منتظر هسته ایدهآل خود بودند، ناچار شدند ابزارهای خود را روی هسته لینوکس سوار کنند و اصطلاح مشهور «گنو/لینوکس» برای اولین بار زاده شد.
تئوری شیک در برابر واقعیت عملکردی
برخلاف هستههای سنتی یونیکس که تمام درایورها و سیستمفایلها را در فضا هسته یکپارچه میکنند، هارد به معماری میکروکرنل چندسرویسگرا اعتماد کرد. در این چارچوب، میکروکرنل GNU Mach فقط مسئول مدیریت پایهای سختافزارهاست: تخصیص پردازنده، مدیریت حافظه و زمانبندی ورودی-خروجی. تمام وظایف سنگینتر مثل مدیریت دیسک، پروتکلهای شبکه یا کنترل دسترسی، به دیمنهای مستقل در فضای کاربر سپرده میشود. ارتباط بین این سرویسها از طریق پیامرسانی بینفرآیندی (IPC) و پورتهای Mach انجام میشود.
یکی از ابتکارات کلیدی هارد، معماری مترجمها (Translators) است. این ماژولها اجازه میدهند توسعهدهندگان رفتار گرههای سیستمفایل را بدون دستکاری هسته تغییر دهند. به عنوان مثال، یک مترجم میتواند پوشهای محلی را به سرور FTP خارجی متصل کند یا ترافیک شبکه را بهصورت شفاف رمزگشایی نماید. این انعطافپذیری در تئوری بسیار جذاب بود، اما در عمل هزینههای سنگینی داشت. هر پیام بینفرآیند نیازمند پرش بین فضای کاربر و هسته (Context Switch) است که به مرور زمان، کندی عملکرد سیستمهای مبتنی بر میکروکرنل را به اثبات رساند.
میراثی فراتر از یک پرونده آفلاین
طراحی مبتنی بر سرویسهای مستقل در تئوری زیبایی بصری و ایمنی بالایی دارد، اما کندی عملکرد، مانع جایگزینی آن با لینوکس در دسکتاپ و سرور شد. با این حال، مفاهیمی مثل کانتینرها، میکروسرویسها و معماریهای ابری مدرن، دقیقاً همان فلسفه جداسازی وظایف و اجرای مستقل سرویسها را تکرار میکنند که بوشنل و همکارانش در گنو در دهه 90 آزمایش کردند. بررسی تاریخچه تکامل
میکروکرنلها نشان میدهد که این الگوها هرگز مردود نشدند، بلکه در زیرساختهای ابری و سیستمهای نهانی به بلوغ رسیدند. پروژه هاید شاید هرگز به یک سیستمعامل تجاری تبدیل نشد، اما معمارانی که امروز پلتفرمهای مدرن را میسازند، همچنان از درسهای گمشدههای تاریخ سیستمعامل بهره میبرند.