- Ladybird ब्राउज़र प्रोजेक्ट ने C++ की जगह लेने वाली memory-safe भाषा के रूप में Rust को अपनाया और बदलाव की प्रक्रिया में AI टूल्स का उपयोग किया
- पहले Swift पर विचार किया गया था, लेकिन C++ interoperability और platform constraints की सीमाओं के कारण दिशा Rust की ओर मोड़ी गई
- पहला porting target JavaScript engine LibJS है, और Claude Code व Codex की मदद से सैकड़ों prompts के जरिए manually guided translation किया गया
- लगभग 2 हफ्तों में 25,000 lines का Rust code पूरा किया गया, और यह सत्यापित किया गया कि output और performance दोनों C++ version के पूरी तरह समान हैं
- फिलहाल प्रोजेक्ट C++ और Rust के parallel development model को बनाए रखेगा, और लंबे समय में safety व maintainability को मजबूत करने की योजना है
Rust अपनाने की पृष्ठभूमि
- Ladybird ने C++ की जगह लेने वाली memory-safe भाषा खोजने के लिए कई भाषाओं की समीक्षा की
- Swift को C++ के साथ interoperability की कमी और Apple ecosystem के बाहर platform support की सीमाओं के कारण बाहर कर दिया गया
- Rust को system programming ecosystem के परिपक्व होने और कई contributors के पहले से ही इससे परिचित होने के आधार पर उपयुक्त माना गया
- 2024 में Rust की C++-style OOP के लिए अनुपयुक्तता के कारण इसे अपनाने का निर्णय टाल दिया गया था, लेकिन बाद में safety और ecosystem maturity के आधार पर इसे फिर से अपनाने का फैसला किया गया
- Firefox और Chromium में Rust अपनाए जाने के उदाहरणों को देखते हुए यह निष्कर्ष निकाला गया कि यह Ladybird के लिए भी उपयुक्त है
LibJS porting प्रक्रिया
- पहला migration target Ladybird का JavaScript engine LibJS है
- lexer, parser, AST, bytecode generator जैसे स्वतंत्र components और test262-आधारित test coverage के कारण इसे शुरुआत के लिए उपयुक्त माना गया
- porting में Claude Code और OpenAI Codex का उपयोग किया गया
- यह automatic generation नहीं बल्कि human-led translation था, जिसमें porting order और code structure सीधे तय किए गए
- सैकड़ों prompts के जरिए बारीकी से निर्देश दिए गए, और बाद में विभिन्न models के माध्यम से code verification और error detection किया गया
परिणाम और सत्यापन
- लक्ष्य यह था कि C++ और Rust pipelines का output byte-level पर एकदम समान हो
- लगभग 25,000 lines का Rust code 2 हफ्तों में पूरा किया गया, जिससे कई महीनों का काम कम समय में हो गया
- AST और bytecode पूरी तरह समान हैं, और tests व JS benchmarks में performance drop नहीं देखा गया
- C++ और Rust pipelines को साथ चलाने वाले lockstep tests के जरिए web browsing के दौरान परिणामों की समानता की पुष्टि की गई
- मौजूदा code अभी C++ से अनूदित रूप में है, और register allocation patterns तक को समान रूप से नकल करता है
- ऐसा इसलिए है क्योंकि C++ pipeline के साथ compatibility बनाए रखना सर्वोच्च प्राथमिकता है
- भविष्य में जब C++ pipeline को हटाया जाएगा, तब Rust code को सरल और साफ़ किया जाएगा
आगे की योजना
- Rust migration को प्रोजेक्ट की मुख्य development direction नहीं बल्कि parallel work के रूप में आगे बढ़ाया जाएगा
- C++ और Rust code साथ-साथ मौजूद रहेंगे, और इनके बीच स्पष्ट interoperability boundaries रखी जाएँगी
- porting order और scope का प्रबंधन core team करेगी, और बाहरी contributors को पहले से समन्वय करना होगा
- लंबे समय में safety और maintainability में सुधार के लक्ष्य के साथ यह बदलाव धीरे-धीरे आगे बढ़ाया जाएगा
- यह स्वीकार किया गया कि यह फैसला विवादास्पद हो सकता है, फिर भी इसे Ladybird के भविष्य के लिए सही विकल्प माना गया
1 टिप्पणियां
Hacker News की राय
इस प्रोजेक्ट में byte-for-byte identical output की मांग करना सबसे समझदारी भरा हिस्सा था
इसकी वजह से पुरानी pipeline और नई pipeline को साथ-साथ चलाकर diff की तुलना की जा सकती है, और translation के दौरान आए bugs तुरंत पकड़े जा सकते हैं
बहुत-से rewrites इसलिए fail होते हैं क्योंकि लोग porting के दौरान “सुधार” करने की कोशिश करते हैं, और फिर पुराना version, नया version, या साधारण behavior differences से पैदा हुए ghost bugs के पीछे भागते रहते हैं
C++ से Rust में अनुवाद किया गया version शुरू में थोड़ा अटपटा लगे तो भी ठीक है। बाद में जब C++ वाला हिस्सा पूरी तरह retire हो जाए, तब इसे धीरे-धीरे और idiomatic बनाया जा सकता है
output को एक जैसा रखते हुए refactoring, optimization, documentation किया जा सकता है
code पढ़ते हुए documentation करना सबसे सही समय लगता है। Ladybird जैसे लोकप्रिय project में documentation खुद development speed बढ़ाने का तरीका है
पहले migration cost इतनी ज़्यादा होती थी कि लोग “कर ही रहे हैं तो सुधार भी कर लें” कहकर उसे सही ठहराते थे, लेकिन आखिर में ghost bugs ही ज़्यादा पीछा करवाते थे
Claude Code और Codex का इस्तेमाल करके C++ code को Rust में translate किया गया
यह पूरी तरह automatic नहीं था; इंसानों ने direction तय की और सैकड़ों छोटे prompts के साथ उसे guide किया
शुरू से ही यह शर्त रखी गई कि दोनों pipelines का output byte-for-byte identical होना चाहिए, और नतीजे में सिर्फ 2 हफ्तों में 25,000 lines का Rust code तैयार हो गया
AST और bytecode दोनों match हुए और 0 regressions हासिल किए गए
मुझे लगता है कि languages के बीच porting में AI का इस्तेमाल करने का यही सही तरीका है
80 मिनट में उसने Drupal structure का analysis किया, original design और module structure को वैसे ही restore किया, और custom plugins भी implement कर दिए
अब सुनने में आता है कि वह site WordPress, ProcessWire, Node.js, और अब Next.js तक migrate हो चुकी है
मुझे “एक prompt में तैयार code” नहीं चाहिए, बल्कि AI के साथ लंबे sessions में back-and-forth करके human intelligence को amplify (IA) करने वाला tool चाहिए
लेकिन शायद ऐसे tools का market छोटा हो, क्योंकि इन्हें वही लोग इस्तेमाल कर पाएंगे जिन्हें development का ज्ञान है
Claude खुद code नहीं लिखता, सिर्फ hints देता है और review करता है
Rust की प्रकृति ऐसी है कि उसे तुरंत improvisation करके लिखना आसान नहीं, इसलिए यह तरीका बहुत संतोषजनक लगता है
अब उसका browser में चलने वाला wasm version भी है
cryptography वाला हिस्सा मैंने खुद implement नहीं किया था, इसलिए उसकी चिंता की ज़रूरत नहीं
Rust में migration की खबर दिलचस्प है, लेकिन यह हैरान करने वाली भी है क्योंकि Ladybird team पहले “anti-Rust hype” रुख के लिए जानी जाती थी
फिर भी अगर यह Rust में जाता है, तो मेरे लिए contribute करना कहीं आसान हो जाएगा
language आखिरकार एक tool है, और किसी एक language को अपनी पहचान का हिस्सा बना लेना ठीक नहीं लगता
Andreas एक बेहतरीन engineer हैं और उनमें entrepreneurial sense भी है
उन्होंने hobby project को industrial project में बदल दिया, यह प्रभावशाली है
फिर भी इतनी तेज़ language shift थोड़ा असहज महसूस कराती है
इसे project के स्वाभाविक विकास का परिणाम माना जा सकता है
“अभी Rust code असामान्य है, बाद में साफ़ करेंगे” जैसी बात सुनकर लगता है कि यह एक और rewrite का संकेत हो सकता है, और यही चिंता बढ़ाती है
startup का language बदलना अक्सर warning sign जैसा लगता है
जब नया version बनाना और पुराने features को बनाए रखना साथ-साथ चलता है, तो speed race शुरू हो जाती है और नया version पीछे रह सकता है
Linux, PHP, और musl libc भी कई बार full rewrites से गुज़र चुके हैं
अब जब AI आम हो चुका है, “नई language में पूरा rewrite” का गणित पूरी तरह बदल गया है
खासकर अगर test suite मौजूद हो, तो risk बहुत कम हो जाता है
यह ऐसा दौर है जहाँ testing की अहमियत 10 गुना बढ़ गई है
Streamlit, Shiny, Dash जैसी कई UIs को तेज़ी से आज़माया जा सकता है, इसलिए prototyping मज़ेदार हो जाती है
कुछ projects में तो अभी भी low-code + agent का combination काफ़ी चल रहा है
“AI को code review सौंप दिया” वाला हिस्सा थोड़ा चिंताजनक लगता है
models की logical errors पकड़ने की क्षमता सीमित होती है
लेकिन असली सवाल यह है कि बाद में “cleanup” सच में होगा भी या नहीं
AI-generated code पर निर्भरता बढ़ने से AI dependency का दुष्चक्र बन सकता है
project का C++ और Rust को साथ-साथ विकसित करना inefficient लगता है
क्या बेहतर नहीं होगा कि इसे किसी एक memory-safe language में पूरी तरह unify कर दिया जाए
जब तक हर component सिर्फ एक language में लिखा हो, तब तक समस्या नहीं होती
2024 में Swift अपनाते समय Andreas ने Rust के बारे में tweet किया था
उन्होंने कहा था कि Rust short-lived programs के लिए शानदार है, लेकिन complex object graphs को बनाए रखने वाले long-running programs में असुविधाजनक है
उन्होंने community को toxic भी कहा था
संबंधित tweet लिंक
यह देखना दिलचस्प होगा कि non-idiomatic Rust code बाद में technical debt बनता है या नहीं
Servo project ने भी ऐसे मुद्दे देखे थे, लेकिन उसी प्रक्रिया में latent bugs भी पकड़े गए थे
Rust में migration उसी सोच के अनुरूप एक mature decision लगता है