NoWayOS
HI
GitHub
मेन्यूबंद करें

प्लेटफ़ॉर्म

काम से शुरू होकर, नींव तक बना।

आप अपना एप्लिकेशन Rust में लिखते हैं। NoWayOS उसे, सिर्फ़ उन्हीं ड्राइवरों के साथ जिन्हें वह इस्तेमाल करता है, seL4 माइक्रोकर्नेल पर बिल्ड करता है। जो इमेज निकलती है, उसमें बस वही होता है, और कुछ नहीं।

एप्लिकेशन से इमेज तक

NoWayOS डिवाइस बिल्ड किया जाता है, कॉन्फ़िगर नहीं। चार चरण आपके कोड को एक ऐसे डिवाइस तक ले जाते हैं जो अपना एक काम करता है, और हर चरण पीछे कुछ ऐसा छोड़ता है जिसे आप जाँच सकते हैं।

  1. एप्लिकेशन लिखिए

    Rust में, एक या ज़्यादा प्रोटेक्शन डोमेन के रूप में। इसकी स्क्रीन NoWayOS के छोटे डिक्लेरेटिव UI कोर से बनाइए, या उन्हें React में डिज़ाइन कीजिए और Screen Compiler से बिल्ड के समय बदल दीजिए।

  2. सिस्टम का वर्णन कीजिए

    Microkit का सिस्टम डिस्क्रिप्शन हर प्रोटेक्शन डोमेन, मेमोरी रीजन, चैनल और इंटरप्ट घोषित करता है। उसके बगल में, एक ग्रांट्स फ़ाइल वह सब सूचीबद्ध करती है जो सिस्टम देता है, और एक एक्सपेक्ट फ़ाइल बताती है कि चलते समय उसे क्या प्रिंट करना ही है।

    systems/hello.system   systems/hello.grants   systems/hello.expect
  3. बिल्ड कीजिए

    डेव कंटेनर में। बिल्ड ग्रांट्स को डिस्क्रिप्शन से मिलाकर जाँचता है, फिर इमेज लिखता है, साथ में उसका सॉफ़्टवेयर बिल ऑफ़ मटीरियल्स और उसके seL4 कॉन्फ़िगरेशन का रिकॉर्ड।

    make image SYSTEM=hello
  4. बूट कीजिए, और उसे खुद को जाँचने दीजिए

    पहले 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 पर प्रोटेक्शन-डोमेन पैटर्न; एक सुपरवाइज़र, जो फ़ॉल्ट वाले हिस्से को रोकता है और सिस्टम को साफ़ तरीके से दोबारा शुरू करता है, और बार-बार फ़ॉल्ट होने पर फ़ेल-सेफ़ स्थिति; एक वॉचडॉग
मैसेज स्पष्ट वायर लेआउट वाले टाइप्ड रिकॉर्ड, और शेयर्ड मेमोरी पर सिंगल-प्रोड्यूसर रिंग
ड्राइवर डिस्प्ले (QEMU का ramfb, Raspberry Pi 5 का फ़्रेमबफ़र); इनपुट (virtio, USB कीबोर्ड, माउस और टैबलेट); नेटवर्क (virtio-net, Pi 5 का Ethernet); USB होस्ट (xHCI); UART; टाइमर; Pi 5 का पंखा
नेटवर्किंग smoltcp पर एक IP स्टैक, DHCP और TCP के साथ, जो सिर्फ़ उन्हीं गंतव्यों से जुड़ता है जिनकी सिस्टम अनुमति देता है; rustls और RustCrypto पर एक TLS 1.3 क्लाइंट
समय और भरोसा मोनोटोनिक और वॉल-क्लॉक टाइम, ऐसे टाइप के रूप में जो कभी आपस में नहीं मिलते; ECDSA P-256 सिग्नेचर जाँच; साइन किए गए अपडेट के रिकॉर्ड; हेल्थ-टेस्ट किए गए हार्डवेयर रैंडम स्रोत से सीड
यूज़र इंटरफ़ेस लेआउट, फ़ोकस और हिट-टेस्टिंग वाला एक सीमित डिक्लेरेटिव UI कोर; 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।