پرش به محتوای اصلی
پرش به محتوای مقاله

Rust در برابر C؛ بازخوانی معماری هسته ۰.۱۱ لینوکس

·۲۳ تیر ۱۴۰۵۳ دقیقه مطالعه
لینوکس ۰.۱۱ بازنویسی‌شده به زبان راست: هسته، کتابخانه کاربری و بیش از ۶۰ ابزار اصلی — راه‌اندازی روی i386 در QEMU
لینوکس ۰.۱۱ بازنویسی‌شده به زبان راست: هسته، کتابخانه کاربری و بیش از ۶۰ ابزار اصلی — راه‌اندازی روی i386 در QEMU
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

برخلاف تلاش‌های پراکنده برای نوشتن ماژول‌های کوچک با Rust، این پروژه یک بازنویسی سراسری و وفادار به معناشناسی (Semantics) لینوکس ۰.۱۱ است که همراه با یک Userland کامل عرضه شده است.

آیا می‌توان یک سیستم‌عامل متعلق به سال ۱۹۹۱ را بدون تغییر در رفتار اصلی، به کدهایی ایمن و مدرن تبدیل کرد؟ پروژه linux-0.11-rs ثابت می‌کند که پاسخ مثبت است. این پروژه با بازنویسی کامل هسته لینوکس ۰.۱۱ (Linux 0.11) از پایه در زبان راست (Rust)، یک سیستم عملیاتی i386 ساخته است که در محیط QEMU بوت شده و یک محیط کاربر سبک مدل یونیکس (self-hosted Unix-style userland) را اجرا می‌کند.

این تلاش دقیقاً در زمانی رخ می‌دهد که برنامه‌نویسی سیستم‌ها از زبان C به سمت زبان‌هایی می‌رود که خطاهای رایج حافظه را پیشگیری می‌کنند. این روند جایگزینی سیستم‌های قدیمی با پیاده‌سازی‌های مدرن در راست، مشابه آنچه در پروژه pgrust برای بازنویسی PostgreSQL دیدیم، در حال گسترش است. در حالی که لینوکس ۰.۱۱ اصلی بر مدیریت دستی حافظه متکی بود، این بازنویسی از مدل مالکیت (Ownership) در راست برای اعمال مرزهای واضح‌تر بین ماژول‌ها و تضمین‌های نوعی (Type Guarantees) قوی‌تر استفاده می‌کند. این پروژه در واقع به عنوان یک پل کاربردی بین طراحی سیستم‌عامل‌های قدیمی و ایمنی زبان‌های مدرن عمل می‌کند.

زمینه پروژه (Context)

توسعه این پروژه به شدت بر منابع اصلی تکیه دارد. نویسنده پروژه از مخزن yuan-xy/Linux-0.11 به دلیل ارائه سورس کد اصلی هسته به عنوان مرجع استفاده کرده است. همچنین، پروژه rcore-os/rCore-Tutorial-v3 به عنوان یکی از منابع الهام‌بخش برای پیاده‌سازی‌های مختلف در این سیستم ذکر شده است.

جزئیات فنی (Details)

به نقل از مخزن گیت‌هاب این پروژه، هسته از نظر ویژگی‌ها در مقایسه با لینوکس ۰.۱۱ تقریباً کامل است، هرچند پشتیبانی از فلاپی‌دیسک تعمداً در محدوده اهداف پروژه قرار نگرفته و حذف شده است. بر اساس مستندات فنی، این سیستم مکانیزم‌های حیاتی سطح پایین زیر را پیاده‌سازی کرده است:

  • حافظه مجازی با قابلیت Demand Paging و کپی هنگام نوشتن (CoW) در فرآیندهای Fork.
  • یک جدول کامل از فراخوانی‌های سیستمی (Syscall)، سیگنال‌ها و یک لایه‌ی TTY.
  • درایورهای سخت‌افزاری برای دیسک‌های ATA، کنسول‌های VGA و PS/2 و پورت‌های سریال ۸۲۵۰.
  • سیستم فایل Minix v1.
  • قابلیت‌های هسته‌ای مدیریت فرآیند و چندوظیفگی (Multitasking).

فراتر از هسته، این پروژه یک کتابخانه فضای کاربر به نام user_lib ارائه می‌دهد. این کتابخانه ساختار عمومی ماژول‌های std::{fs, io, path, env, process, time} در راست را شبیه‌سازی می‌کند. این طراحی اجازه می‌دهد تا برنامه‌های کاربردی به‌جای درگیر شدن با لوله‌کشی‌های خام و پیچیده فراخوانی سیستمی، شبیه به کدهای معمولی و استاندارد راست نوشته شوند. علاوه بر این، یک کریت (crate) پشتیبان به نام user_lib_macros نقطه ورود برنامه را از طریق ویژگی #[user_lib::main] فراهم می‌کند.

برای پشتیبانی از این اکوسیستم، یک محیط کاربر (userland) قدرتمند شامل بیش از ۸۰ ابزار پایه (coreutils) و یک شِل (shell) دست‌نویس وجود دارد که زیرمجموعه‌ای از استاندارد POSIX است. این شِل از عملیات‌های پیچیده مانند خط لوله‌کشی (Pipeline)، کنترل جریان (Control Flow)، توابع، Globbing و جایگزینی‌های دستوری و حسابی پشتیبانی می‌کند. این محیط حتی شامل یک ویرایشگر خط تعاملی با قابلیت تکمیل خودکار (Tab completion) و تاریخچه (History) است. برای مثال، کاربران می‌توانند توابع بازگشتی برای محاسبه فاکتوریل را مستقیماً در ترمینال اجرا کنند؛ مانند دستور fact 7 که مقدار ۵۰۴۰ را برمی‌گرداند.

ابزارها و زیرساخت

برای تسهیل تجربه توسعه، پروژه یک ابزار ساخت تصویر دیسک تک-دستوری از طریق tools/build-disk.sh ارائه می‌دهد. این ابزار تمامی برنامه‌های کاربردی را کامپایل کرده، آن‌ها را در یک سیستم فایل مدل یونیکس (شامل پوشه‌های /etc ، /dev و /bin) سازماندهی می‌کند و در نهایت آن‌ها را در یک تصویر دیسک بوت‌شدنی (Bootable Image) بسته‌بندی می‌کند. همچنین ابزارهای مستقل مانند mbrkit و miniximg (که در crates.io در دسترس هستند) برای مدیریت رکورد بوت (MBR) و تصاویر سیستم فایل Minix ارائه شده‌اند.

تست‌ها از طریق tools/run-tests.sh مدیریت می‌شوند. این ابزار هسته را در QEMU بوت کرده و کنسول سریال را با استفاده از اسکریپت‌های کوتاه .ktest که در مسیر ktest/suites/ ذخیره شده‌اند، هدایت می‌کند. این تست‌ها می‌توانند به صورت یک مجموعه کامل، به صورت مجموعه‌های جداگانه (مثلاً shell.basic) یا با پرچم --disable-reboot برای به اشتراک گذاشتن یک نمونه واحد از QEMU اجرا شوند.

از منظر فنی، این بازنویسی این فرض را می‌شکند که معماری‌های قدیمی بیش از حد «نامرتب» یا «کثیف» هستند که با زبان‌های سطح بالا پیاده شوند. با تطبیق منطق سال ۱۹۹۱ با انتزاعات اصطلاحی (Idiomatic) راست، ثابت شد که ایمنی نباید به قیمت از دست دادن وفاداری به معماری (Architectural Fidelity) تمام شود. این رویکرد بهینه‌سازی و بازبینی ساختاری، یادآور پیشرفت‌های اخیر در نسخه‌های جدیدتر است، مانند زمانی که در لینوکس ۷.۱ سرعت نوشتن داده‌های NTFS به طور چشمگیری افزایش یافت.

برای توسعه‌دهندگان، این پروژه به عنوان یک کتاب درسی زنده درباره مفاهیم داخلی سیستم‌عامل عمل می‌کند. یک راهنمای گام‌به‌گام در قالب mdbook در پوشه tutorial/ در دسترس است. شما می‌توانید اکنون مخزن را کلون کرده و با استفاده از Devcontainer در VS Code، دستور make run را اجرا کنید تا هسته را بلافاصله در QEMU بوت کنید.

گام بعدی شما

  • مخزن پروژه را کلون کرده و با استفاده از Devcontainer در VS Code، دستور make run را اجرا کنید تا هسته را در QEMU ببینید.
  • راهنمای گام‌به‌گام موجود در پوشه tutorial/ را برای درک عمیق‌تر مفاهیم داخلی سیستم‌عامل مطالعه کنید.
  • ابزارهای mbrkit و miniximg را در crates.io بررسی کنید تا با نحوه مدیریت دیسک در سطح پایین آشنا شوید.

اما تأثیر این رویکرد بر توسعه هسته‌های مدرن‌تر مثل لینوکس ۶، بحثی پیچیده‌تر است — به بررسی ما درباره‌ی تلاش‌های ادغام Rust در هسته اصلی لینوکس مراجعه کنید.

چرا این موضوع مهم است؟

این اثر با تکیه بر تخصص در برنامه‌نویسی سیستمی، اثبات می‌کند که مدل‌های مالکیت Rust می‌توانند جایگزین مدیریت دستی حافظه در هسته‌های OS شوند. این موضوع اعتبار زبان Rust را به عنوان استاندارد جدید برای جایگزینی C در زیرساخت‌های حساس افزایش می‌دهد.

تأثیر برای ایران

این پروژه برای دانشجویان مهندسی کامپیوتر و توسعه‌دهندگان سیستم‌های داخلی در ایران یک منبع آموزشی عملی و رایگان برای یادگیری معماری سیستم‌عامل و زبان Rust است.

·نگاه ما
تحریریه دات‌هوش

این پروژه نشان می‌دهد که «ایمنی حافظه» یک محدودیت در سطح زبان نیست، بلکه یک انتخاب معماری است. بازنویسی یک سیستم قدیمی با زبان مدرن، به جای تبدیل به یک موزه‌ دیجیتال، در واقع یک تست استرس برای زبان Rust است تا ثابت کند می‌تواند تمام پیچیدگی‌های سطح پایین (Low-level) را بدون از دست دادن کارایی مدیریت کند.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.