जान-बूझकर कम
Single Purpose OS
एक कंप्यूटर, जिसे और कुछ नहीं करना।
न ब्राउज़र। न डेस्कटॉप। न शेल। न लॉगिन। बस एक काम, जो सिर्फ़ ज़रूरी कोड से बना है, seL4 माइक्रोकर्नेल पर अलग-अलग कम्पार्टमेंट में सील है और Rust में लिखा गया है।
आज QEMU में और Raspberry Pi 5 पर चल रहा है · GitHub पर ओपन सोर्स
01 / एक काम का सिद्धांत
हम यहाँ तक कैसे पहुँचे
शुरुआत उन जगहों से हुई, जो एक भी बुरा दिन नहीं झेल सकतीं।
हम ऑपरेटिंग सिस्टम लिखने नहीं निकले थे। हम कुछ बहुत अहम डिवाइसों को सुरक्षित करने निकले थे, और हर बार उनके नीचे वही समस्या मिलती रही।
- ज़िम्मा
- उन सिस्टमों को सुरक्षित करना, जिन पर एक देश चलता है: वे कंट्रोल जो बिजली चालू और पानी साफ़ रखते हैं, वे नेटवर्क जिन पर एक अस्पताल निर्भर है, वे गेटवे जो उनका डेटा बाहर ले जाते हैं, कंट्रोल रूम के टर्मिनल, और उनके आसपास का हर डिवाइस, यहाँ तक कि किसी सार्वजनिक जगह पर लगी वह स्क्रीन भी, जिसके सामने कोई भी अजनबी आ खड़ा होता है। इनमें से हर एक का एक ही काम था। और हर एक ऐसा ऑपरेटिंग सिस्टम चला रहा था, जो हज़ारों काम करने के लिए बना था।
- अड़चन
- जनरल-पर्पज़ सिस्टम हर उस चीज़ के साथ आता है, जिसकी उसे कभी भी ज़रूरत पड़ सकती है: ब्राउज़र, डेस्कटॉप, शेल, लॉगिन, बैकग्राउंड सर्विस। उसे एक ऐप तक लॉक कर दीजिए, फिर भी यह सब नीचे मौजूद रहता है, इस इंतज़ार में कि कोई उस तक लौटने का रास्ता ढूँढ़ ले। हर अतिरिक्त लाइन कुछ ऐसी है जिसे पैच करना पड़ता है, और जिस पर हमला हो सकता है।
- मोड़
- तो हमने उल्टा सवाल पूछा: क्या हो, अगर डिवाइस में सिर्फ़ उसका एक काम हो? हमने seL4 से शुरुआत की, उसके ऊपर अपना सब कुछ Rust में लिखा, हर हिस्से को उसके अपने कम्पार्टमेंट में सील किया और बाकी सब बाहर छोड़ दिया। फिर हमने सबूत लिखकर रखे, ताकि किसी को सिर्फ़ हमारी बात पर भरोसा न करना पड़े।
- अचरज
- फिर हमने आसपास नज़र डाली। सबस्टेशन का गेटवे, कंट्रोल रूम का टर्मिनल, पंप के बगल में लगा पैनल, दो नेटवर्क के बीच का बॉक्स, स्टेशन की दीवार पर लगा डिस्प्ले: लगभग हर समर्पित डिवाइस का एक ही काम होता है। जो क्रिटिकल इंफ्रास्ट्रक्चर के लिए कवच के रूप में शुरू हुआ था, वह इन सबको बनाने का बेहतर तरीका निकला। हम इसे Single Purpose OS कहते हैं।
हमले की गुंजाइश कम। पैच का बोझ कहीं कम। और करने को कुछ नहीं।
हमारा मतलब
मक़सद भीतर गढ़ा गया है। बाकी सब बाहर छोड़ा गया है।
Single Purpose OS एक डिवाइस के एक काम के लिए बनाया जाता है, न कि कुछ भी चलाने के लिए बनाकर फिर एक चीज़ तक लॉक किया जाता है। तीन बातें इसे Single Purpose OS बनाती हैं।
एक काम के लिए बना
डिवाइस इमेज में उसका एप्लिकेशन, वे ड्राइवर जिन्हें वह एप्लिकेशन इस्तेमाल करता है, और कर्नेल होता है। किसी और काम को जो चाहिए हो सकता है, वह वहाँ नहीं है: न ब्राउज़र, न डेस्कटॉप, न शेल, न पैकेज मैनेजर, न यूज़र अकाउंट।
भीतर से सील
हर हिस्सा (स्क्रीन, इनपुट, नेटवर्क, एप्लिकेशन) अपने अलग कम्पार्टमेंट में चलता है और सिर्फ़ उसी तक पहुँचता है जो उसे दिया गया है। एक हिस्से की खराबी को वहीं रुके रहने के लिए डिज़ाइन किया गया है।
अपना हिसाब दिखाता है
इसके साथ सबूत आता है कि भीतर क्या है और हर हिस्सा क्या कर सकता है: हर ग्रांट दर्ज, हर कंपोनेंट सूचीबद्ध, और ऐसी जाँचें जिन्हें कोई भी चला सकता है।
यह कियोस्क मोड नहीं है, जो किसी जनरल-पर्पज़ सिस्टम को एक ऐप तक लॉक करता है और बाकी सब जस का तस छोड़ देता है। यह सिंगल-यूज़र OS भी नहीं है, जो यह सीमित करता है कि कंप्यूटर कौन इस्तेमाल करे, यह नहीं कि उसमें क्या है।
क्या नहीं है
कम सॉफ़्टवेयर। जान-बूझकर।
ज़्यादातर समर्पित डिवाइस एक जनरल-पर्पज़ सिस्टम चलाते हैं, जिसके ऊपर एक एप्लिकेशन होता है और नीचे बाकी सब अब भी मौजूद रहता है। NoWayOS काम से शुरू करता है, सिर्फ़ उतना जोड़ता है जितना ज़रूरी है, और बाकी सब बाहर छोड़ देता है। फ़र्क़ यह है।
| आम तौर पर लॉक किया गया डिवाइस | NoWayOS डिवाइस | |
|---|---|---|
| वेब ब्राउज़र और JavaScript इंजन | शामिल | बनाया ही नहीं गया |
| डेस्कटॉप और विंडो सिस्टम | शामिल | बनाया ही नहीं गया |
| शेल और कमांड लाइन | शामिल | बनाया ही नहीं गया |
| पैकेज मैनेजर | शामिल | बनाया ही नहीं गया |
| यूज़र अकाउंट और लॉगिन | शामिल | बनाया ही नहीं गया |
| बैकग्राउंड सर्विस | शामिल | बनाया ही नहीं गया |
| यह सब लॉक करने वाली सेटिंग्स | शामिल | बनाया ही नहीं गया |
| कर्नेल | जनरल-पर्पज़: करोड़ों लाइनें | seL4: लगभग 10,000 लाइनें |
| ड्राइवर | हर उस हार्डवेयर के लिए जो कभी सामने आ सकता है | सिर्फ़ उस हार्डवेयर के लिए जिसे यह इस्तेमाल करता है |
| आपका एप्लिकेशन | शामिल | शामिल |
Screen Compiler
आपको React पसंद है। हमें भी।
क्या आप उसी वर्कफ़्लो में, जिसे आप पहले से जानते हैं, समृद्ध और आधुनिक इंटरफ़ेस बनाना चाहते हैं? अपनी स्क्रीन React में लिखिए। Screen Compiler उन्हें नेटिव Rust कंपोनेंट में बदल देता है, जो सीधे NoWayOS पर चलते हैं: न ब्राउज़र, न JavaScript, न हमला करने के लिए कोई वेब पेज।
- अपने टूल रखिए: कंपोनेंट, props, डिज़ाइन टोकन और वही एडिटर जो आप पहले से इस्तेमाल करते हैं।
- असली बिल्डिंग ब्लॉक: लेआउट, टेक्स्ट, बटन, टेक्स्ट इनपुट, चेकबॉक्स, रेडियो ग्रुप, कार्ड, सूचनाएँ, प्रोग्रेस बार और आइकन।
- या तो सटीक, या कुछ नहीं। यह अपने सबसेट को सटीक रूप से बदलता है और बाकी हर चीज़ को फ़ाइल, लाइन और कॉलम बताकर ठुकरा देता है। यह कभी अंदाज़ा नहीं लगाता।
- पिक्सेल तक जाँचा हुआ। हर बदली गई स्क्रीन को NoWayOS ड्रॉ करता है और उसे उसकी स्वीकृत इमेज से मिलाया जाता है।
<Column gap={SPACE_SM} padding={SPACE_LG}>
<Text id="title">Welcome</Text>
<Text>Touch Start to begin.</Text>
<Button id="start" onPress={onStart}>
Start
</Button>
</Column>let n1 = b.text("Welcome")?; // welcome.tsx:17:9
let n2 = b.text("Touch Start to begin.")?;
let n5 = b.button("Start", actions::START)?;
let n0 = b.column(
ui::Layout::new()
.gap(super::tokens::SPACE_SM)
.padding(super::tokens::SPACE_LG),
&[n1, n2, n5],
)?;Screen Compiler की एक टेस्ट स्क्रीन और उससे बनने वाले Rust का छोटा किया गया रूप।
यह क्यों मायने रखता है
एक काम। और वही काफ़ी है।
किसी कंप्यूटर को एक ही चीज़ के लिए बनाइए, तो आप उसे बिल्कुल अलग ढंग से बना सकते हैं। इससे आपको यह मिलता है।
ज़्यादा सुरक्षित
जो कभी बनाया ही नहीं गया, उसे एक्सप्लॉइट करने का कोई रास्ता नहीं।
- न ब्राउज़र इंजन, न विंडो सिस्टम, न शेल, न पैकेज मैनेजर, न यूज़र अकाउंट। जो इमेज में है ही नहीं, उसे इसके ख़िलाफ़ इस्तेमाल नहीं किया जा सकता।
- स्क्रीन, इनपुट, नेटवर्क और आपका एप्लिकेशन, हर एक अपने सील किए गए कम्पार्टमेंट में रहता है और सिर्फ़ उसी तक पहुँचता है जो उसे दिया गया है। इसे इस तरह बनाया गया है कि एक हिस्से की खराबी उसी हिस्से में रहे।
- इसके केंद्र में seL4 है, जिसे seL4 Foundation “दुनिया का सबसे उच्च आश्वासन वाला और सबसे तेज़ ऑपरेटिंग सिस्टम कर्नेल” कहता है।
- शुरू से आख़िर तक Rust। unsafe कोड सिर्फ़ कुछ गिने-चुने, रिव्यू किए गए क्रेट में है, और बिल्ड इस सूची को लागू करता है।
ज़्यादा कुशल
कुछ भी निठल्ला नहीं। कुछ भी आड़े नहीं।
- न बैकग्राउंड सर्विस, न उस सॉफ़्टवेयर का अपडेटर जिसे आप कभी इस्तेमाल ही नहीं करते। चालू कीजिए, और यह सीधे अपने एक काम पर लग जाता है।
- हर बाइट बिल्ड के समय तय होती है: हर हिस्से को एक तय मात्रा में मेमोरी मिलती है और वह उससे ज़्यादा कभी नहीं ले सकता। ज़्यादातर डिवाइस कोड कोई मेमोरी एलोकेट ही नहीं करता, और TLS क्लाइंट को भी एक तय बजट मिलता है: अगर वह कभी ख़त्म हो जाए, तो क्लाइंट बढ़ने के बजाय साफ़-सुथरे ढंग से रुक जाता है।
- एक साफ़, नेटिव इंटरफ़ेस, जो सिर्फ़ उतना दोबारा पेंट करता है जितना बदला है, और Raspberry Pi 5 जैसे कम लागत वाले हार्डवेयर पर भी सहज।
काम करने में आसान
एक भाषा। एक कंटेनर। पहले एमुलेटर।
- ड्राइवर से लेकर यूज़र इंटरफ़ेस तक Rust।
- स्क्रीन React में डिज़ाइन कीजिए। Screen Compiler बिल्ड के समय उन्हें नेटिव Rust में बदल देता है: एक आधुनिक इंटरफ़ेस, डिवाइस पर बिना ब्राउज़र इंजन और बिना JavaScript के। या उन्हें Rust में लिखिए।
- टूलचेन, seL4 Microkit SDK और QEMU एक ही डेव कंटेनर में पिन किए हुए आते हैं। आपकी मशीन को सिर्फ़ Podman और make चाहिए, और Raspberry Pi चलाने के लिए Python।
साबित करने में आसान
हर ग्रांट दर्ज। हर इमेज का पूरा ब्योरा।
- सिस्टम जो भी कैपेबिलिटी देता है, वह एक फ़ाइल में सूचीबद्ध होती है, और अगर दोनों मेल न खाएँ, तो बिल्ड फ़ेल हो जाता है।
- हर इमेज के साथ एक सॉफ़्टवेयर बिल ऑफ़ मटीरियल्स और उसके seL4 कॉन्फ़िगरेशन का रिकॉर्ड आता है।
- बाउंडेड प्रूफ़ कि हर मैसेज डिकोडर कभी पैनिक, ओवरफ़्लो या सीमा के बाहर रीड नहीं करता, साथ में फ़ज़िंग और लाइसेंस व एडवाइज़री जाँचें: हर एक ऐसा कमांड है जिसे आप खुद चला सकते हैं।
जब सब कुछ इसी पर टिका हो, तो इसे बस एक काम दीजिए।
कुछ डिवाइसों का काम इतना अहम होता है कि उसमें किसी भटकाव की जगह नहीं: बिजली नेटवर्क के कंट्रोल, जल संयंत्र से बाहर जाने वाला गेटवे, कंट्रोल रूम का टर्मिनल, दो नेटवर्क के बीच की सीमा। NoWayOS को उस भूमिका के इर्द-गिर्द डिज़ाइन किया गया है जो हर डिवाइस को निभानी है, और साथ में वह सबूत है जो आपको यह समझने में मदद करता है कि भीतर क्या है।
विशेषण नहीं, सबूत
यह अपने काम से काम रखता है। आप जाँच सकते हैं।
सुरक्षा का कोई भी दावा उतना ही अच्छा है, जितना उसके पीछे का सबूत। NoWayOS सबूत लिखकर रखता है, और उसका हर हिस्सा एक ऐसे कमांड से आता है जिसे आप चला सकते हैं।
हर ग्रांट दर्ज
हर सिस्टम की ग्रांट्स फ़ाइल उसकी दी गई हर प्रायोरिटी, मेमोरी रीजन, डिवाइस, इंटरप्ट और चैनल की सूची रखती है। अगर सिस्टम और सूची मेल न खाएँ, तो बिल्ड फ़ेल हो जाता है।
आइसोलेशन, तोड़ने की कोशिश से परखा गया
आइसोलेशन टेस्ट उस तक पहुँचने की कोशिश करते हैं जो उन्हें दिया नहीं गया, और seL4 को उन्हें रोकना ही होता है। जान-बूझकर चौड़ी की गई ग्रांट वाला एक वेरिएंट फ़ेल होना ही चाहिए, जिससे पता चलता है कि टेस्ट फ़ेल हो सकता है।
हर इमेज का पूरा ब्योरा
हर इमेज के लिए एक CycloneDX सॉफ़्टवेयर बिल ऑफ़ मटीरियल्स: कर्नेल, लोडर, हर प्रोटेक्शन डोमेन और उसके भीतर के क्रेट, हर एक अपने हैश के साथ।
गेट पहुँच से बाहर
हर योगदान को जिन जाँचों से गुज़रना होता है, वे Defence Agent में रहती हैं, जो उनकी अपनी अलग सार्वजनिक रिपॉज़िटरी है, और किसी गेट को छूने वाला पुल रिक्वेस्ट मेंटेनर के लिए फ़्लैग कर दिया जाता है।
खुले में
चार प्रोजेक्ट। हर एक का एक काम।
चारों ओपन सोर्स हैं, और GitHub पर NoWayOS संगठन के तहत खुले में विकसित होते हैं। इन्हें क्लोन कीजिए, बिल्ड कीजिए और हर पंक्ति ख़ुद जाँचिए।
NoWayOS
Single Purpose OS।
seL4 और Microkit पर प्रोटेक्शन-डोमेन पैटर्न, टाइप्ड मैसेज, ड्राइवर, नेटवर्किंग और एक नेटिव यूज़र इंटरफ़ेस, साथ में डेव कंटेनर और वे जाँचें जिनसे हर NoWayOS रिपॉज़िटरी बिल्ड होती है।
- स्थिति
- विकास के दौर में
- लाइसेंस
- MIT OR Apache-2.0
Screen Compiler
React में डिज़ाइन कीजिए। नेटिव Rust शिप कीजिए। डिवाइस पर कोई ब्राउज़र नहीं।
घोषित सबसेट में TSX में लिखी React स्क्रीन को NoWayOS के यूज़र इंटरफ़ेस के लिए Rust में बदलता है। यह बिल्ड के समय, आपकी मशीन पर या CI में चलता है, और कभी शिप नहीं होता।
- स्थिति
- विकास के दौर में: सबसेट v0 और v1 के पहले हिस्से
- लाइसेंस
- MIT
Showcase
सुरक्षित एप्लिकेशन, जिन्हें आप Raspberry Pi पर चला सकते हैं।
सुरक्षित सेल्फ़-सर्विस स्क्रीन के लिए एक किट, आगे निर्माण के आधार के रूप में एक रेफ़रेंस एप्लिकेशन, और काल्पनिक ब्रांड वाले उदाहरणों का एक लॉन्चर, जिसमें Raspberry Pi 5 बूट होता है।
- स्थिति
- शुरुआती दौर में, और डिप्लॉय करने लायक नहीं
- लाइसेंस
- MIT OR Apache-2.0
Defence Agent
वे गेट जिनसे हर योगदान को गुज़रना होता है, पुल रिक्वेस्ट की पहुँच से बाहर।
हर वह सुरक्षा गेट जिससे NoWayOS के ओपन प्रोजेक्ट में किसी बदलाव को गुज़रना होता है, उस ख़तरे के साथ लिखा हुआ जिसका वह जवाब देता है और इस जानकारी के साथ कि उसे कौन बदल सकता है, और वह एजेंट जो उन्हें चलाता है। कोई पुल रिक्वेस्ट कभी उस चीज़ को न बदलता है, न मुहैया कराता है, जो उसे परखती है।
- स्थिति
- सार्वजनिक: गेट लिखे जा चुके हैं; एजेंट और उसके टूल आगे आएँगे
- लाइसेंस
- MIT OR Apache-2.0
कमर्शियल पार्टनर
कमर्शियल प्रोडक्ट, NoWayOS पर बने।
NoWayOS का प्रायोजक Adappt.ai इसका पहला कमर्शियल पार्टनर है। वह NoWayOS पर दो कमर्शियल प्रोडक्ट बना रहा है, और दोनों अभी विकास के दौर में हैं।
कमर्शियल पार्टनर बनने में रुचि है? partners@nowayos.com पर ईमेल करें
- Remote Desktop
- एक मज़बूत झरोखा। रिमोट Windows डेस्कटॉप के लिए एक सुरक्षित स्टेशन, जिसे कनेक्शन को उसके अपने कम्पार्टमेंट में सील करने और क्रेडेंशियल्स को उसकी पहुँच से दूर रखने के लिए डिज़ाइन किया गया है।
- Data Diode
- वापसी का कोई रास्ता नहीं। किसी संरक्षित नेटवर्क से डेटा बाहर निकालने के लिए एकतरफ़ा सीमा, जिसे एक ऐसे लिंक के इर्द-गिर्द डिज़ाइन किया गया है जो रोशनी को सिर्फ़ एक दिशा में ले जाता है।
अभी कहाँ है
आज चल रहा है। अभी पूरा नहीं हुआ।
NoWayOS अभी विकास के दौर में है और प्रोडक्शन के लिए अभी तैयार नहीं है, और इसके API बदलेंगे। आज क्या चलता है, और आगे क्या आएगा, वह यह है।
- QEMU में
- पचास से ज़्यादा सिस्टम बूट होते हैं और अपना आउटपुट खुद जाँचते हैं, पहले प्रोटेक्शन डोमेन से लेकर DHCP लीज़ लेते नेटवर्क स्टैक, सुपरवाइज़र की फ़ेल-सेफ़ स्थिति और क्लिक किए जा सकने वाले यूज़र इंटरफ़ेस तक।
- Raspberry Pi 5 पर
- HDMI स्क्रीन पर यूज़र इंटरफ़ेस, USB कीबोर्ड और माउस, टाइमर, वॉचडॉग और सुपरवाइज़र का रीसेट, सब बोर्ड पर चलते हैं। इसके और हार्डवेयर को चालू करने का काम जारी है।
- अभी आना बाकी
- सिक्योर बूट, डिवाइस पर लागू होने वाले साइन किए गए अपडेट, और इंडस्ट्रियल हार्डवेयर (NXP i.MX8)।
- seL4 के प्रूफ़
- हर सिस्टम seL4 पर चलता है, लेकिन अभी तक कोई भी NoWayOS इमेज ऐसा कॉन्फ़िगरेशन इस्तेमाल नहीं करती जिसे seL4 के पूरे हो चुके प्रूफ़ कवर करते हों। हर इमेज दर्ज करती है कि वह कौन-सा कॉन्फ़िगरेशन इस्तेमाल करती है।
काम पर नज़र रखें
एक मक़सद। खोजने को बहुत कुछ।
डिज़ाइन से शुरू कीजिए, सबूत की जाँच कीजिए, या डेवलपर गाइड के साथ अपना पहला सिस्टम बनाइए। वैसे, यह साइट भी उसी नियम पर चलती है: न स्क्रिप्ट, न कुकी, और करने को कुछ नहीं।