프로젝트 소개

Cosmopolitan Libc는 C/C++가 한 번 빌드하면 어디서나 실행되는 언어처럼 동작하게 만드는 C 라이브러리이자 툴체인으로, 정신적으로는 Java와 비슷하지만 인터프리터나 가상 머신이 필요하지 않다. 이는 기존 GCC와 Clang을 재구성하여 POSIX에서 승인한 폴리글롯 실행 파일 형식을 생성하며, Linux, macOS, Windows, FreeBSD, OpenBSD 7.3, NetBSD, BIOS 전반에서 네이티브로 실행되고, 강력한 성능과 매우 작은 풋프린트를 목표로 한다. 시작하기의 중심은 cosmo.zip에서 zip으로 배포되는 cosmocc 컴파일러이다. 압축을 푼 뒤 간단한 hello.c를 `cosmocc -o hello hello.c`로 컴파일하고 바로 실행할 수 있다. 런타임은 기본적으로 강력한 문제 해결 기능을 링크한다. `--strace`는 시스템 호출을 기록하고 `--ftrace`는 함수 호출을 기록하며, 둘 다 kprintf 기능을 사용하고 KPRINTF_LOG 환경 변수를 통해 파일로 리디렉션할 수 있다. 이 툴체인은 CC와 CXX를 cosmo 컴파일러로 내보내고 configure, make, make install을 실행함으로써 기존 autotools 기반 오픈 소스 프로젝트도 빌드할 수 있다. Cosmopolitan 자체도 지원 플랫폼에서 소스로부터 빌드할 수 있으며, Makefile이 cosmocc를 자동으로 다운로드한다. ape/apeinstall.sh를 통한 시스템 전역 APE Loader 설치가 권장되며, Linux에서는 추가 성능을 위해 binfmt_misc에 등록한다. 빌드는 GNU Make를 사용하고, 부트스트랩 make는 cosmo.zip에서 사용할 수 있다. 저장소가 크기 때문에 단일 POSIX 테스트나 전체 테스트 패키지처럼 개별 타깃을 빌드할 수 있다. 빌드 모드에는 매우 작은 바이너리(12kb까지 가능)를 위한 `m=tiny`와 다른 운영 체제를 제거하고 Musl Libc처럼 더 동작하게 하는 `m=tinylinux`가 있다. 디버깅 안내는 UTF-8 문자셋과 레이아웃을 위한 GDB 구성, .dbg 파일 실행, 디버그 심볼을 독립적으로 로드하는 방법을 다룬다. 플랫폼 관련 참고 사항은 셸(zsh 5.9+ 권장, 구형 셸과 Python 서브프로세스에 대한 우회 방법 포함), MZ 실행 파일을 WINE으로 잘못 라우팅하거나 run-detector 오류를 출력하는 Linux 시스템, WSLInterop binfmt_misc를 비활성화하는 것이 권장되는 WSL을 다룬다. 이 프로젝트는 AMD K8, Intel Core, Linux 2.6.18, Windows 8(구형 Windows용 커뮤니티 vista 브랜치 포함), Darwin 23.1.0+, OpenBSD 7.3, FreeBSD 13, NetBSD 9.2를 포함한 최소 지원 플랫폼 버전을 나열한다. 개발 논의는 Discord 서버에서 이루어지며, 자금은 GitHub Sponsors와 Patreon을 통해 조달된다.