अपडेट पर वापस जाएँ
New releaseSep 17, 2026

fil-c v0.685

फिल-सी: सी और सी++ के लिए पूर्णतः संगत मेमोरी सुरक्षा

साझा करें

Fil-C 0.684

Fil-C, C और C++ का एक अत्यंत संगत मेमोरी-सुरक्षित कार्यान्वयन है। बहुत सारा सॉफ़्टवेयर Fil-C के साथ बिना किसी या न्यूनतम बदलाव के संकलित और चलता है। सभी मेमोरी सुरक्षा त्रुटियाँ Fil-C पैनिक के रूप में पकड़ी जाती हैं। Fil-C यह समवर्ती कचरा संग्रहण (concurrent garbage collection) और अदृश्य क्षमताओं (invisible capabilities) के संयोजन का उपयोग करके प्राप्त करता है (मेमोरी में प्रत्येक पॉइंटर की एक संगत क्षमता होती है, जो C एड्रेस स्पेस को दिखाई नहीं देती)। प्रत्येक मूलभूत C ऑपरेशन (जैसा कि LLVM IR में देखा जाता है) को क्षमता के विरुद्ध जाँचा जाता है। Fil-C में कोई unsafe कथन नहीं है और असुरक्षित कोड के लिए केवल सीमित FFI है।

Fil-C विशेष है क्योंकि:

  • Fil-C बिना किसी बच निकलने के रास्ते के पूर्ण सुरक्षा प्राप्त करता है। Fil-C में कोई unsafe कीवर्ड नहीं है जिसका उपयोग सुरक्षा बंद करने के लिए किया जा सके। असुरक्षित कोड से लिंक करना गंभीर रूप से प्रतिबंधित है।

  • Fil-C का क्षमता-आधारित दृष्टिकोण CHERI जैसी हार्डवेयर क्षमताओं के समान स्तर की सुरक्षा प्राप्त करता है, सिवाय इसके कि यह स्टॉक हार्डवेयर (X86_64 या ARM64) पर चलता है।

  • Fil-C को मेमोरी सुरक्षा बग्स को शोषण के लिए उपयोग होने से रोकने के लिए इंजीनियर किया गया है, न कि केवल उन्हें इतनी बार चिह्नित करने के लिए कि बग्स मिल जाएँ। यह Fil-C को AddressSanitizer, HWAsan, या MTE से अलग बनाता है, जिन्हें हमलावर बायपास कर सकते हैं। इसे संभव बनाने वाला मुख्य अंतर यह है कि Fil-C क्षमता-आधारित है (इसलिए प्रत्येक पॉइंटर जानता है कि वह किस मेमोरी रेंज तक पहुँच सकता है, और कैसे पहुँच सकता है) न कि टैग-आधारित (जहाँ पॉइंटर एक्सेस की अनुमति तब दी जाती है जब वे वैध मेमोरी पर पहुँचते हैं)।

  • भाषा उपयोगकर्ता के दृष्टिकोण से, Fil-C बस C और C++ है जिसमें GCC/clang एक्सटेंशन हैं। इसकी संभावना अधिक है कि आपका पसंदीदा C या C++ प्रोग्राम या लाइब्रेरी Fil-C में बिना किसी बदलाव के संकलित हो जाएगा। Fil-C कंपाइलर clang 20.1.8 पर आधारित है, इसलिए यह C17 और C++20 का समर्थन करता है।

लाइसेंस

कंपाइलर (clang + LLVM) LLVM-LICENSE.txt द्वारा कवर किया गया है। रनटाइम PAS-LICENSE.txt द्वारा कवर किया गया है (स्रोत वितरण में libpas/LICENSE.txt देखें)। क्लासिक musl-आधारित Fil-C वितरण के मामले में, musl libc MUSL-LICENSE.txt द्वारा कवर किया गया है (स्रोत वितरण में projects/yolomusl/COPYRIGHT और projects/usermusl/COPYRIGHT देखें)। /opt/fil वितरण के मामले में, glibc glibc-LICENSE.txt द्वारा कवर किया गया है, और अन्य सभी शामिल प्रोग्राम संबंधित -LICENSE.txt फ़ाइलों द्वारा कवर किए गए हैं। C++ लाइब्रेरीज़ (libc++/libc++abi) LLVM-LICENSE.txt द्वारा कवर की गई हैं।

आप कंपाइलर, रनटाइम, libc++/libc++abi, libc (musl और glibc), और सभी शामिल प्रोग्रामों का स्रोत github से प्राप्त कर सकते हैं। स्रोत वितरण में कई अतिरिक्त प्रोग्राम भी शामिल हैं जिन्हें projects/ और pizlix/ निर्देशिकाओं में Fil-C में पोर्ट किया गया है, और उनके विभिन्न लाइसेंस हैं। /opt/fil वितरण में विभिन्न अतिरिक्त प्रोग्रामों के बिल्ड शामिल हैं और उनके लाइसेंस उस वितरण में additional-licenses/ में हैं।

आवश्यकताएँ

Fil-C केवल Linux/X86_64 या Linux/ARM64 पर काम करता है।

पिछले संस्करण Darwin/ARM64 और FreeBSD पर काम करते थे, लेकिन अब मैं केवल Linux पर ध्यान केंद्रित कर रहा हूँ क्योंकि यह मुझे libc को अधिक faithfully लागू करने की अनुमति देता है। Linux के अलावा अन्य आर्किटेक्चर या OS पर Fil-C के काम करने से मौलिक रूप से कुछ भी नहीं रोक रहा है।

शुरुआत करना

यदि आपने Fil-C बाइनरीज़ डाउनलोड की हैं, तो चलाएँ:

./setup.sh

यह इस पर निर्भर करता है कि आपने कौन सा बाइनरी वितरण चुना है:

  • क्लासिक musl-आधारित वितरण (filc-0.684-linux-x86_64.tar.xz या filc-0.684-linux-aarch64.tar.xz) के मामले में, यह Fil-C को वर्तमान निर्देशिका में चलाने के लिए सेट करता है।

  • /opt/fil glibc-आधारित वितरण (optfil-0.684-linux-x86_64.tar.xz) के मामले में, यह Fil-C को /opt/fil में सेट करता है।

यदि आपने Fil-C स्रोत डाउनलोड किया है, तो चलाएँ:

./build_all_fast.sh

फिर आप इस निर्देशिका के भीतर से Fil-C का उपयोग कर पाएँगे।

Fil-C के बाइनरी वितरण के साथ libc के रूप में musl आता है। स्रोत वितरण में ./build_all_fast.sh का उपयोग करने से भी Fil-C musl का उपयोग करके बनता है। यदि आप स्रोत का उपयोग कर रहे हैं, तो आप यह भी कर सकते हैं:

  • ./build_all_fast_glibc.sh - libc के रूप में glibc 2.40 के साथ समान सेटअप बनाता है।

  • ./build_all.sh - पूर्ण musl-आधारित बिल्ड (Fil-C में पोर्ट किए गए बहुत सारे सॉफ़्टवेयर भी बनाता है)।

  • ./build_all_glibc.sh - पूर्ण glibc-आधारित बिल्ड (Fil-C में पोर्ट किए गए और भी अधिक सॉफ़्टवेयर बनाता है)।

  • cd pizlix && sudo ./build.sh - Pizlix Linux वितरण बनाता है।

  • cd optfil && sudo ./build.sh - /opt/fil वितरण बनाता है।

जो चीज़ें काम करती हैं

बहुत सारे सॉफ़्टवेयर पैकेज Fil-C में बिना किसी या न्यूनतम बदलाव के काम करते हैं, जिनमें openssl, CPython, SQLite, और कई अन्य जैसे बड़े पैकेज शामिल हैं। Fil-C इतना शक्तिशाली है कि यह पूरी तरह से मेमोरी सुरक्षित Linux यूज़रलैंड का समर्थन कर सकता है।

Fil-C में C और C++ के साथ-साथ clang 20 द्वारा समर्थित लगभग सभी एक्सटेंशनों का पूर्ण समर्थन है। Fil-C में एटॉमिक्स और SIMD इंट्रिंसिक्स के लिए उत्कृष्ट समर्थन है, उदाहरण के लिए।

Fil-C उन सभी चीज़ों को पकड़ता है जो C में मेमोरी सुरक्षा को कठिन बनाती हैं, जैसे:

  • हीप या स्टैक पर आउट-ऑफ-बाउंड्स।

  • यूज़-आफ्टर-फ्री (हीप या स्टैक पर भी)।

  • पॉइंटर्स और नॉन-पॉइंटर्स के बीच टाइप कन्फ्यूज़न।

  • लिंकिंग से उत्पन्न टाइप त्रुटियाँ।

  • va_lists के दुरुपयोग से उत्पन्न टाइप त्रुटियाँ।

  • पॉइंटर रेस।

  • सिस्टम कॉल। सिस्टम कॉल को पास किए गए सभी बफ़र्स की बाउंड्स और टाइप के लिए जाँच की जाती है।

  • बहुत सी अन्य चीज़ें।

Fil-C के साथ एक उचित रूप से पूर्ण POSIX libc आता है और यह थ्रेड्स, सिग्नल हैंडलिंग, mmap/munmap, longjmp/setjmp, और C++ अपवादों जैसी मुश्किल विशेषताओं का भी समर्थन करता है।

और जानें

आप वेबसाइट पर जाकर Fil-C के बारे में और जान सकते हैं।

आप मुझे ईमेल भी कर सकते हैं: [email protected]

मुझे Twitter पर फॉलो करें।

GH पर इश्यू फाइल करें।

श्रेणियाँ