प्रमुख परियोजना · ParanoidBSD

एक ऑपरेटिंग सिस्टम, जहाँ अधिकार रखा जाता है, मान नहीं लिया जाता

लगभग हर सेंध एक ही तरह लगती है: कोई प्रोग्राम उस चीज़ तक पहुँच जाता है जिसे उसे छूना ही नहीं था। ParanoidBSD ऐसा ऑपरेटिंग सिस्टम है जो यह होने ही नहीं देता। हर प्रोग्राम को सिर्फ़ उतना थमाया जाता है जितनी उसे ज़रूरत है, और बाक़ी सब महज़ मना नहीं है — वह पहुँच से ही बाहर है। HardenedBSD पर बना, आधुनिक C++ में दोबारा लिखा गया, और मूल कोड साथ रखा गया है ताकि हर बदलाव उससे मिलाकर जाँचा जा सके।

भाषाC / C++23
आधारHardenedBSD 15-STABLE
डेस्कटॉपKDE Plasma 6
आख़िरी पुशहाल ही में
स्टार—
रिपॉज़िटरी का ढाँचा
pbsd/C++23 मॉड्यूल — कर्नेल नाभिक, यूज़रलैंड पोर्ट, UDA, BIFROST, कंपोज़िटर, थीम
hbsd/HardenedBSD 15-STABLE का स्रोत — मूल, जिसे विनिर्देश की तरह रखा गया है
kde/डेस्कटॉप लहर के लिए Plasma 6, KWin और फ़्रेमवर्क
tools/सूची, नियतात्मक पुनर्लेखन चरण, एजेंट पोर्ट, Clang सहायक
docs/विनिर्देश, सुरक्षा मॉडल, माइग्रेशन की स्थिति, उत्पत्ति
scripts/Windows Subsystem for Linux (WSL) ड्राइवर स्क्रिप्ट, वॉचडॉग, प्रगति कंसोल
सीधी-सादी भाषा में

यह क्या है, एक मिनट में

समस्या

कोई संगठन जो कुछ चलाता है, उस सबके नीचे एक ऑपरेटिंग सिस्टम बैठा होता है। ज़्यादातर दशकों पुराने कोड पर बने हैं, और वे किसी भी प्रोग्राम को कुछ भी माँगने देते हैं — इजाज़त देनी है या नहीं, यह सिस्टम बाद में तय करता है। यही वजह है कि किसी हानिरहित चीज़ की एक ख़ामी, जैसे स्क्रीन पर फ़ॉन्ट बनाने वाला कोड, पासवर्ड चोरी पर जाकर ख़त्म हो सकती है।

समाधान

ParanoidBSD यह बदल देता है कि कोई प्रोग्राम शुरू में माँग ही क्या सकता है। माँग के बाद इजाज़त जाँचने के बजाय, वह हर प्रोग्राम को उन चीज़ों की एक छोटी सूची थमा देता है जिन्हें वह छू सकता है, और बाक़ी किसी का नाम लेने का रास्ता ही नहीं देता। एक हिस्से की ख़ामी बाक़ी सब तक पहुँचने का रास्ता नहीं रह जाती।

यह किसके लिए है

रक्षा और सरकारी आपूर्तिकर्ता, जिनसे अब ज़्यादा सुरक्षित भाषाओं में लिखा सॉफ़्टवेयर माँगा जा रहा है। वे उपकरण जो सालों मैदान में लगे रहते हैं और जिन्हें जल्दी पैच नहीं किया जा सकता — कारख़ाने के कंट्रोलर, चिकित्सा मशीनें, बिजली-पानी का हार्डवेयर। वे शिक्षक और शोधकर्ता जिन्हें ऐसा असली ऑपरेटिंग सिस्टम चाहिए जो शुरू से आख़िर तक पढ़ा जा सके।

सुरक्षा की शुरुआत अनुप्रयोग की परत से नहीं होनी चाहिए। उसकी शुरुआत नीचे बैठे ऑपरेटिंग सिस्टम से होनी चाहिए। इस पृष्ठ का बाक़ी हिस्सा इंजीनियरिंग है: क्या बदला गया, उसे कैसे जाँचा गया, और क्या अभी बाक़ी है।
समस्या

परिवेशी अधिकार वह बग है जिसे आप पैच नहीं कर सकते

किसी पारंपरिक Unix पर, किसी प्रोसेस के पास होता नहीं है वह हक़ जिससे वह खोल सके /etc/master.passwd। वह बस माँगता है, और कर्नेल बाद में तय करता है, इस आधार पर कि प्रोसेस ख़ुद को कौन बताता है। हर प्रोसेस सिस्टम के हर संसाधन का नाम ले सकता है। नामस्थान वैश्विक और परिवेशी है; जाँच देर से आई एक सोच भर है।

यही वजह है कि किसी फ़ॉन्ट रेंडरर में पार्सिंग का एक अकेला बग क्रेडेंशियल चोरी बन सकता है। रेंडरर को पासवर्ड फ़ाइल की कभी ज़रूरत नहीं थी — पर संरचना में ऐसा कुछ नहीं था जो उसे माँगने से रोकता।

HardenedBSD यहाँ पहले से गंभीर काम करता है: पता-स्थान विन्यास यादृच्छिकीकरण (ASLR), जो प्रोग्राम को हर बार कहीं और लोड करता है ताकि हमलावर अंदाज़ा न लगा सके कि कौन-सी चीज़ कहाँ है; नियंत्रण-प्रवाह अखंडता (CFI), जो प्रोग्राम को ऐसे कोड की ओर मोड़े जाने से रोकती है जिसे चलाने के लिए वह बना ही नहीं था; और इनके साथ PaX से निकले बचाव, SafeStack तथा कठोर किए गए मेमोरी आवंटक। PBSD यह सब बनाए रखता है और नीचे पड़े सवाल की शक्ल बदल देता है — “क्या इस प्रोसेस को इजाज़त है?” से “क्या इस प्रोसेस के पास उसका हैंडल है?” तक

एक syscall के दो जवाब

// Ambient authority — the traditional path
int fd = open("/etc/master.passwd", O_RDONLY);
// kernel walks a global namespace, then
// checks uid/gid/MAC after the fact

// Handle nucleus — the PBSD path
auto f = dir_handle.open("master.passwd", Rights::Read);
// there is no global namespace to walk.
// no handle, no name, no operation.

फ़र्क़ की एक उदाहरणात्मक शक्ल, न कि उन कॉलों की अक्षरशः सूची जो कोई प्रोग्राम कर्नेल में करता है — यानी उसका अनुप्रयोग प्रोग्रामिंग इंटरफ़ेस, या API। आधिकारिक मॉडल यहाँ है: docs/.

दो अधिकार-मॉडल आमने-सामने: परिवेशी अधिकार में प्रोसेस सॉकेट, exec और ptrace तक पहुँच जाता है और पासवर्ड फ़ाइल से उसे माँगने के बाद ही मना किया जाता है; हैंडल नाभिक में सिर्फ़ उसी संसाधन का नाम लिया जा सकता है जिसका हैंडल उसके पास है
पूरा आरेख देखने के लिए स्क्रॉल करें →
जाँच कहाँ होती है। बाईं ओर अनुरोध हमेशा सफ़र करता है और फ़ैसला बाद में होता है। दाईं ओर, चार में से तीन कामों के पास माँगने के लिए कोई नाम ही नहीं है, इसलिए मना करने को कुछ बचता ही नहीं।
इंटरैक्टिव

एक syscall को नाभिक से होकर चलाइए

प्रोसेस को कुछ हैंडल दीजिए, उससे कोई काम करवाने के लिए चुनिए, और दोनों अधिकार-मॉडलों के बीच स्विच कीजिए। फ़ैसला और उसकी वजह आपके ब्राउज़र में ही तुरंत निकाले जाते हैं — यह डिज़ाइन का एक शिक्षण मॉडल है, कोई कर्नेल एमुलेटर नहीं।

कैपेबिलिटी नाभिक — रेफ़रेंस मॉनिटर

प्रोसेस कोशिश करता है…

ट्रेस

प्रोसेस के पास मौजूद हैंडल

फ़ैसला

कोशिश का इंतज़ार
मॉनिटर से गुज़ारने के लिए कोई काम चुनिए।
पहुँच में
0
मना
0

“पहुँच में” यह गिनता है कि मौजूदा मॉडल के तहत यह प्रोसेस गिनाए गए कामों में से कितने कर भी सकता है। परिवेशी अधिकार में पहुँच पहचान से तय होती है; नाभिक में, उन हैंडलों से जो उसके पास सचमुच हैं।

इस पृष्ठ के लिए लिखा गया, PBSD के सुरक्षा डिज़ाइन का एक शिक्षण मॉडल। असली नाभिक यहाँ है: pbsd/; विनिर्देश यहाँ है: docs/specs/.
पोर्ट

चार चरण, और एक मॉडल जो ख़ुद को कभी प्रमाणित नहीं करता

किसी बर्कले सॉफ़्टवेयर डिस्ट्रिब्यूशन (BSD) के यूज़रलैंड और कर्नेल को हाथ से C++23 में पोर्ट करना दस साल का काम है। किसी भाषा मॉडल से फ़ाइलें दोबारा लिखवाकर पोर्ट करना, भरोसेमंद दिखने वाला कचरा बनाने का तेज़ रास्ता है। PBSD इनमें से कुछ भी नहीं करता।

ParanoidBSD की पोर्ट पाइपलाइन: सूची, नियतात्मक चरण, एजेंट लूप और एक सत्यापन पहरा, जिसमें ख़ारिज फ़ाइलें वापस लूप में लौटती हैं
पूरा आरेख देखने के लिए स्क्रॉल करें →
कोई फ़ाइल पोर्ट की हुई फ़ाइल कैसे बनती है। लाल बिंदुदार रास्ता ही असली बात है — जो काम सत्यापन में फ़ेल होता है, वह प्रगति में गिने जाने के बजाय वापस लूप में चला जाता है।
चरण 1

सूची

tools/inventory_c_sources.py और clang_cxx23_port.py हर C फ़ाइल को कठिनाई के हिसाब से अंक देते हैं और नतीजा लिखते हैं c_inventory.csv। दायरे के बारे में कुछ भी अंदाज़े से तय नहीं होता।

चरण 2

नियतात्मक चरण

run_todo_passes.py श्रेणी 0–4 में सुरक्षित यांत्रिक पुनर्लेखन लागू करता है। इसमें कोई मॉडल नहीं आता। कोई चरण जिस चीज़ से इनकार कर दे, उसे ज़बरदस्ती थोपा नहीं जाता, बल्कि दर्ज कर दिया जाता है refusals.jsonl में।

चरण 3

एजेंट लूप

pbsd.py स्टब और इनकार की गई फ़ाइलों को DeepSeek Flash से भरता है, और ज़रूरत पड़ने पर अधिकतम रीज़निंग प्रयास के साथ Pro तक ले जाता है — तयशुदा तौर पर 48 Flash और 24 Pro वर्कर। Kickstarter इसी के लिए पैसा जुटा रहा है।

चरण 4

सत्यापन पहरा

कंपाइल, ASan, UBSan, विभेदक निष्पादन, और कंपाइलर के मध्यवर्ती निरूपण (IR) के स्तर पर तुलना। जो फ़ाइल सिर्फ़ कंपाइल होती है वह असत्यापित है। नाकामियाँ यहाँ जाती हैं: agent_port_failures.jsonl.

BSD डीमन दो बार: बाईं ओर मूल लाल शुभंकर, दाईं ओर वही आकृति सियान वायरफ़्रेम में बनी हुई, और बीच में बराबर का चिह्न
पूरी परियोजना एक तस्वीर में। वही डीमन, वही आकार, एक अलग रूप में दोबारा बना हुआ — और बराबर का चिह्न वह हिस्सा है जिसे फ़ाइल दर फ़ाइल, विभेदक सत्यापन से कमाना पड़ता है। BSD Daemon © Marshall Kirk McKusick.
“बराबर” का मतलब क्या होना चाहिए

पोर्ट होना बराबरी का दावा है

यह कहना कि कोई फ़ाइल पोर्ट हो गई, यह कहना है कि नई फ़ाइल पुरानी जैसा ही बर्ताव करती है। यह एक दावा है, और दावों को सबूत चाहिए। जो C++23 पुनर्लेखन कंपाइल हो जाता है, वह भरोसेमंद दिखने वाला वायरफ़्रेम है; वह अभी वही डीमन नहीं है।

इसलिए बराबर का चिह्न ही पहरा है। विभेदक निष्पादन दोनों को चलाकर दिखने वाले बर्ताव की तुलना करता है। IR तुलना जाँचती है कि कंपाइलर के लिए दोनों का मतलब एक ही है। जब तक इनमें से कोई एक पास नहीं होता, फ़ाइल माइग्रेशन लॉग में खुली रहती है और प्रगति में नहीं गिनी जाती — चाहे वह कितनी भी पूरी दिखती हो।

वह नियम जिससे इस बात का बचाव किया जा सकता है: मॉडल ख़ुद को प्रमाणित नहीं करता। वह सुझाव देता है; फ़ैसला नियतात्मक औज़ार करते हैं। रिपॉज़िटरी की हर ग़ैर-समझौता शर्त इसी सीमा को बचाए रखने के लिए है — और यही वजह है कि सिर्फ़ इन्फ़रेंस पर ज़्यादा ख़र्च करके पोर्ट तेज़ नहीं चलाया जा सकता।
ग़ैर-समझौता शर्तें

वे नियम जिनसे यह रिपॉज़िटरी सचमुच बँधी है

कोई फ़ाइल तब तक पूरी नहीं, जब तक विभेदक या IR सत्यापन पास न हो
सिर्फ़ कंपाइल हो जाना असत्यापित माना जाता है। पोर्ट की गई फ़ाइल को या तो विभेदक निष्पादन में HardenedBSD के मूल जैसा ही दिखने वाला बर्ताव देना होगा, या IR के स्तर पर मेल खाना होगा। जो फ़ाइलें इनमें से कोई भी पास नहीं करतीं, वे माइग्रेशन लॉग में खुली रहती हैं और प्रगति के आँकड़ों में नहीं गिनी जातीं।
ईमानदारी से पोर्ट कीजिए — मूल के बग चुपचाप “ठीक” मत कीजिए
HardenedBSD ट्री ही व्यवहार का विनिर्देश है। अगर मूल में कोई ख़राबी है, तो पोर्ट उसे भी दोहराता है, क्योंकि विभेदक परीक्षण किसी सुधार और किसी बिगाड़ में फ़र्क़ नहीं कर सकता। सुधार बाद में किए जाते हैं और अलग से दर्ज होते हैं, ताकि बदलाव किसी अनुवाद के भीतर दबने के बजाय दिखे और उसकी समीक्षा हो सके।
पहले नियतात्मक औज़ार; मॉडल सिर्फ़ बचा हुआ भरते हैं
यांत्रिक पुनर्लेखन उन स्क्रिप्टों से होते हैं जो हर बार एक जैसा बर्ताव करती हैं। मॉडल सिर्फ़ बचे हुए हिस्से पर लगाए जाते हैं — सूची की स्टब प्रविष्टियाँ और वे फ़ाइलें जिन्हें नियतात्मक चरणों ने मना कर दिया। इससे पोर्ट का ज़्यादातर हिस्सा दोहराने लायक़ और जाँचने लायक़ रहता है, और मॉडल का आउटपुट उन्हीं हिस्सों तक सीमित रहता है जो वैसे भी किसी इंसान को हाथ से लिखने पड़ते।
कर्नेल का C++ फ़्रीस्टैंडिंग है: -fno-exceptions -fno-rtti
कर्नेल नाभिक किसी होस्टेड C++ रनटाइम पर निर्भर नहीं रह सकता। न एक्सेप्शन, न रन-टाइम टाइप जानकारी (RTTI), न कर्नेल में घुसते ही हीप से आवंटन करने वाले मानक लाइब्रेरी के रास्ते। ये पाबंदियाँ लिखी हुई हैं docs/specs/KERNEL_CXX_ABI.md में, ताकि कोई योगदानकर्ता बिना अंदाज़ा लगाए बता सके कि कर्नेल के संदर्भ में क्या जायज़ है।
पूरा माने जाने से पहले हर मॉड्यूल को एक उत्पत्ति प्रविष्टि चाहिए
docs/PROVENANCE.md दर्ज करता है कि हर मॉड्यूल कहाँ से आया और किस लाइसेंस के अंतर्गत। यही वह चीज़ है जो नीचे लिखे लाइसेंस के बयान को महज़ इरादा नहीं, बल्कि जाँचने लायक़ बनाती है — आप मॉड्यूल दर मॉड्यूल जाँच सकते हैं कि कौन-सा कोड HardenedBSD से निकला है और कौन-सा नया PBSD का काम है।
लाइसेंसिंग

दो लाइसेंस, ईमानदारी से अलग किए हुए

PBSD का नया कोड — नाभिक, C++23 मॉड्यूल, औज़ार — Imortek की मानक शर्तों पर दिया जाता है: GNU Affero जनरल पब्लिक लाइसेंस (AGPL-3.0+), जो व्यक्तिगत उपयोग, दान-संस्थाओं, शिक्षा और सालाना 50,000 ऑस्ट्रेलियाई डॉलर (AUD) से कम कमाने वाले संगठनों के लिए मुफ़्त है, और उससे ऊपर श्रेणीबद्ध वाणिज्यिक लाइसेंस।

HardenedBSD से निकला कोड अपने मूल BSD लाइसेंस पर ही रहता है। उसका लाइसेंस बदला नहीं जा सकता और Imortek ऐसा दावा भी नहीं करता। docs/PROVENANCE.md में दर्ज है कि कौन-सा कौन-सा है।

पूरी लाइसेंस शर्तें →
AGPL-3.0+ & वाणिज्यिक

नया PBSD काम

pbsd/, tools/, scripts/, कैपेबिलिटी नाभिक, UDA, BIFROST, कंपोज़िटर और थीम।

BSD (अपरिवर्तित)

HardenedBSD से निकला हुआ

hbsd/ और हर वह पोर्ट की गई फ़ाइल जो उसी तक जाती है। मूल शर्तें, मूल श्रेय।

यह किसके लिए है

एक ऑपरेटिंग सिस्टम जिसमें सेंध लगाना ज़्यादा मुश्किल है

ज़्यादातर सेंधें एक ही तरह की ग़लती का फ़ायदा उठाती हैं: कोई प्रोग्राम उस मेमोरी तक पहुँच जाता है जहाँ उसे कभी जाना ही नहीं था। ParanoidBSD एक आज़माए हुए सिस्टम को ऐसी भाषा में दोबारा बनाता है जिसमें वह ग़लती कहीं ज़्यादा मुश्किल है, और हर प्रोग्राम को सिर्फ़ उतनी ही पहुँच देता है जितनी उसे सचमुच चाहिए।

01

रक्षा और सरकारी आपूर्तिकर्ता

ख़रीदार अब ऐसी भाषाओं में बने सॉफ़्टवेयर पर ज़ोर देने लगे हैं जो हमलों की पूरी-की-पूरी श्रेणियाँ बंद कर देती हैं। शून्य से दोबारा शुरू करने में दस साल लगते हैं। यह उसकी जगह एक आज़माए हुए सिस्टम को पार ले जाता है, और हर बदली गई फ़ाइल का तथा वह बदलाव कैसे जाँचा गया, इसका लिखित रिकॉर्ड रखता है।

02

ऐसे उपकरण जो सालों तक मैदान में लगे रहते हैं

फ़ैक्टरी के कंट्रोलर, मेडिकल मशीनें, बिजली-पानी का हार्डवेयर। जब कोई ख़ामी निकलती है, तो अक्सर आप यूँ ही अपडेट नहीं भेज सकते। यह इस बात की हद बाँधता है कि घुसपैठिया अंदर आने के बाद कितनी दूर तक जा सकता है, क्योंकि कोई भी प्रोग्राम उससे आगे नहीं पहुँच सकता जो उसे सौंपा गया है।

03

विश्वविद्यालय और सुरक्षा शोधकर्ता

एक असली ऑपरेटिंग सिस्टम, इतना छोटा कि शुरू से आख़िर तक पढ़ा जा सके, और तुलना के लिए मूल उसके बगल में रखा हुआ। पढ़ाने के लिए और ऐसी चीज़ पर विचार आज़माने के लिए उपयोगी, जो सचमुच चलती है।

क्या यहाँ आपको अपनी स्थिति दिख रही है? यह अभी बीटा परीक्षण के लिए खुला है, और जिनके लिए यह बना है, उन्हीं की राय इसे सचमुच बदलती है। बीटा टेस्टर बनें →
Kickstarter चालू · 12 नवंबर 2026 को बंद

पोर्ट उस कंप्यूट पर चलता है जो उसके पास नहीं है

नियतात्मक चरण मुफ़्त हैं। जो एजेंट लूप बचा हुआ हिस्सा भरता है — और जो सत्यापन रन उस पर पहरा देते हैं — वे मुफ़्त नहीं। माँग बस इतनी ही है।