گنو هرد، فراتر از لینوکس
۲۴ دی ۱۳۹۳
در نیمهٔ نخست دههٔ ۹۰ میلادی، پس از آن که لینوس توروالدز کرنل خود را با نام لینوکس به صورت آزاد منتشر کرد، اعضای پروژهٔ گنو که در طول ده سال گذشته در تلاش برای به وجود آوردن یک سیستمعامل آزاد بودند بر سر یک دوراهی تاریخی قرار گرفتند؛ ادامهٔ تلاشها برای توسعهٔ میکروکرنل خود و سرویسدهندههای مربوط به آن تحت عنوان پروژهٔ هرد (HURD) یا استفاده از کرنل یکپارچهٔ جدیدی که هم به همان اندازه آزاد بود و هم در آن زمان تقریباً قابل استفاده بود. در نهایت و پس از کشمکشهای بسیار، تصمیم بر این شد که پروژهٔ هرد متوقّف شده و تلاشها بر روی توسعهٔ لینوکس به صورتی که با سیستمعامل گنو سازگار باشد متمرکز شود. اینگونه بود که سیستمعامل جدیدی به نام گنو/لینوکس متولّد شد. ولی تفاوت این دو در چه بود؟
#
کرنل
کرنل به صورت ساده یکی از اعضای سیستمعامل است. اندرو تتنباوم در کتاب سیستمعامل پیشرفته پس از صحبت در باره ی این که نمیتوان تعریف جامع و دقیقی از سیستمعامل ارائه داد، بهترین تلاش خود را برای تعریف سیستمعامل به این صورت بیان میکند: سیستمعامل عبارت است از کرنل و هر نرمافزاری که مستقیماً با کرنل کار میکند، مثل کتابخانهها، فیرمورها، کامپایلرها و ابزارهای توسعه. کرنل در این میان بخشی است که مستقیماً با سختافزار صحبت کرده و وظیفهٔ اختصاص منابع را برعهده دارد. ولی خود کرنل همانگونه که در بالا اشاره شد انواع مختلفی دارد.
کرنل یکپارچه (Monilithic kernel)
این نوع کرنل که لینوکس نمونهٔ بارز آن است، همانگونه که از نامش پیداست تماماً از یک قسمت تشکیل شده و اجزای آن قابل تمایز از یکدیگر نیستند. به عبارت دیگر راهاندازهای سختافزاری، ارتباطات میانپردازشی مانند سیگنالها و سوکتها، سرویسدهندهٔ پروندهها و… همگی در فضای کرنل قرار داشته و با دسترسی ابرکاربر انجام میشوند. در مثال، کرنل یکپارچه به مانند یک سیبزمینی است که قدرت انعطاف بالایی ندارد
میکروکرنل (Microkernel)
این نوع کرنل که ماخ نمونهای از آن است، از یک کرنل بسیار ریز با حجم پایین تشکیل شده که فقط وظایف اساسی سامانه مانند راهاندازی و انتقال ارتباطات میانپردازشی سطح پایین میان سرویسدهندهها و دادن دسترسیهای لازم به آنها را برعهده دارد و مابقی کارها توسّط مجموعهای از سرویسدهندهها که در حالت کاربر سیستمعامل بر روی کرنل قرار میگیرند و با یکدیگر در ارتباط هستند انجام میپذیرد. این ساختار کرنل، سیستمعامل را بسیار منعطف کرده و به توسعهدهندگان اجازه میدهد با قرار دادن اجزای دلخواه خود به صورت مورد نیاز، سامانهٔ خود را برای مقاصد خاص خود طرّاحی کنند. در مثال، میکروکرنل به مانند یک پایه به همراه قطعات لگوی بسیاری است که میتوان با آنها طرح دلخواه خود را ایجاد کرد.
کرنل پیوندی (Hybrid kernel)
این نوع کرنل که ویندوز NT نمونهٔ آن است، ساختاری است که تلاش کرده ویژگیهای کرنل یکپارچه و میکروکرنل را با هم ادغام کند. این، به خاطر شباهتش به مدل یکپارچه، بسیار بحثبرانگیز است. ایدهٔ اصلی پشت این ساختار این بوده که از ساختاری مشابه میکروکرنل برخوردار باشد، ولی به صورت یک کرنل یکپارچه پیادهسازی شود. برخلاف میکروکرنل، تقریباً همهٔ سرویسدهندههای سیستمعامل در فضای کرنل قرار دارند و همچنین نمیتوان در زمان اجرای سامانه، ماژولهایی را از کرنل پیوندی حذف یا به آن اضافه کرد. در عمل اغلب پیادهسازیهای این گونه از کرنل از هردو گونهٔ پیشین ضعیفتر ظاهر شدهاند.
#
پروژهٔ هرد
همانگونه که گفته شد، این پروژه در اواسط دههٔ ۹۰ میلادی تقریباً متوقّف شد. ولی مجموعهای از دلایل موجب شد که توسعهٔ این پروژه از سال ۲۰۱۳ دوباره به صورت جدّی از سر گرفته شود. از جملهٔ این دلایل میتوان به عدم مهاجرت لینوکس به آخرین نسخه از پروانهٔ انتشار GPL و همچنین احساس قدیمی شدن ساختار کرنل یکپارچه برای قرن بیست و یکم اشاره کرد. خروجی این پروژه به صورت عمومی به گنو هرد شهرت دارد، ولی از نظر تکنیکی شامل میکروکرنل گنو-ماخ (GNU-MACH) و مجموعهای از سرویسدهندهها به نام هرد میشود که بر روی آن اجرا میشوند. به همین صورت سیستمعامل کاملی که بهجای کرنل لینوکس از گنو-ماخ و هرد استفاده میکند با نام عمومی گنو/هرد شناخته میشود، هرچند اطلاق نامهایی مانند گنو/ماخ با سرویسدهندههای هرد و حتا گنو هم به آن محلّی از اشکال ندارد.
تاریخچه
در ابتدا قرار بود سیستمعامل گنو از کرنل تریکس (TRIX) که در MIT توسعه یافته بود استفاده کند و از این رو توسعهدهندگانش اقدام به اعمال تغییرات لازم بر این کرنل کرده بودند، ولی در سال ۱۹۸۶ بنیاد نرمافزار آزاد طی مذاکراتی با پروفسور رشید از دانشگاه کارنگی-ملون بر سر توسعهٔ مشترک کرنل ماخ به توافق رسید. این کار به آنها اجازه میداد بهجای تلاش برای تغییر کرنل TRIX، کرنل را به گونهای که خودشان میخواستند توسعه دهند. با توسعه و بلوغ نسبی کرنل ماخ در پایان دههٔ ۸۰، بنیاد نرمافزار آزاد از سال ۱۹۹۰ کار بر روی سرویسدهندههای هرد را بر روی میکروکرنل ماخ آغاز کرد.
وضعیت کنونی
به گفتهٔ تیم توسعهٔ دبیان، گنو هرد برای ورودش به این توزیع در انتشار جسی بیش از ۸۰٪ آماده است. با توجّه به این که کرنل FreeBSD هنگام ورودش در انتشار ویزی دارای آمادگی ۸۵٪ بود، امید است به زودی شاهد توزیع گسترده و عمومی آن باشیم. این کرنل در حال حاضر به صورت غیر رسمی توسّط دو توزیعکنندهٔ بزرگ دبیان و آرچ قابل دریافت و استفاده است که در میان آنها، توزیع دبیان از وضعیت بهتری برخوردار بوده و تا حد زیادی توانایی انجام کارهای عادی روزمره را دارد.
کاستیها
گنو هرد با تمام خوبیهایش، نواقصی نیز دارد که ناشی از کمبود نیروی انسانی داوطلب برای توسعهٔ آن است. برای مثال در حال حاضر هنوز نسخهٔ ۶۴ بیتی از آن موجود نیست و نمیتواند با دیسکهای ساتا کار کند. همچنین راهاندازهای سختافزاری آن محدود هستند و ممکن است با خیلی از دستگاهها کار نکند. گرچه برای مثال سرویسدهندههای پایگاه وب گنو هماکنون به وسیلهٔ گنو/هرد راهاندازی شده اند، ولی برای داشتن یک تجربهٔ کاربری بدون مشکل با این سیستمعامل برای کارهای روزمره، بهترین روش استفاده از آن بر روی یک مجازیساز مانند kvm است، زیرا که راهاندازهای مربوط به دستگاههای شبیهسازی شدهٔ رایج برای گنو هرد نوشته شده اند.
هرد و لینوکس
ریچارد استالمن رابطهٔ بین هرد و لینوکس را اینگونه شرح میدهد:
بعضیوقتها مردم میپرسند «چرا بنیاد نرمافزار آزاد بهجای استفاده از لینوکس، یک کرنل آزاد جدید را توسعه داد؟» این پرسش معقولی است. پاسخ آن به صورت خلاصه این است که ما با این پرسش مواجه نبودیم.
هنگامی که ما در ۱۹۹۰ شروع به توسعهٔ هرد کردیم، پرسشی که با آن مواجه بودیم این بود که «چگونه میتوانیم کرنلی آزاد برای سیستمعامل گنو داشته باشیم؟» در آن زمان هیچ کرنل شبهٔونیکس آزادی وجود نداشت و ما هیچ تلاش دیگری را هم برای نوشتنش نمیشناختیم. تنها راهی که میتوانستیم برای داشتن یک کرنل آزاد انتظار داشته باشیم این بود که خودمان بنویسیمش، پس شروع کردیم.
ما پس از انتشار لینوکس دربارهٔ آن شنیدیم. در آن زمان پرسشی که دربرابر ما قرار داشت این بود که «آیا باید پروژهٔ هرد را لغو کنیم و بهجایش از لینوکس استفاده کنیم؟» ما شنیدیم که لینوکس به هیچوجه قابل انتقال نیست (این گزاره شاید امروزه درست نباشد، ولی در آن زمان اینگونه گفته میشد). همچنین ما شنیدیم که لینوکس از نظر معماری معادل دقیق یونیکس است، در حالی که کار ما به چیزی بسیار پرقدرتتر میانجامید.
با توجّه به سالها کاری که تا آن زمان بر روی هرد انجام شده بود، ما تصمیم گرفتیم که آن را به جای دور انداختن، به اتمام برسانیم.
اگر ما با این پرسشی که مردم میپرسند مواجه بودیم (یعنی لینوکس موجود بود و میخواستیم تصمیم بگیریم که کرنل دیگری بنویسیم یا نه)، این کار را نمیکردیم. به جای آن پروژهٔ دیگری را برای کار بر رویش انتخاب میکردیم؛ چیزی که کاری را انجام دهد که هیج نرمافزار آزاد موجودی نمیتوانست.
ولی ما هرد را قبل از آن شروع کردیم و اکنون نیز آن را به مرحلهٔ اجرایی رساندهایم و امیدواریم که معماری برتر آن، سیستمعاملهای آزاد را قدرتمندتر کند.
نصب گنو/هرد
برای استفاده از گنو/هرد، آسانترین راه استفاده از یک تصویر از پیش نصب شده است. این تصویر را برای توزیع دبیان میتوان از اینجا دریافت کرد:
و با این دستور از حالت فشرده خارج کرد:
حال میتوان آن را مستقیماً روی kvm اجرا کرد:
یا آن را تبدیل به دیسک virtualbox کرد تا از داخل این برنامه آن را مدیریت کرد:
حال میتوان به صورت عادی از آن استفاده کرد.