في هذه الصفحة
من التطبيق إلى الصورة
جهاز NoWayOS يُبنى، ولا يُضبط بالإعدادات. أربع خطوات تنقل شيفرتك إلى جهاز يؤدي مهمته الوحيدة، وكل خطوة تترك وراءها شيئًا يمكنك فحصه.
اكتب التطبيق
بلغة Rust، في صورة نطاق حماية واحد أو أكثر. ابنِ شاشاته بلبّ واجهة المستخدم التصريحي الصغير في NoWayOS، أو صمّمها بـ React وحوّلها وقت البناء باستخدام Screen Compiler.
صِف النظام
يُعلن وصف نظام Microkit كل نطاق حماية ومنطقة ذاكرة وقناة ومقاطعة. وإلى جانبه، يُدرج ملف الأذونات كل ما يمنحه النظام، ويُدرج ملف التوقعات ما يجب أن يطبعه النظام عند تشغيله.
systems/hello.system systems/hello.grants systems/hello.expectابنِه
داخل حاوية التطوير. يفحص البناء الأذونات مقابل الوصف، ثم يكتب الصورة مع قائمة مكونات برمجياتها وسجل لإعداد seL4 الخاص بها.
make image SYSTEM=helloأقلِعه، ودعه يتحقق من نفسه
في QEMU أولًا: يُقلع النظام بلا شاشة، ويجب أن يطبع كل سطر يُدرجه ملف التوقعات، بالترتيب، ولا شيء مما يحظره الملف. ثم على Raspberry Pi 5، ويُفحص مقابل الملف نفسه.
make qemu-test SYSTEM=hello
حجرات معزولة
يعمل كل جزء من نظام NoWayOS (الشاشة، والإدخال، والشبكة، وتطبيقك) في نطاق حماية خاص به على النواة المصغرة seL4. لنطاق الحماية ذاكرته الخاصة، ولا يحمل إلا الصلاحيات التي يمنحها له وصف النظام: والصلاحية تعمل مثل بطاقة دخول لباب واحد. ويفرضها seL4، فلا يصل أي جزء إلا إلى ما أُعطي له، وقد صُمّم ليبقى الخلل في أي جزء محصورًا في ذلك الجزء.
- المشرف يتلقى أعطال الأجزاء الأخرى، ويوقف الجزء الذي تعطّل، ويعيد تشغيل النظام من بداية نظيفة. وحين تتوالى الأعطال، يدخل الجهاز حالة الأمان عند العطل، ولا يعيده منها إلا إقلاع بارد.
- مؤقت المراقبة نطاق حماية لا يغذّي مؤقت المراقبة في العتاد إلا ما دام كل جزء آخر يستجيب لنبضاته.
- الأدوار تحدّ مما يمكن منحه لكل جزء: يرفض البناء أي إذن لا يجوز أبدًا أن يحمله دور ذلك الجزء، كمنح جهازٍ لجزء لا ينبغي له إلا الرسم.
رسائل محددة النوع، تُنسخ قبل فحصها
تتواصل نطاقات الحماية عبر سجلات ثابتة الحجم، مُرقَّمة الإصدارات، ذات تخطيط صريح، تُمرَّر على حلقات أحادية المنتج عبر الذاكرة المشتركة. ويُنسخ كل سجل خارج الذاكرة المشتركة قبل فحصه، فلا يستطيع المرسل تغييره بين الفحص والاستخدام.
وكل محلل للمدخلات الخارجية يخضع لاختبار التشويش ومبني بحيث لا ينهار أبدًا، ولكل مفكك للرسائل براهين محدودة، أُنجزت بمدقق النماذج Kani.
شاشة أصلية، ولا متصفح
واجهة المستخدم لبٌّ تصريحي صغير: التخطيط والتركيز وتحديد موضع النقر في ذاكرة محدودة، يُرسم بمكتبة Rust المسماة embedded-graphics ولا يعيد رسم إلا ما تغيّر. ويأتي النص من أطالس محارف مرسومة مسبقًا وقت البناء، فلا يحلل الجهاز أي ملف خط أبدًا. وترى التطبيقات أحداث المفاتيح والمؤشر واللمس، ولا ترى أبدًا USB أو أي بروتوكول أجهزة آخر.
ويمكن للمصممين مواصلة العمل بـ React. يحوّل Screen Compiler الشاشات المكتوبة ضمن مجموعته الجزئية المدعومة إلى Rust وقت البناء، ويرفض كل ما يقع خارجها بدلًا من تقريبه.
ما بداخله
| المجال | ما يقدمه لك NoWayOS |
|---|---|
| بيئة التشغيل | أنماط نطاقات الحماية على Microkit و rust-sel4؛ ومشرف يوقف الجزء المتعطل ويعيد تشغيل النظام من بداية نظيفة، مع حالة أمان عند العطل بعد تكرار الأعطال؛ ومؤقت مراقبة |
| الرسائل | سجلات محددة النوع بتخطيط صريح للبيانات المنقولة، وحلقات أحادية المنتج عبر الذاكرة المشتركة |
| برامج التشغيل | العرض (ramfb في QEMU، ومخزن الإطارات في Raspberry Pi 5)؛ والإدخال (virtio، ولوحات المفاتيح والفئران والألواح عبر USB)؛ والشبكة (virtio-net، و Ethernet في Pi 5)؛ ومضيف USB (xHCI)؛ و UART؛ والمؤقتات؛ ومروحة Pi 5 |
| الشبكات | مكدس IP على smoltcp مع DHCP و TCP، لا يتصل إلا بالوجهات التي يسمح بها النظام؛ وعميل TLS 1.3 على rustls و RustCrypto |
| الوقت والثقة | الوقت الرتيب ووقت ساعة الحائط بوصفهما نوعين لا يختلطان أبدًا؛ والتحقق من تواقيع ECDSA P-256؛ وسجلات التحديثات الموقّعة؛ وبذور من مصدر عشوائية عتادي خاضع لاختبارات السلامة |
| واجهة المستخدم | لبّ تصريحي محدود لواجهة المستخدم مع التخطيط والتركيز وتحديد موضع النقر؛ ومُصيِّر على embedded-graphics؛ وأطالس محارف وأيقونات مرسومة مسبقًا |
| الأدوات | حاوية التطوير؛ وأجزاء make التي تُبنى بها مستودعات المنتجات؛ وفحوص الأذونات و unsafe والتراخيص والأسرار؛ وأدوات SBOM وأدلة الإصدار؛ ومشغّلات QEMU و Raspberry Pi |
العتاد
| المكان | دوره |
|---|---|
| QEMU (AArch64) | يُقلع كل نظام هنا أولًا، داخل حاوية التطوير، ويتحقق من مخرجاته |
| Raspberry Pi 5 | اللوحة المرجعية منخفضة التكلفة التي يستطيع أي أحد شراءها. تعمل عليها اليوم واجهة المستخدم والإدخال عبر USB والمؤقتات ومؤقت المراقبة |
| NXP i.MX8 | العتاد المزمع استخدامه في الإنتاج، مع جذر ثقة في العتاد. غير مدعوم بعد |
يُطوَّر NoWayOS على أجهزة Apple silicon (arm64). أما على x86-64 فحزم صورة التطوير مثبّتة الإصدارات ومراجَعة أيضًا، لكن الصورة لم تُبنَ وتُختبر هناك بعد من البداية إلى النهاية.
مبني على
يقف NoWayOS على أكتاف عمل الآخرين، ويقول ذلك صراحة: seL4، وMicrokit، وrust-sel4، وطوابير الشبكة في seL4 Device Driver Framework، وsmoltcp، وrustls، وRustCrypto، وembedded-graphics.