pg83/solo
Portable Linux binaries, solved
해결하는 문제
SoLo는 완전히 정적 Linux 바이너리(musl로 빌드됨)가 런타임에 glibc 링크된 공유 객체(GPU 드라이버 등)를 로드하고 사용할 수 있게 해줍니다. 컨테이너, AppImage, 또는 프로세스 내부에 두 번째 C 라이브러리를 포함할 필요 없이, 단일 실행 파일로 배포하면서도 호스트 시스템에 설치된 하드웨어 전용 드라이버에 접근할 수 있게 해줍니다.
작동 방식
SoLo는 x86-64 및 aarch64용 자체 ELF 로더를 구현하고 glibc ABI 브리지 기능을 제공합니다. glibc 자체를 로드하지 않고, ELF 세그먼트를 매핑하고, 버전화된 심볼을 해결하며, glibc 임포트를 ABI에 맞는 어댑터로 변환하여 기존 musl 런타임 위에서 실행합니다. TLS(Thread Local Storage) 모델, C++ 예외, 지연 PLT 바인딩과 같은 복잡한 저수준 세부 사항을 처리하여, 시스템 로더 없이 외부 코드가 올바르게 동작하도록 보장합니다.
대상 사용자
GPU 가속(Vulkan, OpenGL) 또는 기타 시스템 공유 라이브러리에 접근하고 싶지만, 단일 파일 배포의 포터블성을 희생하고 싶지 않은 정적 Linux 바이너리를 개발하는 개발자들.
주요 특징
- 단일 바이너리 배포: 실행 시 호스트 GPU 드라이버를 로드할 수 있는 단일 musl 링크된 실행 파일을 배포 가능.
- glibc ABI 브리지: 프로세스 내부에 두 번째 libc를 로드하지 않고 glibc 호출을 musl로 변환.
- 포괄적인 TLS 지원: 정적 TLS에 전용 여유 아레나를 사용하여 4가지 TLS 모델(초기-실행형 포함) 모두 지원.
- 크로스 월드 호환성: 정적 컴파일과 glibc 컴파일된 프레임 간 C++ 예외의 언윈딩을 가능하게 함.
- 광범위한 하드웨어 테스트: AMD, Intel, NVIDIA GPU, Apple M1(Asahi Linux), Android(Termux), WSL에서 검증됨.
- 높은 호환성: CI에서 Debian 패키지 상위 1,000개에서 가장 많이 설치된 2,100개 이상의 공유 객체 로딩 테스트 수행.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트