از آخرین مطلبمان در مورد سیستمعامل آزاد GNU Hurd مدت زیادی گذشته است. از آنجایی که نسخه جدید Hurd (نسخه ۰.۵) به مناسبت سی ساله شدن GNU منتشر شد و به دنبال آن Debian با انتشار Wheezy، نسخهای بر پایه Hurd نیز منتشر کرد، زمان را مناسب دیدیم که نگاهی دیگر به سیستم و ساختار این ریزهسته (microkernel) و نحوه اجرای آن داشته باشیم. مقاله Alex Diavatis از وبسایت WorldOfGnome.org از بسیاری از جهات این نیاز را پوشش داده است. ترجمه این مقاله را (با کمی دخل و تصرف) در ادامه با هم میخوانیم (این مقاله تحت مجوز Creative Commons CC-BY منتشر شده است).
یکی از پیچیدهترین جهات نرمافزارهای آزاد زمانیست که مردم مجبور به تعریف مفاهیم، نامگذاری آنها یا ارائه توضیح بیشتر در مورد آنها هستند. به عنوان مثال میتوان تفاوتهای فلسفه نرمافزار آزاد و فلسفه اوپن سورس، تعریف یک سیستمعامل، یا استفاده از عبارت گنو/لینوکس به جای لینوکس را مصادیقی برای این پیچیدگی یافت.
تعیین یک تعریف بیعیب مشکل به نظر میرسد، اما مشکلتر از آن درک مفهوم نرمافزار آزاد است. نرمافزار آزاد شکل محکم خود را مدیون مجوزهای مختلف است. یادم میآید زمانی در دانشگاه موضوعی درباره مجوزهای متن باز را برای تحیقیق خود برگزیدم. اما با گذشت یک هفته موضوع را عوض کردم؛ زیرا دریافتم که مجوز دهی و تعاریف در فلسفه نرمافزارهای آزاد، نظراتی عینی و قابل مشاهده (به دور از نظر شخصی) هستند.
با وجود سختی درک مفهوم نرمافزار آزاد، درک منافع کسب شده از آن آسان است؛ نرمافزاری که شما آزاد هستید (آزادی مطابق قوانین مجوز) که آن را استفاده، مطالعه، ویرایش و توزیع کنید یا حتی نسخههای ویرایش شده آن را منتشر کنید.
سیستمعامل یا هسته؟
به نظر من تعریف «سیستمعامل» موضوعی بحث برانگیز است. ما میدانیم هسته چیست و چه کاری انجام میدهد، مدیر نمایش چیست و چه وظیفهای دارد، ابزارهای GNU چه هستند و چه نقشی دارند؛ هنگامی که تمامی اینها را (با نام یک توزیع) سر هم میکنیم، منظور ما (البته نه همه) یک سیستمعامل است.
مقاله ویکیپدیا تحت عنوان مباحثه نامگذاری گنو/لینوکس میتواند برای شما که میخواهید نظرات افراد «شناخته شده» در مورد تعریف سیستمعامل را ببینید شروع خوبی باشد. اما در این مقاله من به تعریف Emmanule Bassi (یکی از توسعه دهندگان گنوم) اکتفا میکنم:
هسته لینوکس به طور قطع سیستمعامل نیست. تمامی بسته نرمافزاری، از هسته تا رابط شل (shell)، و به دنبال آن API های ارائه شده برای ساخت برنامههای جدید، یک سیستمعامل است.
این تعریف درباره GNU Hurd نیز صادق است؛ مجموعهای از چندین نرمافزار که در کنار هم یک سیستمعامل کاملا آزاد را تشکیل میدهند، که احتمالا جالبترین قسمت آن، هستهاش میباشد.
هستهای به نام GNU Mach
عبارت GNU، مخفف بازگشتی عبارت “GNU’s Not Unix” (گنو، یونیکس نیست) است. GNU Mach اجرایی از ریزهسته Mach میباشد، که نه لینوکس است، نه یونیکس.
ریزهسته Mach یک هسته تا-حد-زیادی-سازگار با یونیکس است که بر خلاف هسته یکپارچه (Monolithic) لینوکس، از معماری کلاینت-سرور استفاده میکند که در حالت کلی به معنای به اشتراک گذاری مفاهیم وابسته به معماری و مکانیزمها با طراحی ریزهسته است.
هسته یکپارچه در مقابل ریزهسته
این مطلب تنها یک منبع سریع برای درک تفاوت میان هسته یکپارچه و ریزهسته است و پیشنهاد میشود که برای درک بهتر و توضیحات تخصصیتر در گوگل جستجو کنید.
در یک ساختار یکپارچه، تمامی سرویسهای هسته و پروسسها موجود بوده و در یک فضای بهخصوص (address space) اجرا میشوند که از آن به عنوان فضای هسته (kernel space) یاد میشود. برای فهم بهتر میتوانید یک پروسس را در نظر بگیرید که در فضای هسته قرار گرفته و تمامی اکستنشنهای هسته و اکثر درایورها را اجرا میکند. برنامهها در فضای بهخصوص دیگری اجرا میشوند که به آن فضای کاربری (user space) گفته میشود.
در ریزهستهها (همانند Windows NT) هسته پروسسهای مختلف را به عنوان سرورهای جدا که در فضاهای جداگانهای اجرا میشوند مدیریت میکند. پروسسهای سرور از طریق تجزیه پیامها (parsing messages) با یکدیگر ارتباط برقرار میکنند، و به همین دلیل به آن معماری کلاینت-سرور گفته میشود.
طبق تعاریف، معماری ریزهسته مزیت پایداری و امنیت را در مقابل معماری یکپارچه دارد؛ چراکه در صورت کرش کردن یکی از پروسسهای هسته (همانند یک درایور)، کل سیستم کرش نکرده و سالم باقی میماند. اما بازدهی معماری یکپارچه تا ۵٪ بیشتر از ریزهسته است.
ساختار هسته بسیار پیچیدهتر از این توضیح است، به عنوان مثال لینوکس توانایی بارگذاری/حذف ماژولها و دستگاههای مختلف را داراست و یک سیستم«وصل کن و اجرا کن» (plug and play) میباشد.
با وجود GNU/Linux، دیگر چرا GNU Mach؟
جالبترین سوال این است که چرا GNU Hurd از لینوکس به جای Mach استفاده نمیکند؟
زمانی که پروژه گنو کلید خورد، هسته لینوکس هنوز به وجود نیامده بود و توسعه دهندگان گنو ساخت هسته مختص خود را شروع کرده بودند. بنا به همین دلیل با وجود معرفی لینوکس به عنوان معمولترین هسته برای سیستم گنو، به توسعه هسته خود ادامه دادند.
دلیل دوم، برتریهای Hurd نسبت به لینوکس است. البته این برتری تنها در سطح معماری مشاهده میشود، چرا که Hurd در زمینه ویژگیها، پایداری، بازدهی و البته اقتباس بسیار عقبتر از لینوکس میباشد. به خاطر داشته باشید که تعداد زیادی از هستههای آزمایشی وجود دارند (اکثرا به عنوان پروژههای دانشگاهی) که برتر از لینوکس قلمداد میشوند، اما به هیچ وجه از ارزش لینوکس و نقشی که در اکوسیستم نرمافزارهای آزاد بازی کرد نکاستهاند.
ریچارد استالمن، موسس پروژه گنو در پاسخ به سوال چرا بنیاد نرمافزارهای آزاد همچنان به توسعه GNU Mach ادامه میدهد اینچنین میگوید:
مردم گاهی اوقات میگویند، «چرا بنیاد نرمافزارهای آزاد یک هسته آزاد جدید را به جای استفاده از لینوکس به وجود آورد؟» که سوالی منطقیست. جواب این سوال به طور خلاصه این است که ما آن موقع به این سوال برخورد نکردیم.
زمانی که ما توسعه Hurd را در سال ۱۹۹۰ شروع کردیم، سوالی که بدان برخوردیم این بود: «چطور یک هسته آزاد را برای سیستم گنو بدست آوریم؟» در آن زمان هیچ هسته آزاد شبه یونیکس وجود نداشت، و ما از هیچ نقشهای برای ساخت آن با خبر نبودیم. تنها راهی که به استفاده از یک کرنل آزاد ختم میشد، این بود که خودمان آن را بنویسیم؛ پس شروع کردیم.
سپس از توسعه لینوکس با خبر شدیم و در آن زمان، سوالی که در ذهنمان به وجود آمد این بود که آیا باید Hurd را کنسل کرده و به جای آن از لینوکس استفاده کنیم؟
با خبر شدیم که لینوکس به هیچ وجه پرتابل نیست (این مسئله در حال حاضر شاید صحیح نباشد، اما چیزی بود که ما در آن زمان شنیدیم)، و اینکه لینوکس از جهت معماری با کرنل یونیکس در یک سطح است؛ در حالیکه کار ما (هسته تحت توسعه) به چیزی بسیار قدرتمندتر ختم میشد.
اجرای GNU Hurd
اجرای GNU Hurd در ویرچوالباکس پروسهای بسیار ساده است. کافیست ایمیج Debian GNU/Hurd (تنها ۳۲ بیتی موجود است) را دانلود کرده و طبق دستورات موجود در این لینک پیش بروید. اما نسخه Hurd در این ایمیج ۰.۳ است، نه نسخه جدیدتر ۰.۵. راهنمای به روزتری نیز برای اجرای آخرین نسخه Mach نیز موجود است که از اینجا به آن دسترسی خواهید داشت.
در حالت کلی از این طریق میتوانید آن را اجرا کنید:
دانلود ایمیج:
اکسترکت آن:
اجرا در qemu/kvm:
یا تبدیل ایمیج به فرمت VDI و اجرای آن در ویرچوالباکس:
در فدورا ۱۹ میتوان از برنامه qemu-img برای تبدیل استفاده کرد:
پس از تبدیل ایمیج میتوانید با ساخت یک ماشین مجازی و انتخاب ایمیج تبدیل شده به عنوان هارد دیسک مجازی، Debian GNU/Hurd را اجرا کنید.
با کاربر ریشه لاگین کنید (بدون نیاز به کلمه عبور)
به منظور اجرای محیط گرافیکی فرمان startx را بزنید تا مدیر پنجره IceWM اجرا شود.
امیدواریم این مقاله پاسخگوی سوالات شما عزیزان درباره این سیستمعامل آزاد بوده باشد. نظرات خود را با ما و جامعه کاربری مطرح نمایید.
8 دیدگاه برای این نوشته:
مسعود آموزگار:
۰۵ آذر ۱۳۹۲
من همیشه هرد رو خیلی دوست داشتم… از نظر ساختار و تئوری فوق العادهس. همه توی زمانی که لینوکس تازه عمومی شده بود میگفتن دوره هستههای یکپارچه به سر اومده. ولی ساختار میکروکرنل هیچوقت جاش رو نتونست بگیره.
از وقتی استالمن تو مصاحبه که خودمون باهاش داشتیم گفت توجه چندانی روی هرد وجود نداره و نیازی هم به نیس کلا ازش قطع امید کردم دیگه.
ممنون عرفان جان بابت مطلب خوب.مجتبی:
۰۵ آذر ۱۳۹۲
یه بار تو انجمن اوبونتو پرسیدم که مثلا با جایگزین کردن هرد با لینوکس، تکلیف نرمافزارها چی میشه که یکی گفت چون دوتاشون استاندارد پازیکس رو رعایت میکنن مشکل سازگاری پیش نمیاد.
واقعا به همین سادگیه؟
بحث درایورها چی؟
هنوز هدف از توسعه هرد رو نمیدونم چون فکر کنم استالمن ولی مطمئن نیستم گفته بود با وجود لیبره لینوکس هرد تو اولویت نیست. اینجور که بوش میاد قرار نیست هیچ وقت جایگزین لینوکس بشه. پس چرا روش وقت میذارنعلی آقا:
۰۵ آذر ۱۳۹۲
“اما بازدهی معماری یکپارچه تا ۵٪ بیشتر از ریزهسته است.” فکر میکردم بیشتر از اینها با هم در زمینه بازدهی تفاوت داشته باشند.
همانطور که دیگران هم گفتند، سرعت توسعه هرد خیلی پایین است. به قول معروف شتر سواری دولا دولا نمی شود یا باید به طور جدی توسعه را ادامه بدهند و یا اینکه آن را متوقف کنند.مسعود آموزگار:
۰۵ آذر ۱۳۹۲
نرم افزارها بخاطر متن باز و آزاد بودن و مشترک بودن لایبرری ها بدون مشکل پورت میشن اغلب. ولی درایورها خیر… درایورها باید بصورت اختصاصی ارائه بشن که چنین چیزی به احتمال قوی هیچ وقت پیش نمیاد.
پروژه های آزاد معمولا نمیمیرن هرچقدر هم راکد بشن یکی پیدا میشه که بخاطر دلایل خودش هر از گاهی توسعه ش بده.آرش:
۰۵ آذر ۱۳۹۲
از نظر ساختار که مسلما فوقالعادست، مشکلی که داره و خود استالمن هم میگه بحث دیباگ کردنشه.
توی اون دوره که خیلی رو مدیریت پیچیدگی نرمافزارهای بزرگ مثل سیستم عامل تجربهای وجود نداشت، GNU قماری کرد کرد که جواب نداد و تبدیل شد به یک تجربه بزرگ.nixmd:
۰۵ آذر ۱۳۹۲
بسی حال کردیممجتبی:
۰۶ آذر ۱۳۹۲
“یا باید به طور جدی توسعه را ادامه بدهند و یا اینکه آن را متوقف کنند.”
شدیدا موافقمهمایون:
۰۶ آذر ۱۳۹۲
لینوکس یه مشکلی داره
نه که مشکل لینوکس باشه، مشکل موقعیتشه
یادمه تروالدز به یکی از توسعه دهندههای لینوکس که به تروالدز ایراد گرفته بود چرا پچهای من رو قبول نمیکنی گفته بود «ما سیستمعامل توسعه نمیدیم که با اون خود ارض* ایی کرده باشیم»موضوع اینه که یک سری از تغییرات اجازهی اعمال شدن توی لینوکس رو ندارن، به این خاطر که باعث میشن هستهی لینوکس دیگه توانایی اجرای بعضی از برنامههای قدیمی رو از دست بده. حالا هر چقدر هم که این تغییرات مفید باشن. حداقل باید این تغییرات مراحلی رو طی بکنن تا برای ساختار اصلی لینوکس مشکلی به وجود نیارن
فکر نمیکنم سرمایهگذاریی پشت Mach وجود داشته باشه که از بنیاد نرمافزار آزاد ایراد بگیریم چرا بیخود براش هزینه میکنه.
Mach میتونه ابزاری باشه برای کسایی که میخوان به صورت تجربی چیزهای جدید رو آزمایش بکنن، چیزهایی که توی لینوکس به دلیل سیاستها امکان اجرایی شدن نداره.