پروژه Kerla در حال توسعه یک هسته سیستم عامل است که به زبان Rust نوشته شده است. هسته جدید از ابتدا به گونه ای طراحی شده است که با هسته لینوکس در سطح ABI سازگار باشد، که به فایل های اجرایی اصلاح نشده ساخته شده برای لینوکس اجازه می دهد در یک محیط مبتنی بر Kerla اجرا شوند. کد تحت مجوز Apache 2.0 و MIT توزیع می شود. این پروژه توسط توسعه دهنده ژاپنی Seiya Nuta، که به خاطر ایجاد سیستم عامل میکروکرنل Resea که به زبان C نوشته شده است، ساخته شده است.
در مرحله فعلی توسعه، Kerla فقط میتواند بر روی سیستمهای x86_64 اجرا شود و فراخوانیهای سیستمی اولیه مانند نوشتن، آمار، mmap، لوله و نظرسنجی را پیادهسازی میکند، از سیگنالها، لولههای بدون نام و سوئیچهای زمینه پشتیبانی میکند. برای مدیریت فرآیند، فراخوان هایی مانند fork، wait4 و execve ارائه شده است. پشتیبانی از tty و شبه پایانه ها (pty) وجود دارد. از سیستمهای فایل، initramfs (برای نصب root FS)، tmpfs و devfs هنوز پشتیبانی میشوند. یک پشته شبکه با پشتیبانی از سوکت های TCP و UDP ارائه شده است که بر اساس کتابخانه smoltcp پیاده سازی شده است.
توسعه دهنده یک محیط قابل بوت آماده کرده است که در QEMU یا در ماشین مجازی Firecracker با درایور virtio-net اجرا می شود، که می توانید از قبل از طریق SSH به آن متصل شوید. Musl به عنوان یک کتابخانه سیستم و BusyBox به عنوان ابزارهای کاربر استفاده می شود.
بر اساس Docker، یک سیستم ساخت آماده شده است که به شما امکان می دهد بوت initramf های خود را با هسته Kerla ایجاد کنید. پوسته ماهی مانند nsh و پشته رابط کاربری گرافیکی Kazari بر اساس پروتکل Wayland به طور جداگانه در حال توسعه هستند.
استفاده از زبان Rust در پروژه با به کارگیری تکنیکهای کدگذاری ایمن و بهبود کارایی شناسایی مشکلات هنگام کار با حافظه، تعداد باگهای کد را کاهش میدهد. ایمنی حافظه در Rust در زمان کامپایل از طریق بررسی مرجع، پیگیری مالکیت شی و طول عمر شی (محدوده)، و همچنین از طریق ارزیابی صحت دسترسی به حافظه در طول اجرای کد ارائه می شود. علاوه بر این، Rust محافظت در برابر سرریز اعداد صحیح را فراهم می کند، نیاز به مقداردهی اولیه اجباری مقادیر متغیر قبل از استفاده دارد، مفهوم مراجع و متغیرهای غیرقابل تغییر را به طور پیش فرض اعمال می کند، تایپ استاتیک قوی را برای به حداقل رساندن خطاهای منطقی ارائه می دهد، و پردازش مقادیر ورودی را از طریق امکانات تطبیق الگوی ساده می کند. . .
برای توسعه اجزای سطح پایین، مانند هسته سیستم عامل، Rust از نشانگرهای خام، بستهبندی ساختار، درجهای درون خطی اسمبلر و درونسازی فایل اسمبلر پشتیبانی میکند. برای کار بدون اتصال به کتابخانه استاندارد، بستههای جعبه جداگانه برای انجام عملیات روی رشتهها، بردارها و پرچمهای بیت وجود دارد. در میان مزایا، ابزارهای داخلی برای ارزیابی کیفیت کد (linter، rust-analyzer) و ایجاد تست های واحد وجود دارد که می تواند نه تنها بر روی سخت افزار واقعی، بلکه در QEMU نیز اجرا شود.
منبع: opennet.ru