Swift 채택 중단 – Ladybird 브라우저의 Swift 6.0 지원 이슈 종료

1 month ago 11

  • Ladybird 브라우저 프로젝트는 Swift 6.0 지원을 실험 단계에서 정식으로 전환하는 과정에서 발생한 문제 목록을 정리했으나, 이후 Swift 채택을 더 이상 추진하지 않기로 결정함
  • 주요 장애 요인은 Swift와 C++ 상호운용성(Interop) 관련 ABI 불일치, 헤더 순환 의존성, 특정 타입 반환 불가 등으로, 여러 항목이 Swift 6.0.0 이후 수정되었음
  • CMake 빌드 시스템에서도 Swift + Ninja 환경에서의 배포 타깃 불일치, install_name 처리 오류, 비호환 컴파일 옵션 등 문제가 보고됨
  • Ladybird 자체 코드에서도 AK 및 LibGfx 모듈의 modulemap 구성, Swift 프론트엔드 크래시, 타입 네임스페이스 충돌 등 다수의 빌드 불안정성이 확인됨
  • 이러한 누적된 기술적 제약으로 인해 Swift 통합이 중단되었으며, 이는 C++ 중심의 개발 유지 결정으로 이어짐

Swift 관련 문제

  • Swift 6.0 지원을 실험 단계에서 벗어나기 위해 해결해야 할 언어 및 ABI 수준의 버그가 다수 존재
    • LLVM 버전 불일치로 인해 Swift 오픈소스 빌드 시 어설션 실패 발생
    • Optional<CxxValueType> 반환 시 컴파일러와 브리징 헤더 간 ABI 불일치 문제
    • Ubuntu 22.04 환경에서 <execution> 헤더 포함 시 libstdc++ 모듈 순환 의존성 발생
    • swift::Optional<swift::String> 반환 불가, <chrono> 헤더 불러오기 실패 등 C++23 호환성 문제 포함
  • 일부 문제는 Swift 6.0.0 이후 릴리스에서 수정되었으나, 일부는 main 브랜치에서만 해결되어 안정 버전에는 미반영
  • 여러 항목에서 “워크어라운드(우회 빌드 방법) ”가 제시되었으나, 완전한 해결책은 아님

CMake 관련 문제

  • Swift와 Ninja 빌드 조합 시 CMAKE_OSX_DEPLOYMENT_TARGET 미적용으로 경고 다수 발생
    • 수동으로 CMAKE_Swift_COMPILER_TARGET 설정 필요
  • CMP0157 정책 활성화 시 install_name 디렉터리 설정이 무시되어 수동 수정 필요
    • 관련 수정이 CMake 3.29, 3.30에 백포트 예정
  • Swift 컴파일러가 이해하지 못하는 링크 옵션이 외부 종속성에서 전달되는 문제 존재

Ladybird 프로젝트 내부 문제

  • AK 및 LibGfx 모듈의 clang module map 구성 시 시스템 헤더 충돌 발생
    • <math.h> 포함 시 모듈 인식 오류로 빌드 실패
  • Swift 프론트엔드가 AK 컨테이너 테스트 중 디버그 빌드에서 크래시
    • 릴리스 모드 빌드로만 회피 가능
  • String 타입 네임스페이스 충돌로 Swift 프론트엔드 비정상 종료
    • AK.String 또는 Swift.String으로 명시적 지정 필요
  • Swift Testing 모듈 사용 시 컴파일러 프론트엔드 크래시, AK::StringView의 CxxSequenceType 불인식 문제 존재

추가 개선 항목

  • Swift에서 C++ 함수가 Optional<CxxType>을 반환할 때 애플리케이션 크래시 발생
    • 임시 해결책으로 0 또는 1 크기의 배열 반환 사용
  • SourceKit-LSP 및 vscode-swift가 루트 수준 compile_commands.json을 요구
    • 심볼릭 링크 생성으로 해결 가능
  • Linux 환경에서 <swift/bridging> 경로를 수동 추가해야 하는 불편 존재

미해결 질문

  • Swift로 C++의 view 타입이나 byte slice를 복사 없이 전달하는 방법 불명확
  • Swift가 AK::Optional, AK::HashMap 등 자체 타입을 std:: 타입과 동등하게 인식하지 못함
  • Swift 가비지 컬렉터와 Ladybird의 메모리 관리 통합 방식도 미정 상태

이 이슈는 Swift 6.0 통합을 위한 기술적 장애를 체계적으로 기록한 문서였으나, 이후 Ladybird 팀이 Swift 채택을 중단하면서 “Swift 6.0 Blockers” 이슈는 종료됨.

Read Entire Article