• जब memory safety के बिना Zig में leaks और crashes लगातार होते रहे, तो Bun ने 535,496 lines of code को 64 AI agents की मदद से Rust में port किया और 1~2 साल लगने वाले काम को 11 दिनों में पूरा कर दिया
  • इस सफलता की शुरुआत 600-line के PORTING.md से हुई, और इसके बाद file-by-file parallel conversion, दो बार adversarial review, compile errors की fixing, local testing, और CI pass कराने की प्रक्रिया क्रम से चली
  • 6,500 commits बनाने में API pricing के हिसाब से $165,000 खर्च हुए, और 5.9 billion non-cached input, 690 million output, तथा 72 billion cached input read tokens इस्तेमाल हुए
  • अगर यह काम manually किया जाता, तो codebase को अच्छी तरह समझने वाले 3 engineers को लगभग 1 साल तक product improvements, bug/security fixes, और नए features का development रोकना पड़ता, इसलिए rewrite खुद ही कठिन हो जाती
  • इसी तरीके को दोहराने के लिए codebase को गहराई से समझने वाले engineers, नतीजों पर भरोसा दिलाने वाला मजबूत test suite, और सफलता अनिश्चित होने पर भी token cost उठाने की तैयारी जरूरी है

Bun ने Rust rewrite क्यों चुना

  • Bun सिर्फ JavaScript runtime नहीं, बल्कि कई capabilities वाला जटिल production project है
    • JavaScript·TypeScript·CSS transformation, bundling, minification
    • test runner और npm-compatible package manager
    • module resolution, WebSocket client, Node.js implementation और कई modules
  • इसके monthly downloads 22 million हैं, Claude Code और OpenCode इस पर निर्भर हैं, और Vercel·Railway·DigitalOcean इसे सीधे support करते हैं
  • Zig memory-safe language नहीं है, इसलिए Bun के latest version में भी memory leaks, memory issues से होने वाले crashes, और heap out-of-bounds writes जैसी समस्याएँ लगातार आती रहीं
    • Bun टीम ने Zig compiler को patch किया और end-to-end memory leak tests भी जोड़े, लेकिन समस्या खत्म नहीं हुई
    • garbage-collected values और manually managed values की lifetimes को साथ संभालने की प्रक्रिया में छोटे leaks और intermittent crashes पैदा हुए
    • हर memory allocation पर release point, double free की संभावना, JavaScript exception handling, और conservative stack scanner में pointer visibility जैसी चीज़ें देखनी पड़ती थीं
  • Safe Rust में use-after-free और double-free compile errors बन जाते हैं, और error paths में cleanup छूटने की समस्या Drop आधारित automatic cleanup से संभाली जा सकती है
  • Bun code में Rust-style smart pointers को internally लाने का तरीका भी देखा गया, लेकिन उसकी usability Rust से खराब थी और वही guarantees भी नहीं मिलती थीं

पुराने rewrite projects में इतना समय क्यों लगता है

  • rewrite के दौरान भी original codebase में features जुड़ते रहते हैं, इसलिए completion date बार-बार आगे खिसकती है
    • 9 महीने का अनुमानित काम, 9 महीने बाद भी लगभग 6 महीने और माँग सकता है
    • 15 महीने बाद भी नए features के बराबर पहुँचने में कई महीने बाकी रह सकते हैं
    • बहुत अच्छा होने पर भी 2 महीने का feature freeze करने के बाद लगभग 18 महीने में काम खत्म होगा, यानी शुरुआती 9 महीने का अनुमान 2 साल से ऊपर जा सकता है
  • comments को छोड़कर Bun का Zig code 535,496 lines का था, इसलिए छोटे engineering team के लिए इसे दूसरी language में port करने में लगभग 1 साल लगने का अनुमान था
  • users को दिखने वाला कोई improvement दिए बिना 1 साल बिताना व्यावहारिक नहीं था, इसलिए Fable के साथ यह जाँचना तय हुआ कि क्या एक हफ्ते के अंदर Rust porting की संभावना साबित की जा सकती है

porting के लिए upfront design और validation

  • पहले चरण में Claude के साथ लगभग 3 घंटे तक यह चर्चा हुई कि Zig patterns को Rust के करीब कैसे map किया जाए, और इसे 600-line के PORTING.md में व्यवस्थित किया गया
  • porting guidelines में Bun की मौजूदा execution structure को बनाए रखने के लिए concrete restrictions शामिल थीं
    • tokio, rayon, hyper, async-trait, futures का उपयोग नहीं करना
    • std::fs, std::net, std::process जैसे I/O-access modules को प्रतिबंधित करना
    • क्योंकि Bun अपना event loop और system calls खुद own करता है, इसलिए async fn की जगह पुराने Zig की तरह callbacks और state machines का उपयोग करना
    • borrow checker conflict होने पर ज़रूरी scalar values को local variables में रखकर borrow खत्म करना और फिर दुबारा borrow करना
    • borrow checker से बचने के लिए raw pointers का उपयोग प्रतिबंधित करना, और जहाँ structure बदली गई हो वहाँ porting notes छोड़ना
  • कुल 1,448 files में से पहले 3 files को rewrite किया गया, और फिर changes से अलग session में Claude ने उन्हें दो बार adversarial review किया

64 AI agents का parallel काम

  • काम को इस तरह बाँटा गया कि files को एक-दूसरे से स्वतंत्र रूप से संभाला जा सके, और 64 AI agents को parallel में चलाया गया
  • शुरुआत में कई agents ने एक ही repository state को छू लिया, जिससे conflicts हुए
    • एक agent ने git stash चलाया, फिर दूसरे agent ने git stash pop और git reset HEAD --hard चला दिया
    • हर agent को अलग worktree देने पर Bun repository के आकार के कारण disk space कम पड़ता था, और आखिर में changes को साथ compile करना भी जरूरी था
  • workflow को बदलकर specific files को तुरंत commit करने वाले command को छोड़कर git stash, git reset जैसे Git commands पर रोक लगा दी गई, और cargo तथा लंबे runtime वाले commands भी blocked कर दिए गए
  • अंत में काम को 4 worktrees में बाँटा गया, और हर worktree में 16 Claude files को commit और push करने के लिए configured किए गए
  • agents ने दो दिनों में 535,496 lines of Zig code को port किया, और हर commit को apply करने से पहले दो बार adversarial review से गुजरना पड़ा

compile errors और tests की fixing

  • शुरुआती conversion पूरा हो गया था, लेकिन code compile नहीं हो रहा था, इसलिए Rust की top-level compile unit यानी crate-by-crate आधार पर Claude ने errors ठीक किए
  • stage title में लगभग 1,600 compile errors लिखे हैं, लेकिन quote के भीतर circular dependencies को सुलझाने की प्रक्रिया में लगभग 16,000 errors सामने आने की बात कही गई है
  • error fixing process को भी parallel किया गया
    • हर crate में cargo check चलाया गया
    • output को file-by-file group करके error files सहेजी गईं
    • उस crate के सभी compile errors ठीक किए गए
    • दो adversarial reviewers ने changes verify किए
    • एक fixing agent ने review results को लागू किया
  • agents ने आधी रात से सुबह 11:30 बजे तक बिना human intervention के compile errors ठीक किए
  • इसके बाद लगभग दो दिनों तक बड़े test suite को local में compile errors के बिना चलने लायक बनाया गया, और failing tests को ठीक कर CI pass कराने में अतिरिक्त कुछ दिन लगे
  • सभी tests pass होने और behavior verify होने के बाद changes merge किए गए, और planning से completion तक कुल 11 दिन लगे
    • लगभग 550,000 lines of code port हुईं
    • 6,500 commits
    • 64 agents का उपयोग

लागत और manual काम की तुलना में नतीजे

  • Fable API pricing के हिसाब से पूरी rewrite की लागत $165,000 रही
    • 5.9 billion non-cached input tokens
    • 690 million output tokens
    • 72 billion cached input read tokens
  • Anthropic API tokens पर margin लगाकर बेचता है, इसलिए उसकी वास्तविक internal cost इससे कम रही होगी
  • API cost अमेरिका के mid-level enterprise software engineer की annual base salary के करीब है, लेकिन यह आकलन किया गया कि उसी salary वाला engineer 11 दिनों में ऐसा ही नतीजा नहीं दे सकता
  • यह Mitchell Hashimoto के उस आकलन से भी मेल खाता है कि Fable खास तौर पर कठिन और highly focused tasks में अच्छा है, जहाँ reward function साफ़ हो
  • manual काम में codebase को पूरी तरह जानने वाले 3 engineers को लगभग 1 साल लगने का अनुमान था
    • उस दौरान Node.js compatibility improvements, bug और security fixes, तथा नए features का implementation आगे बढ़ाना मुश्किल होता
    • व्यावहारिक विकल्प यही था कि rewrite न करके मौजूदा memory bugs को ही लगातार ठीक किया जाए

दूसरे projects में लागू करने की शर्तें

  • अगर AI, 1 साल लगने वाली rewrite या migration को 1 हफ्ते के स्तर तक घटा दे, तो पहले मुश्किल लगने वाले projects भी संभव हो जाते हैं
  • Bun के workflow को दोबारा इस्तेमाल करने के लिए तीन शर्तें जरूरी हैं
    • codebase को बहुत अच्छी तरह समझने वाला और काम पूरा करने की मजबूत इच्छा रखने वाला engineer
    • इतना मजबूत test suite कि tests pass होने को वास्तविक behavior का भरोसेमंद आधार माना जा सके
    • सफलता पहले से स्पष्ट न होने पर भी काफी token cost invest करने की तैयारी
  • code migration जैसे repetitive tasks को LLM अपेक्षाकृत अच्छी तरह संभालते हैं, इसलिए अच्छे tests और problem को structure करने वाले engineer के साथ सफलता की संभावना ऊँची रहती है
  • हर project में $165,000 की ज़रूरत नहीं होगी
    • अधिक सरल project में लागत कम हो सकती है
    • high-level planning के लिए सबसे महँगा model इस्तेमाल किया जा सकता है, और coding/review के लिए सस्ते models लगाए जा सकते हैं
  • AI-based migration तेज़ हो रही है, लेकिन Bun जैसे well-engineered projects में ही इस तरह की रफ़्तार हासिल की जा सकती है

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.