گنو هرد

نام

هرد (به انگلیسی:  HURD) یک مخفف بازگشتی از HIRD of Unix-replacing daemons است که در این مخفف HIRD مخفف HURD of interfaces representing depth است. همینطور HURD و HIRD دو املای متفاوت برای کلمه انگلیسی herd است. نام کامل گنو هرد (GNU HURD) همچنین یک بازی با کلمات هرد herd و گنو gnus با تامل به اینکه کرنل چگونه کار می‌کند است.

تاریخچه توسعه

توسعه سیستم عامل گنو از ۱۹۸۴ آغاز شد و در ابتدا پیشرفت خوبی داشت. ابزارهای آزاد گنو شهرت خوبی به دست‌آورد و به ابزارهای اختصاصی ارائه شده توسطه فروشندگان سیستم اولیت پیدا کرد. از اوایل ۱۹۹۰ تنها قسمت مهم که وجود نداشت هسته بود.

توسعه هرد در سال ۱۹۹۰ بعد از تلاش رها شده هسته در سال ۱۹۸۶، بر اساس تحقیقات سیستم عامل TRIX توسعه یافته به وسیلهٔ پروفسور Steve Ward و گروهش در آزمایشگاه MIT برای علوم کامپیوتر شروع شد. به گفته توماس بوشنل، معمار اولیه هرد، برنامه اولیه آن‌ها این بود که که با هسته 4.4BSD-Lite انطباق داشته باشد و اعلام کرد «در حال حاضر کاملاً برای من آشکار شده که این موفق خواهد بود و امروز دنیا مکان بسیار متفاوتی خواهد بود.» با این حال در سال ۱۹۸۷، به دلیل عدم همکاری برنامه نویسان برکلی، ریچارد استالمن پیشنهاد کرد به جای آن از ریزهسته ماک دانشگاه کارنگی ملون استفاده کنند. کار بروی هسته به دلیل عدم اطمینان از اینکه آیا دانشگاه کارنگی ملون کد ماخ را تحت یک مجوز مناسب عرضه خواهد کرد یا نه به تعویق افتاد.
با انتشار هسته لینوکس در ۱۹۹۱، کاربران اجزای فضای کاربر گنو را به هسته لینوکس منتقل کردند و توزیع لینوکس را به وجود آوردند که در نهایت منجر به بحث نامگذاری گنو/لینوکس شد.
توسعه هرد آرام بود. با وجود یک اعلان خوش‌بینانه توسط استالمن در سال ۲۰۰۲ که پیش‌بینی کرده بود یک انشار از گنو هرد بعد از آن سال منتشر شود هرد هنوز هم مناسب محیط‌های تولید نیست. توسعه تا به حال انتظارات را برآورده نکرده‌است و هنوز هم اشکالات و ویژگی‌های ناتمام وجود دارد. این منجر شد از هر محصول دیگری که انتظار می‌رفت ضعیفتر باشد. در سال ۲۰۱۰ بعد از بیست سال توسعه، استالمن گفت که او «چندان به گنو هرد خوشبین نیست، پیشرفت‌هایی بوده اما برای اینکه به نظر فوق‌العاده باشد باید تعداد زیادی مشکل عمیق را حل کنیم.»، اما اضافه کرد «اتمام آن برای سیستم گنو خیلی مهم نیست» چون یک هسته آزاد در حال حاضر وجود دارد (لینوکس) و به پایان رساندن هرد مشکلات باقی ماننده سیستم عامل آزاد یعنی پشتیبانی از دستگاه‌ها را حل نمی‌کند.

پروژه دبیان روی پروژه هرد کار کرده و توزیع دبیان گنو/هرد را برای سیستم‌های سازگار با IBM PC تولید کرد.
در آگوست ۲۰۱۵، در پروژه تابستان کد گوگل، مدیر بسته گنو گیکس به گنو هرد پورت شد و به اولین مدیر بسته بومی برای گنو هرد تبدیل شد.

معماری

برخلاف اکثر هسته‌های شبه-یونیکس، هرد از معماری کارخواه-کارساز که در ریزهسته است استفاده می‌کند که مسئولیت ارائه اکثر سرویس‌های هسته - هماهنگی دسترسی به سخت‌افزار رایانه: واحد پردازش مرکزی (از طریق مدیریت فرایند، زمان‌بندی)، حافظه (از طریق مدیریت حافظه)، و دیگر دستگاه‌های ورودی/خروجی دیگر (از طریق زمان‌بند ورودی/خروجی) برای صدا، گرافیک، ذخیره‌سازی انبوه و غیره را فراهم می‌کند.

در تئوری ریزهسته باید به همه راه‌اندازهای دستگاه‌ها اجازه دهد تا به صورت سرور در فضای کاربر ساخته شوند. اما امروزه اغلب راه‌اندازها از این نوع همچنان در فضای هسته ماخ هستند. دلیل این است که در ابتدا، راه‌اندازهای فضای کاربر به دلیل سربار ارتباطات بین فرایندی در هسته ماک عملکرد مناسبی نخواهند داشت. با کمک عملکرد ماشین‌های امروزی، ممکن است که این سربار باعث مشکل قابل توجهی نشود.
در ابتدا، هرد برای استفاده از گنو ماک به عنوان ریزهسته توسعه داده می‌شد. این یک تصمیم فنی بود که به وسیلهٔ ریچارد استالمن گرفته شده‌است که فکر می‌کرد به دلیل صرفه‌جویی در کار، سرعت توسعه را افزایش خواهد داد اما او اذعان کرده که این تصمیم او اشتباه بوده‌است.

الحاقات یونیکس

تعدادی از مفاهیم سنتی یونیکس در هرد تغییر کرده یا توسعه یافته‌است.

در یونیکس هر برنامه در حال اجرا یک شناسه کاربر (user id) دارد، که به‌طور معمول مربوط به کاربری است که فرایند را آغاز کرده‌است. این آی‌دی تا حد زیادی کارهایی را که برنامه مجاز است انجام دهد مشخص می‌کند. هیچ فرایند دیگری نمی‌تواند شماره کاربری یک فرایند در حال اجرا را تغییر دهد. یک فرایند هرد، از سوی دیگر، ریز مجموعه‌ای از شناسه‌های کاربر اجرا می‌شود که در نتیجه می‌تواند شامل یک شناسه، شناسه‌های متعدد یا حتی بدون شناسه باشد. یک فرایند با دسترسی بالا می‌تواند به فرایند دیگر آی‌دی اضافه یا حذف کند. برای مثال یک سرور کلمه عبور وجود دارد که می‌تواند بعد از ورود موفق آی‌دی را برگرداند.

با توجه به فایل سیستم، یک برنامه مناسب می‌تواند به عنوان یک مترجم برای یک فایل تنها یا کل یک دایرکتوری به صورت سلسله مراتبی طراحی شود. هر دسترسی به فایل ترجمه شده یا در حالت بعد فایل‌های زیر ساختار سلسله مراتبی در حقیقت به وسیلهٔ برنامه به کار گرفته شده‌است. برای مثال یک مترجم فایل ممکن است بر خلاف لینک در یونیکس به سادگی عملیات خواندن و نوشتن را به فایل دیگری تغییر مسیر دهد. اثر مونت در یونیکس به دست آورده شده به وسیلهٔ راه‌اندازی یک مترجم فایل سیستم (با استفاده از دستور SETTRANS) مترجم‌ها همچینی می‌توانند برای ارائه خدمات به کاربر مورد استفاده قرار گیرند. به عنوان مثال، مترجم FTPFS به یک کاربر اجازه می‌دهد سایتهای اف‌تی‌پی راه دور را با به داخل یک پوشه encapsulate کند. آنگاه ابزارهای استانداردی ماننده ls و cp و rm می‌توانند دستکاری فایل‌ها در سیستم راه دور استفاده شوند. حتی مترجم‌های قدرتمندتر ماننده UnionFS که به کاربر اجازه می‌دهند چند دایرکتوری را با هم یکی کند در نتیجه لیست گرفتن از دایرکتوری یکی شده unified directory محتویات همه دایرکتوری‌ها را نشان می‌دهد (یک ویژگی در بسیاری از یونیکس‌ها نیست گرچه در بسیاری از بی‌اس‌دیهای جدید موجود است).
هرد به یک بوت لودر با پشتیبانی از گند بوت مانند گنو گراب نیاز دارد.

معماری سرور

با توجه به مستندات دبیان، ۲۴ سرور (۱۸ سرور اصلی و ۶ سرور سیستم پرونده) با نام‌های زیر وجود دارد.

سرورهای فایل سیستم

ext2fs

مترجم سیستم پرونده ext2. بلوک‌های دیسک را از ریزهسته دریافت می‌کند و فایل‌ها و دایرکتوری‌ها را به برنامه‌های کاربردی می‌دهد.

isofs

مترجم برای سیستم پرونده iso 9660. بلاک‌های سی‌دی یا دی‌وی‌دی را به فایل و دایرکتوری برای برنامه‌های کاربردی ترجمه می‌کند.

nfs
سیستم پرونده شبکه

ufs

مترجم سیستم پروندههای بی‌اس‌دی

ftpfs

مترجم سیستم پرونده اف‌تی‌پی

storeio

مترجم ذخیره‌سازی

همه سرورها با رابط برنامه‌نویسی نرم‌افزار پازیکس پیاده‌سازی شده‌است، با هر سرور بخشی از رابط پیاده‌سازی شده‌است. به عنوان مثال، سرورهای سیستم پرونده مختلف هرکدام تماس سیستم پرونده (به انگلیسی:  filesystem calls) را پیاده‌سازی کرده‌اند. سرور ذخیره‌سازی مانند لایه بلوک در لینوکس به عنوان یک لایه پوشش کار خواهد کرد. معادل فایل سیستم مجازی لینوکس کتابخانه‌های libdiskfs و libpager وجود دارد.

توزیعهای گنو بر پایه هرد

توزیع‌های گنو هرد عبارتند از:

آرچ هرد
دبیان گنو/هرد
توزیع سامانه گیکس

nixos

Bee GNU/Hurd (متوقف شده)

جنتو گنو/هرد (متوقف شده)

سی دی زنده گنو/هرد (متوقف شده)