گنو هرد

گنو هرد یک هسته سیستم‌عامل است که به عنوان هسته سیستم عامل گنو و جایگزینی برای هسته یونیکس که مالکیتی است طراحی و توسعه داده شده است. گنو هرد از سال ۱۹۹۰ بوسیله پروژه گنو از بنیاد نرم‌افزار آزاد در حال توسعه است.
گنو هرد شامل مجموعه‌ای از پروتکل‌ها و فرایندهای سرور (یا دیمن 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 (متوقف شده)
جنتو گنو/هرد (متوقف شده)
سی دی زنده گنو/هرد (متوقف شده)
لینوکس لیبره
مینیکس ۳