تصور کنید بتوانید قلب تپنده سیستمعامل خود را در لحظه عوض کنید، بدون اینکه حتی یکی از برنامههایتان متوجه این تغییر شود. این وعدهٔ جسورانه در QSOE 0.1 محقق شده است؛ سیستمعاملی جدید برای معماری RISC-V که میخواهد انعطافپذیری و ماژولار بودن مدلهای QNX را به سختافزارهای باز بیاورد.
به نقل از مستندات پروژه، این سیستم که در ژوئن ۲۰۲۶ عرضه شد، ثابت میکند که یک محیط ساخت واحد (Single Build Environment) میتواند همزمان از یک میکروکرنل (Microkernel) اختصاصی و هسته استاندارد صنعتی seL4 پشتیبانی کند، بدون اینکه لایه کاربر-محور (Application Layer) دچار تضاد یا واگرایی شود.
طراحی سیستمعاملهای مدرن معمولاً ما را بین پایداری و انعطاف مجبور به انتخاب میکند. هستههای یکپارچه (Monolithic Kernel) مستحکم اما سخت و صلب هستند، در حالی که میکروکرنلها — شبیه به یک مدیر رستوران که خودش غذا نمیپزد بلکه فقط سفارشها را بین آشپزها تقسیم میکند تا سرعت کار بالا برود — چابکی بیشتری دارند اما انتقال برنامهها (Porting) به آنها به دلیل پیچیدگیهای ساختاری دشوار است. QSOE Systems با جداسازی کامل هسته از فضای کاربر، مدلی را پیاده کرده است که از مدل «مدیر منابع» (Resource-Manager Model) در QNX Neutrino تقلید میکند.
همانطور که در تحلیلهای پیشین ما دربارهی امنیت مدلهای بازمتن و لایههای انتزاع سختافزاری اشاره کردیم، این نوع جداسازی اجازه میدهد توسعهدهندگان موتور زیربنایی سیستم را بدون بازنویسی ابزارها، شل (Shell) یا درایورها تعویض کنند. در این طراحی، تأکید ویژهای بر داشتن یک هسته کوچک با مکانیسم ارسال پیامهای همگام (Synchronous Message-Passing IPC) و یک مدل سطحبالای مدیر منابع برای ارائه سرویسها شده است.
معماری دو-هستهای
طبق گزارش فنی منتشر شده در سایت qsoe.net، این سیستم در دو نسخه متمایز عرضه میشود که هر دو از یک فضای کاربر (Userspace) و یک سیستم ساخت (Build System) مشترک استفاده میکنند:
- QSOE/N: از Skimmer استفاده میکند؛ میکروکرنلی که از پایه و بهطور اختصاصی برای این پروژه نوشته شده است. این هسته از ابتدا برای پشتیبانی از پردازش متقارن (SMP) طراحی شده تا بتواند از قدرت تمام هستههای پردازنده به شکل بهینه استفاده کند.
- QSOE/L: از هسته seL4 بهره میبرد؛ میکروکرنلی که بهصورت رسمی تأیید شده (Formally Verified) و در سطح جهانی به دلیل امنیت فوقسنگین و قابلیت اطمینان بالا شناخته شده است.
با وجود تفاوت بنیادین در معماری این دو هسته، فضای کاربر در هر دو نسخه ۱۰۰٪ یکسان است. تنها مؤلفههایی که برای هر هسته بهطور جداگانه تولید میشوند، مدیر وظایف (taskman) و کتابخانه سی (libc.so) هستند. نکته قابل توجه این است که کتابخانه سی در سطح کد منبع حدود ۸۵٪ مشترک است و تفاوتها تنها در لایه بسیار نازکی ظاهر میشوند که در آن کتابخانه با هسته مربوطه ارتباط برقرار میکند.
کالبدشکافی اجزاء
برای تسهیل استقرار و نصب، پروژه فایلهای باینری مشخصی را برای هر هدف (Target) فراهم کرده است:
- skimmer.bin: تصویر باینری خام میکروکرنل Skimmer که به عنوان هسته مرکزی نسخه QSOE/N عمل میکند.
- modpkg.cpio: یک بسته ماژولار شامل فضای کاربر مشترک است. این بسته شامل شل، درایورها، ابزارهای کاربردی، فرآیند init، مدیریت وظایف (taskman) و کتابخانه سی است و به عنوان یک initrd بارگذاری میشود.
- qsoe-l-qemu.elf: یک فایل ELF جامع برای ماشین مجازی QEMU (مدل virt) که لودرِ فایلهای elf، هسته seL4، taskman و فضای کاربر را یکجا در خود جای داده است.
- qsoe-l-sifive.elf: تصویر جامع مشابه که بهطور خاص برای برد سختافزاری SiFive HiFive Unmatched ساخته شده است.
- mrbml-riscv64.efi: اپلیکیشن بوتلودر EFI اختصاصی این پروژه برای RISC-V است که منوی بوت را در سختافزار واقعی مدیریت کرده و به کاربر اجازه انتخاب هسته میدهد.
هدف سختافزاری و مکانیزم بوت
QSOE 0.1 بهطور خاص برای معماری ۶۴-بیتی RISC-V (بخصوص مدل RV64 با پیکربندی Sv39) روی برد SiFive HiFive Unmatched (FU740) طراحی شده است. برای سادهسازی فرآیند بوت، پروژه ابزار mr-bml را معرفی کرده است؛ یک اپلیکیشن EFI سفارشی برای RISC-V که به عنوان بوتلودر سیستم عمل میکند. این ابزار به کاربران اجازه میدهد تا نسخه هسته مورد علاقه خود را از طریق یک منوی بوت روی سختافزار واقعی انتخاب کنند.
در این مدل بوت، برنامه mr-bml باید در پارتیشن سیستم EFI (ESP) قرار داشته باشد و هستهها را از یک پارتیشن با فرمت ext2/3/4 بخواند. پس از انتخاب، نسخه برگزیده، ریشه سیستم (Root) خود را از یک پارتیشن با فرمت fs-qrv مونت میکند.
برای کاربرانی که به سختافزار دسترسی ندارند، توسعهدهندگان یک تصویر دیسک QEMU خود-بوتشونده (nvme.img.gz) فراهم کردهاند. این تصویر شامل پارتیشن EFI (همراه با mr-bml) و یک ریشه روی دیسک است که هر دو هسته را در خود جای داده است. برای اجرای نسخه QSOE/N در QEMU، کاربران باید از نسخه ۱۱.۰.۱ یا جدیدتر qemu-system-riscv64 استفاده کنند تا کنترلر وقفه AIA مورد نیاز پشتیبانی شود. علاوه بر این، برای نسخه QSOE/L یک دیسک ریشه همراه (virtio.img.gz) لازم است؛ زیرا نسخههای پایه seL4 پیش از ایجاد کنترلر وقفهای که QEMU برای NVMe نیاز دارد توسعه یافته بودند و به همین دلیل مجبور است از دیسک virtio استفاده کند.
توسعه و توزیع
کل این پروژه تحت لایسنس Apache-2.0 منتشر شده و کد منبع آن در GitLab میزبانی میشود. فرآیند ساخت سیستم از یک زنجیره ابزار متقاطع (Cross Toolchain) مدل riscv64-linux-gnu- (با معماری rv64gc) و یک سیستم make استاندارد بهره میبرد. توسعهدهندگان میتوانند با کلون کردن مخزن اصلی (Umbrella Repository)، اجرای دستور make prepare برای دریافت مخازن اجزاء (که در فایل component.list فهرست شدهاند) و سپس اجرای دستور make اقدام به ساخت کنند. همچنین دستور make dist برای تولید تصاویر دیسک QEMU در دسترس است.
برای پشتیبانی جامع از برنامهنویسان، این انتشار شامل چهار دفترچه راهنمای PDF است:
- Design.pdf: شرح مفصل معماری مدل دو-هستهای، نحوه عملکرد taskman و سیستم IPC.
- UserGuide.pdf: دستورالعملهای نصب، نحوه استفاده از شل، دستورات پایه و ویرایشگر متن.
- ProgrammingBook.pdf: راهنمای برنامهنویسی برای QSOE، با تمرکز ویژه بر «چارچوب سرور منابع» (Resource Server Framework).
- AppPortingGuide.pdf: راهنمای انتقال نرمافزارهای یونیکس یا QNX. در این سند تأکید شده است که توابع
fork()وbrk()وجود ندارند و پیشنهاد شده است که ازposix_spawnبرای ایجاد فرآیند و ازpoll()برای جایگزینی عملکردselect()استفاده شود.
مسیر رسیدن به نسخه ۱.۰
یوری زاپوروژتس (Yuri Zaporozhets)، توسعهدهنده سیستمهای این پروژه، یک نقشهراه ده-مرحلهای را برای رسیدن به نسخه ۱.۰ ترسیم کرده است. نقاط عطف این مسیر عبارتند از:
- نسخه ۰.۱: اولین انتشار عمومی. ویژگیها شامل زیربنای دو-هستهای، سیستمفایل فقط-خواندنی fs-qrv در مسیر /usr و سیستم ورود تعاملی (interactive getty + login).
- نسخه ۰.۲: افزودن کنسول متنی روی گرافیک GK208 "Kepler" برای نمایش روی دستگاه، جهت پشتیبانی از مشاهده بصری کارهای صوتی بیدرنگ (Real-time audio).
- نسخه ۰.۳: پیادهسازی اولین سیستمفایل قابل نوشتن (qrvfs)، افزودن پشتیبانی از
O_CREAT/O_TRUNCو قابلیتهای resolution برای Symlink وrealpath. - نسخه ۰.۴: معرفی یک مدیریت فایل دو-پنلی استاندارد برای آزمایش و فشار آوردن به سیستمفایل قابل نوشتن جدید.
- نسخه ۰.۵ و ۰.۶: معرفی اولین دستگاههای صوتی deva-hdmi، ایجاد زیرساختهای زمانبندی وقفه/اولویت و ارائه یک مجموعه آزمون تطبیق جامع (Conformance Suite) با وظایف سخت-بیدرنگ برای سیستمهای چند-پردازندهای (N-CPU).
- نسخه ۰.۸: گسترش پشتیبانی سختافزاری به SpaceMiT K3 (کلاس RVA23) و پیادهسازی معماری وقفه AIA (شامل IMSIC/APLIC) برای یکپارچهسازی عملیات MSI/MSI-X در تمامی بردها.
- نسخه ۰.۹: تلاش برای سازگاری با QNX-libc به منظور اجرای مجموعهای از ابزارهای منبعباز QNX.
- نسخه ۱.۰: دستیابی به سازگاری کامل API با QNX 6.x برای انتقال بدون درز (Seamless) لایه کاربر.
این پیشروی ساختارمند نشان میدهد که هدف نهایی، تبدیل یک هسته ساده قابل بوت به یک سیستمعامل بیدرنگ (RTOS) صنعتی است که قادر به مدیریت وظایف پیچیده صوتی و سختافزاری باشد.
از منظر فنی، این معماری این فرض قدیمی را میشکند که پورت کردن یک هسته لزوماً به بازنویسی کامل کل سیستم نیاز دارد. با انتزاع لایه libc و استفاده از یک فضای کاربر مشترک، QSOE Systems الگویی برای ایجاد توزیعهای سیستمعامل «مستقل از هسته» (Kernel-Agnostic) ارائه میدهد. این موضوع در اکوسیستم پراکنده RISC-V که پشتیبانی سختافزاری در آن بین فروشندگان مختلف بهشدت متفاوت است، بسیار ارزشمند است.
برای شما به عنوان کاربر یا توسعهدهنده، این یعنی مانع آزمایش میکروکرنلها بهشدت کاهش یافته است. دیگر لازم نیست بین امنیت مطلق seL4 و ویژگیهای عملکردی خاص یک هسته سفارشی یکی را انتخاب کنید؛ میتوانید هر دو را روی یک پارتیشن بوت کنید و در لحظه مقایسه نمایید. این اثر در ادامه پروژههای پیشین زاپوروژتس مانند GateMate PC (مبتنی بر FPGA)، سیستم GateMate System/359 (الهام گرفته از IBM S/360) و پروژه QRV (یک پورت تاریخی QNX به RISC-V) قرار دارد که درسهای حیاتی برای راهاندازی سختافزاری هسته Skimmer فراهم کرد.
منتظر انتشار نسخه ۰.۳ باشید، زیرا معرفی اولین سیستمفایل قابل نوشتن، پیشنیاز هرگونه توسعه اپلیکیشنی معنادار فراتر از دستورات ساده شل خواهد بود.
گام بعدی شما
- اگر به معماریهای باز علاقه دارید، روی برد SiFive یا شبیهساز QEMU نسخه ۰.۱ را تست کنید.
- مستند ProgrammingBook.pdf را برای درک نحوه تعامل با Resource Server Framework مطالعه کنید.
- منتظر انتشار نسخه ۰.۳ باشید، زیرا تا آن زمان امکان ذخیره داده روی دیسک (Writable Filesystem) وجود ندارد.
این تنها آغاز مسیر است؛ اثر این رویکرد بر استانداردسازی لایههای کاربر در RISC-V را در گزارشهای بعدی بررسی خواهیم کرد.




گفتگو