Ladybird가 Rust를 채택, AI의 도움으로 전환 가속

4 days ago 2

  • Ladybird 브라우저 프로젝트가 C++을 대체할 메모리 안전 언어로 Rust를 채택하고, 전환 과정에 AI 도구를 활용
  • 기존에 Swift를 검토했으나 C++ 상호운용성과 플랫폼 제약으로 한계를 느껴 Rust로 방향을 전환함
  • 첫 번째 포팅 대상은 JavaScript 엔진 LibJS로, Claude CodeCodex를 이용해 수백 개의 프롬프트로 수동 지휘된 번역을 수행함
  • 2주 만에 2만5천 줄의 Rust 코드를 완성했으며, 출력·성능 모두 C++ 버전과 완전히 동일함을 검증함
  • 프로젝트는 당분간 C++과 Rust 병행 개발 체제를 유지하며, 장기적으로 안전성과 유지보수성을 강화할 계획임

Rust 채택 배경

  • Ladybird는 C++을 대체할 메모리 안전 언어를 찾기 위해 여러 언어를 검토함
    • Swift는 C++과의 상호운용성 부족 및 Apple 생태계 외 플랫폼 지원 한계로 제외됨
  • Rust는 시스템 프로그래밍 생태계가 성숙하고, 기여자 다수가 이미 익숙한 언어로 평가됨
  • 2024년에는 Rust의 C++식 OOP 부적합성으로 채택을 보류했으나, 이후 안전성과 생태계 성숙도를 이유로 재도입 결정
  • Firefox와 Chromium이 이미 Rust를 도입한 사례를 참고해 Ladybird에도 적합하다고 판단

LibJS 포팅 과정

  • 첫 번째 전환 대상은 Ladybird의 JavaScript 엔진 LibJS
    • lexer, parser, AST, bytecode generator 등 독립적 구성요소와 test262 기반 테스트 커버리지로 시작점으로 적합함
  • 포팅에는 Claude CodeOpenAI Codex를 사용
    • 자동 생성이 아닌 인간 주도형 번역으로, 포팅 순서와 코드 구조를 직접 결정
    • 수백 개의 프롬프트로 세밀히 지시하며, 이후 다양한 모델을 통한 코드 검증 및 오류 탐지 수행

결과 및 검증

  • 목표는 C++과 Rust 파이프라인의 출력이 바이트 단위로 동일한 결과를 내는 것
  • 25,000줄의 Rust 코드를 2주 만에 완성, 수개월 걸릴 작업을 단축함
  • AST와 바이트코드가 완전히 동일하며, 테스트 및 JS 벤치마크에서 성능 저하 없음
  • C++과 Rust 파이프라인을 동시에 실행하는 lockstep 테스트로 웹 탐색 중 결과 일치 여부를 검증함
  • 현재 코드는 C++에서 번역된 형태를 유지하며, 레지스터 할당 패턴까지 동일하게 모방
    • 이는 C++ 파이프라인과의 호환성 확보가 최우선이기 때문
    • 향후 C++ 파이프라인을 폐기할 시점에 Rust 코드의 단순화 및 정리 예정

향후 계획

  • Rust 전환은 프로젝트의 주력 개발 방향이 아닌 병행 작업으로 진행
  • C++과 Rust 코드가 공존하며, 명확한 상호운용 경계를 유지함
  • 포팅 순서와 범위는 핵심 팀이 관리, 외부 기여자는 사전 조율 필요
  • 장기적으로 안전성과 유지보수성 향상을 목표로 점진적 전환 추진
  • 결정이 논란이 될 수 있음을 인정하면서도, Ladybird의 미래를 위한 올바른 선택으로 평가함

Read Entire Article