- 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” 이슈는 종료됨.