گنو هرد

**گنو هرد** یک هسته سیستم‌عامل است که به عنوان هسته سیستم عامل گنو و جایگزینی برای هسته یونیکس که مالکیتی است طراحی و توسعه داده شده‌است. گنو هرد از سال ۱۹۹۰ به وسیلهٔ پروژه گنو از بنیاد نرم‌افزار آزاد در حال توسعه است.
گنو هرد شامل مجموعه‌ای از پروتکل‌ها و فرایندهای سرور (یا دیمن daemon در اصطلاح یونیکس) است که در ریزهسته گنو ماک اجرا می‌شود و در نظر گرفته شده‌اند که با همدیگر هسته سیستم عامل گنو را شکل دهند. هدف هرد پیش افتادن از سیستم عامل یونیکس در عملکرد، امنیت و ثبات است در حالی که تا حد زیادی با این سیستم‌عامل سازگار است. پروژه گنو معماری کارخواه-کارساز ریزهسته را به دلیل مزایای بیشتر نسبت به معماری سنتی هسته یکپارچه یونیکس برای این هسته انتخاب کرده‌است.

## نام
هرد  یک مخفف بازگشتی از 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 تولید کرد.

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

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

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

### تلاش از هسته‌های دیگر

در سال ۲۰۰۷ توسعه‌دهندگان هرد Neal Walfield و Marcus Brinkmann یک نقد از معماری هرد که به «the critique» معروف شد و یک پیشنهاد برای اینکه سیستم‌های آینده چگونه طراحی شوند که به نام «the position paper» معروف شد دادند.

از سال ۲۰۰۴ به بعد، تلاش‌های زیادی شد تا هرد به ریزهسته‌های مدرنتر منتقل شود. در سال ۲۰۰۴ ریزهسته L4 انتخاب اصلی بود اما پیشرفت کند بود. با این وجود، در طول سال ۲۰۰۵، توسعه دهنده هرد Neal Walfild انتقال چارچوب مدیریت حافظه اولیه برای هرد L4 را به پایان برد و Marcus Brinkmann قسمت‌های ضروری از glibc را منتقل کرد.

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

هرد به یک بوت لودر با پشتیبانی از گند بوت مانند گنو گراب نیاز دارد.

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

#### سرورهای اصلی
* احراز هویت  (سرور تأیید هویت): درخواست‌ها و پسوردها را از برنامه‌ها دریافت می‌کند و به آن‌ها یک شماره یکتا (ID) می‌دهد که مجوز برنامه را تغییر می‌دهد.
* crash (سرور کرش): تمام خطاهای کُشنده را بررسی می‌کند.
* exec (سرور اجرا): یک تصویر اجرایی (در حال حاضر تنها ELF و A.out را پشتیبانی می‌کند) را به یک تصویر قابل اجرا در حافظه ترجمه می‌کند. (برنامه را برای اجرا در حافظه آماده می‌کند)
* FIFo (مترجم FIFO): پیاده‌ساز named pipes.
* new-fifo (سرور new FIFO): یک سرور جایگزین برای named pipes.
* firmlink (مترجم firmlink): پیاده‌سازی firmlink لینکی بین لینک سخت و لینک نرم.
* fwd (سرور forward): درخواست‌ها به سرورهای دیگر را ارسال می‌کند، به وسیلهٔ fifo و سرور symlink استفاده می‌شود.
* hostmux (پشتیبانی از سرور multiplexer)
* ifsock (سرور رابط سوکت): به UNIX domain socket addresses کمک می‌کند.
* init (سرور init): سیستم پایه بوت و تنظیمات
* magic (سرور magic)
* null (سرور null): /dev/null و /dev/zero را توسعه می‌دهد.
* pfinet (سرور pfinet): پروتکل خانواده PF_INET را توسعه می‌دهد.
* pflocal (سرور pflocal): سوکت دامنه یونیکس را پیاده‌سازی می‌کند.
* proc (سرور فرایند): شماره فرایند  را اختصاص می‌دهد و اقدامات سطح فرایند را مدیریت می‌کند.
* symlink (مترجم لینک‌های نمادی): لینک‌های نمادی را برای سیستم پرونده که آن‌ها را پشتیبانی نمی‌کند پیاده‌سازی می‌کند.
* term (سرور ترمینال): یک ترمینال پازیکس.
* usermux (سرور user multiplexer): فراخوانی مترجم خاص کاربر.

#### سرورهای فایل سیستم
ext2fs
مترجم سیستم پرونده ext2. بلوک‌های دیسک را از ریزهسته دریافت می‌کند و فایل‌ها و دایرکتوری‌ها را به برنامه‌های کاربردی می‌دهد.
isofs
مترجم برای سیستم پرونده iso 9660. بلاک‌های سی‌دی یا دی‌وی‌دی را به فایل و دایرکتوری برای برنامه‌های کاربردی ترجمه می‌کند.
nfsسیستم پرونده شبکه
ufs
مترجم سیستم پروندههای بی‌اس‌دی
ftpfs
مترجم سیستم پرونده اف‌تی‌پی
storeio
مترجم ذخیره‌سازی
همه سرورها با رابط برنامه‌نویسی نرم‌افزار پازیکس پیاده‌سازی شده‌است، با هر سرور بخشی از رابط پیاده‌سازی شده‌است. به عنوان مثال، سرورهای سیستم پرونده مختلف هرکدام تماس سیستم پرونده  را پیاده‌سازی کرده‌اند. سرور ذخیره‌سازی مانند لایه بلوک در لینوکس به عنوان یک لایه پوشش کار خواهد کرد. معادل فایل سیستم مجازی لینوکس کتابخانه‌های libdiskfs و libpager وجود دارد.

## توزیعهای گنو بر پایه هرد
توزیع‌های گنو هرد عبارتند از:
آرچ هرددبیان گنو/هردتوزیع سامانه گیکس
nixos
Bee GNU/Hurd (متوقف شده)
جنتو گنو/هرد (متوقف شده)
سی دی زنده گنو/هرد (متوقف شده)

## جستارهای وابسته
* لینوکس لیبره
* مینیکس ۳

## منابع

## پیوند به بیرون
* سایت رسمی
* به سوی یک استراتژی جدید در طراحی سیستم عامل
* سی‌دی نصب دبیان گنو/هرد
* مصاحبه با Neal Walfield
* مصاحبه با Marcus Brinkmann

رده:ریزهسته‌ها
رده:سیستم‌عامل‌های آزاد
رده:سیستم‌عامل‌های مبتنی بر ریزهسته
رده:گونه‌های یونیکس
رده:لوح فشرده زنده
رده:نرم‌افزارهای پروژه گنو
رده:سیستم‌عامل‌های ایکس۸۶–۶۴