- मेमोरी सेफ़्टी वाला नया C/C++ कंपाइलर Fil-C मौजूदा कोड के साथ उच्च संगतता दिखाता है, और अधिकांश लाइब्रेरी व एप्लिकेशन बिना किसी बदलाव के चलते हैं
- Debian 13 वातावरण में Fil-C को सोर्स से build और install करने की प्रक्रिया, तथा glibc·binutils को Fil-C से फिर से compile करने के लिए ऑटोमेटेड install script उपलब्ध
- लगभग 9000 क्रिप्टोग्राफ़ी सॉफ़्टवेयर microbenchmarks में Fil-C, clang की तुलना में 1~4 गुना cycles का उपयोग करता है
- Fil-C के साथ Debian package build system integration का प्रयास किया गया है, और नया ABI(
amd64fil0) जोड़कर Fil-C-आधारित पैकेजों की parallel installation संभव करने वाली संरचना प्रस्तुत की गई है
- Fil-C मेमोरी सेफ़्टी और मौजूदा ecosystem compatibility दोनों को एक साथ हासिल करने की कोशिश करता है, और Debian-आधारित सिस्टमों तक विस्तार की संभावना दिखाता है
Fil-C का अवलोकन और शुरुआती प्रभाव
- Fil-C मेमोरी सेफ़्टी की गारंटी देने वाला C/C++ कंपाइलर है, जो मौजूदा कोड के साथ उच्च संगतता दिखाता है
- अधिकांश लाइब्रेरी और एप्लिकेशन बिना बदलाव के काम करते हैं
- कुछ अपवादों में बदलाव की ज़रूरत पड़ती है, लेकिन वे ऐसे नहीं हैं जिन्हें सुलझाना बहुत कठिन हो
- लेखक का लक्ष्य अपनी देखरेख वाले कई सिस्टमों को Fil-C से compile किए गए कोड पर ले जाकर सुरक्षित करना है
- टेस्ट वातावरण: Debian 13, AMD Ryzen 5 7640HS(6-कोर 12-थ्रेड), 12GB RAM, 36GB swap memory
संबंधित सामग्री और scripts
- Fil-C और उसके upstream source (जैसे clang, glibc) के बीच अंतर की तुलना के लिए auditing diff script सार्वजनिक की गई
- Debian 13 पर Fil-C, glibc, binutils को download·compile·install करने के लिए filian-install-compiler script उपलब्ध
- कुल runtime: 86 मिनट wall-clock, 477 मिनट user time, 52 मिनट system time
- Fil-C का उपयोग करके Debian source packages build करने के लिए filian-install-packages script उपलब्ध
- कुछ पैकेजों (जैसे bzip2) के सफल build की पुष्टि
- Fil-C vs. clang performance graph सार्वजनिक
- लगभग 9000 क्रिप्टोग्राफ़ी-संबंधित microbenchmarks के परिणाम
- Fil-C से compile किया गया कोड clang की तुलना में 1~4 गुना cycles खर्च करता है
Fil-C installation और build
- root अधिकारों से आवश्यक पैकेज install करने के बाद, non-privileged user
filc के रूप में build किया जाता है
- Fil-C source में glibc और कई high-level libraries·applications शामिल हैं
- build command:
time ./build_all_fast_glibc.sh
- musl भी चुना जा सकता है, लेकिन कुछ पैकेजों (attr, elfutils, sed, vim आदि) के साथ असंगतता मौजूद है
- build के दौरान memory shortage आने पर swap space को 36GB तक बढ़ाकर समस्या हल की गई
- अधिकतम लगभग 19GB swap और 12GB RAM का उपयोग
- बड़े सर्वर (128-कोर, 512GB RAM) पर Fil-C build में 8 मिनट, musl build में 6 मिनट लगे
अतिरिक्त libraries और applications का build
- Fil-C में कई libraries और applications build करने के लिए build_all_slow.sh शामिल है
- इसे parallelize करने के लिए build-parallel-20251023.py script लिखी गई
- error आने पर भी रुके बिना पूरा build जारी रहता है
- parallel build से समय कम किया जा सकता है
- phoenix सिस्टम पर 61 targets में से 60 सफल (wall-clock 101 मिनट)
- केवल libcap build में विफल रहा (liblto_plugin.so load error)
- util-linux में syscall-संबंधित बदलावों की ज़रूरत पड़ी
- बाकी प्रमुख पैकेज (attr, bash, curl, openssl, vim आदि) बिना समस्या build हो गए
अतिरिक्त परीक्षण की गई libraries और applications
- boost 1.89.0: अधिकांश हिस्सा सामान्य रूप से काम करता है, कुछ vfork-संबंधित बदलाव आवश्यक
- cdb-20251021: सामान्य रूप से काम करता है, कृत्रिम OOM test में error message का अंतर
- libcpucycles, libgc(gshim replacement), libntruprime, lpeg, luv आदि सफलतापूर्वक build और test हुए
- mutt, tig, w3m जैसे प्रमुख CLI applications भी सामान्य रूप से चलते पाए गए
Debian integration (Filian)
- Debian की multi-architecture संरचना का उपयोग करके Fil-C-विशेष ABI(amd64fil0) जोड़ा गया
- उदाहरण:
apt install bash:amd64fil0 से Fil-C-compiled version install किया जा सकता है
- Fil-C
/usr/include के बजाय अपनी अलग directory का उपयोग करता है, जिससे header file path mismatch की समस्या आती है
- filian-install-compiler script में इसे Debian standard paths के अनुसार समायोजित किया गया
- Debian build tools(dpdk-buildpackage, sbuild आदि) में Fil-C architecture पहचान जोड़ी गई
/usr/share/dpkg/cputable, config.sub आदि में बदलाव
- Fil-C और standard libraries को
/usr/libexec/fil/amd64 path में रखा गया
filcc, fil++ commands को system-wide इस्तेमाल किया जा सकता है
Debian package build उदाहरण
fillet helper script से Debian source package के symbols और install paths समायोजित किए गए
tinycdb पैकेज को Fil-C से build करने पर amd64fil0-विशेष 3 .deb packages बने
- install के बाद
nm, ldd commands से Fil-C symbols(pizlonated_) और library paths की पुष्टि
- run करने पर Fil-C runtime protection के काम करने की पुष्टि (“memory safety” violation block message output)
अतिरिक्त Debian package build
- libc-dev: dependency resolution के लिए fake package बनाया गया
- ncurses: Fil-C से build करने के बाद install किया जा सका
- libmd: architectures के बीच version mismatch के कारण recompile की ज़रूरत
- readline: header path symbolic link की ज़रूरत
- lua5.4: readline dependency हल होने के बाद सामान्य रूप से चला
निष्कर्ष
- Fil-C मेमोरी सेफ़्टी को मज़बूत करने और मौजूदा C/C++ ecosystem compatibility दोनों को साथ हासिल करने की कोशिश है
- Debian वातावरण में package build और integration की संभावना सिद्ध हुई
- कुछ build scripts और header path adjustments की ज़रूरत है, लेकिन अधिकांश प्रमुख open source packages के साथ संगतता सुनिश्चित हुई
1 टिप्पणियां
Hacker News टिप्पणी
शायद यह microbenchmark की variability की वजह से हो, लेकिन कुछ नतीजे इतने तेज़ दिखते हैं कि correctness issue है क्या, यह सोचने पर मजबूर करते हैं
इसके लिए वे GC shim library और build scripts बनाकर साझा कर रहे हैं
swap को 36GB करने पर build सामान्य रूप से हुआ, और अधिकतम 19GB swap + 12GB RAM का उपयोग हुआ
128-core, 512GB RAM सर्वर पर Fil-C build में 8 मिनट और musl में 6 मिनट लगे
लगता है Fil-C बहुत ज़्यादा static analysis करता है
इसे cdb.cr.yp.to पर देखा जा सकता है, और बताया गया है कि नया cdb subdomain pqconnect का उपयोग करता है
pqconnect का उपयोग HTTP(S) connection चरण में होता है, और दोनों DNS में public key encode करते हैं, लेकिन उनकी भूमिका अलग है
pqconnect, CurveCP की तरह CNAME में public key शामिल करता है
हालांकि pq1 हिस्सा public key नहीं, बल्कि सर्वर की long-term public key hash है
Fil-C से जुड़ा नोट 3 दिन पहले submit किया गया था
संबंधित thread
पिछली चर्चा का लिंक
लक्ष्य शायद यह है कि ज़्यादातर C/C++ प्रोग्राम Rust में दोबारा लिखे बिना सुरक्षित रूप से चल सकें
यह भी जिज्ञासा है कि इसमें Epic Games की क्या भूमिका है
नया कोड लिखने के बजाय यह WASM sandboxing की तरह मौजूदा कोड को सुरक्षित रूप से wrap करने के काम में ज़्यादा उपयुक्त है
हालांकि Fil-C crash को अधिक सटीकता से पकड़ता है
Rust के unsafe mode के लिए भी यहाँ कुछ सीखने लायक हो सकता है
खास तौर पर Fil-C से compile की गई dependencies को static link करने का तरीका दिलचस्प है
pointer tracking के लिए पूरे प्रोग्राम पर Fil-C का नियंत्रण होना ज़रूरी है, इसलिए FFI संरचनात्मक रूप से फिट नहीं बैठता
उदाहरण: Fil-C: A memory-safe C implementation,
Safepoints and Fil-C,
Fil’s Unbelievable Garbage Collector आदि
2024~2025 के दौरान memory safety पर चर्चा जारी रही है
Fil-C एक C/C++-compatible memory-safe implementation है, जिसमें ज़्यादातर कोड लगभग बिना बदलाव के compile हो जाता है
सभी memory errors को panic के रूप में detect किया जाता है, और concurrent GC और InvisiCaps के ज़रिए safety सुनिश्चित की जाती है
official site पर विस्तृत जानकारी देखी जा सकती है
build_all_fast_glibc.shscript को 31GB memory चाहिएवजह जानने की इच्छा है, और खुद Fil-C को आज़माने का मन है
संबंधित लेख