
QRV ऑपरेटिंग सिस्टम
QRV, आधुनिक 64-बिट हार्डवेयर के लिए QNX Neutrino 6.4 ऑपरेटिंग सिस्टम का एक नए सिरे से अनुकूलन और पुनः कार्यान्वयन है, जिसमें RISC-V (rv64g) प्राथमिक आर्किटेक्चर और x86-64 द्वितीयक लक्ष्य है। परियोजना 24 दिसंबर 2020 को शुरू हुई। QRV नाम जानबूझकर QNX ट्रेडमार्क से किसी भी जुड़ाव से बचता है।
QRV एक संपूर्ण ऑपरेटिंग सिस्टम है, केवल एक कर्नेल नहीं। माइक्रोकर्नेल इसका दिल है — लेकिन अधिकांश काम उस चीज़ पर गया है जो इसके चारों ओर है। सबसे उल्लेखनीय है टास्कमैन (taskman), यूज़र-मोड प्रक्रिया/मेमोरी/पथ प्रबंधक (QNX का procnto), जिसे गहराई से फिर से काम किया गया है और कर्नेल से बाहर यूज़र स्पेस में उठा लिया गया है; इसके साथ ही C लाइब्रेरी, डिवाइस ड्राइवर, फाइलसिस्टम, डायनामिक लोडर और सिस्टम सर्वर सभी को पोर्ट किया गया है, 64-बिट स्वच्छ बनाया गया है, और कई स्थानों पर काफी हद तक फिर से लिखा गया है। माइक्रोकर्नेल डिज़ाइन द्वारा छोटा है; इसके आस-पास का ऑपरेटिंग सिस्टम वह है जहाँ QRV का अधिकांश भाग रहता है।
यह कोई ऐसा फोर्क नहीं है जो केवल एक नए कंपाइलर पर पुराने कोड को संकलित करता है। यह एक सावधानीपूर्वक, मॉड्यूल-दर-मॉड्यूल पोर्ट है एक सच्चे LP64 मॉडल के लिए, जिसमें मालिकाना procnto सीमा को तोड़ दिया गया है, IFS/स्टार्टअप तंत्र को बदल दिया गया है, और — नवीनतम रिलीज़ के अनुसार — कर्नेल के बिग कर्नेल लॉक को पूरी तरह से हटा दिया गया है और प्रक्रिया/मेमोरी/पथ प्रबंधक को कर्नेल से बाहर एक यूज़र-मोड सर्वर में ले जाया गया है।
यह README QRV v0.43 का वर्णन करता है।
डेवलपमेंट ब्लॉग, पोर्ट की पूरी कहानी के साथ, https://r-tty.blogspot.com पर है। एक पुस्तक-लंबाई की कथा, The QRV Porting Story, स्रोत ट्री में doc/tex/PortingStory/ के अंतर्गत है।
QRV को Claude Code, Anthropic के एजेंटिक कोडिंग टूल के साथ घनिष्ठ सहयोग में विकसित किया गया है — पोर्टिंग, SMP डिबगिंग और डॉक्यूमेंटेशन (इस README सहित) का अधिकांश भाग लेखक के साथ मानव–AI जोड़ी-प्रोग्रामिंग प्रयास के रूप में किया गया था।
obtain_proj.sh और os/ ट्रीTM_PRIV विशेषाधिकार प्राप्त सिस्कॉलdevb-nvme और fs-qrvQNX एक माइक्रोकर्नेल रियल-टाइम ऑपरेटिंग सिस्टम है जिसका परिभाषित विचार सिंक्रोनस मैसेज पासिंग है। QNX में, कर्नेल स्वयं छोटा होता है — यह जानता है कि थ्रेड को शेड्यूल कैसे करना है, संदेश कैसे पास करने हैं, सिग्नल कैसे डिलीवर करने हैं, टाइमर और इंटरप्ट को कैसे संभालना है, और बहुत कम और कुछ। वह सब कुछ जो एक मोनोलिथिक OS कर्नेल के अंदर रखेगा — प्रक्रिया प्रबंधक, मेमोरी प्रबंधक, फाइलसिस्टम, डिवाइस ड्राइवर, नेटवर्क स्टैक — सामान्य यूज़र प्रक्रियाओं में चलते हैं जिन्हें रिसोर्स मैनेजर कहा जाता है, और वे एक-दूसरे से और अपने क्लाइंट से उसी send / receive / reply IPC प्रिमिटिव के माध्यम से बात करते हैं।
यह आर्किटेक्चर ही QNX को सुरुचिपूर्ण बनाता है, और QRV बिल्कुल यही संरक्षित करता है। एक प्रोग्राम जो फ़ाइल खोलना चाहता है, वह एक संदेश भेजता है; फाइलसिस्टम सर्वर इसे प्राप्त करता है, काम करता है, और उत्तर देता है। कर्नेल केवल रेंडेज़वस की मध्यस्थता करता है। परिणाम एक ऐसा सिस्टम है जहाँ एक ड्राइवर क्रैश हो सकता है और कर्नेल को नीचे लाए बिना पुनः आरंभ किया जा सकता है, जहाँ विश्वसनीय कंप्यूटिंग बेस दसियों किलोबाइट में मापा जाता है, और जहाँ "कर्नेल" और "एप्लिकेशन" के बीच की सीमा एक संदेश है, न कि सिस्कॉल से भरी विशेषाधिकार दीवार।
QRV 2009-युग के QNX Neutrino 6.4 सामुदायिक स्रोतों को लेता है और उस डिज़ाइन को आगे लाता है:
int/uint32_t/pid_t-ऑन-पॉइंटर ट्रंकेशन को ढूंढता और ठीक करता है जो 32-बिट कोड से भरे होते हैं।qemu-system-riscv64 (virt मशीन) और SiFive Unmatched (FU740) डेवलपमेंट बोर्ड है। x86-64 को पोर्टेबिलिटी जांच के रूप में बनाए रखा जाता है।mkifs नहीं है (QRV इसके बजाय मानक CPIO प्रारूप का उपयोग करता है); कोई अलग स्टार्टअप/कर्नेल विभाजन नहीं है (स्टार्टअप सीधे कर्नेल से जुड़ा हुआ है); कोई कॉलआउट और कोई मिनी-ड्राइवर नहीं हैं।Kconfig कॉन्फ़िगरेशन, एक वृद्धिशील कर्नेल लिंक (मॉड्यूल को एक साथ 32→64 मोनोलिथ के रूप में लिंकर पर नहीं फेंका जाता, बल्कि एक-एक करके जोड़ा और परीक्षण किया जाता है), और एक क्रॉस-कंपाइलर टूलचेन (riscv64-linux-gnu-gcc)।procnto पूरे स्थान पर टास्कमैन (taskman) (कार्य प्रबंधक) है; सभी "Neutrino" संदर्भ हटा दिए गए हैं।QRV fork() को लागू नहीं करता है (प्रोग्राम posix_spawn() के माध्यम से शुरू होते हैं), और इसमें कोई डिमांड पेजिंग और कोई स्वैप नहीं है — वही विकल्प जो QNX ने अपनी 8.0 पीढ़ी में चुने थे।
QRV एक साथ दो लाइसेंसों द्वारा शासित है, और यह समझना कि कौन सा कौन सा है, इससे पहले कि आप कुछ भी बनाएँ या पुनर्वितरित करें, आवश्यक है।
QRV का अपना कोड Apache License 2.0 है। इस परियोजना के लिए खरोंच से लिखी गई हर चीज़ — RISC-V पोर्ट, नई बिल्ड सिस्टम, यूज़र-मोड टास्कमैन विभाजन, लॉक-फ्री कर्नेल रीवर्क, हमारे द्वारा लिखे गए ड्राइवर और टूलिंग — Apache 2.0 है। पूरा पाठ LICENSE.txt में है।
QNX-व्युत्पन्न कोड BlackBerry QNX Community License (QCL) 2.0 है। QRV के वे भाग जो 2009 के QNX Neutrino सामुदायिक स्रोतों से उत्पन्न हुए हैं, वे QCL के अंतर्गत बने हुए हैं, जो व्युत्पन्न स्रोतों के गैर-वाणिज्यिक और शैक्षणिक उपयोग की अनुमति देता है। QRV QNX के कोड को पुनः लाइसेंस नहीं करता है, और न ही कर सकता है।
यह दोहरी-लाइसेंस वास्तविकता ठीक वही कारण है कि इस रिपॉजिटरी में बिल्ड-रेडी स्रोत ट्री नहीं है। हमें QNX-व्युत्पन्न स्रोतों को पुनर्वितरित करने की अनुमति नहीं है। इसलिए कोड भेजने के बजाय, यह रिपॉजिटरी एक रेसिपी भेजती है (अगला भाग देखें): एक नक्शा कि प्रत्येक QNX फ़ाइल कहाँ जाती है, साथ ही वे QRV पैच जो इसे बदलते हैं। आप अपस्ट्रीम QNX सामुदायिक स्रोतों को स्वयं, उनके सार्वजनिक मिरर से प्राप्त करते हैं, और रेसिपी आपकी मशीन पर QRV ट्री का पुनर्निर्माण करती है। आपकी प्रति आपकी है; हम केवल अपने स्वयं के Apache-लाइसेंस प्राप्त पैच और मेटाडेटा का पुनर्वितरण करते हैं।
QRV में अन्य अनुमेय लाइसेंसों के तहत कोड भी शामिल है — उदाहरण के लिए FreeBSD से अपनाए गए BSD-लाइसेंस प्राप्त घटक (पुराने QNX मॉड्यूल को बदलने के लिए), xv6 वंश का MIT-लाइसेंस प्राप्त virtio ब्लॉक ड्राइवर, और सिस्टम शेल के रूप में MirBSD Korn शेल (mksh)। WHAT_IS_WHAT.md घटक-दर-घटक प्राधिकृत विवरण है कि कौन सा भाग किस लाइसेंस के अंतर्गत है और कहाँ से आया है — जब भी आप किसी विशेष फ़ाइल या उपप्रणाली के बारे में अनिश्चित हों, तो इससे परामर्श करें।
अंत में, रिपॉजिटरी में PETITION.md है: QNX सॉफ़्टवेयर सिस्टम्स और BlackBerry से एक खुला अनुरोध कि वे ऐतिहासिक 2007–2009 Neutrino स्रोतों को एक अनुमेय OSI-अनुमोदित लाइसेंस के तहत पुनः लाइसेंस करें। यदि आप चाहते हैं कि इस कार्य की नींव एक दिन पूरी तरह से मुक्त हो, तो वह दस्तावेज़ वह स्थान है जहाँ आप अपना नाम जोड़ सकते हैं।
obtain_proj.sh और os/ ट्रीक्योंकि QNX-व्युत्पन्न स्रोतों को यहाँ पुनर्वितरित नहीं किया जा सकता है, यह रिपॉजिटरी एक स्रोत-पुनर्निर्माण वितरण है। इसमें शामिल है: