피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Cosmopolitan Libc 기반 mruby의 Multi-Platform Single Binary 구현
Embed mruby as a Single Binary That Runs Everywhere
AI 요약
Context
RapidForge 플랫폼의 의존성 없는 단일 바이너리 배포 체계 유지 필요성 대두. 기존 Bash 기반 스크립트의 한계를 극복하고 복잡한 비즈니스 로직 구현을 위한 Ruby 인터프리터 내장 요구사항 발생.
Technical Solution
- Cosmopolitan Libc의 APE(Actually Portable Executables) 포맷을 통한 x86-64 및 aarch64 아키텍처 동시 지원 구조 설계
- zlib, OpenSSL 1.1.1w, libcurl의 정적 컴파일 체인을 통한 런타임 의존성 완전 제거
- OpenSSL 빌드 시
no-asm옵션 적용으로 Cosmopolitan Toolchain과 어셈블리 ABI 불일치 문제 해결 istext()함수 충돌 방지를 위해 OpenSSL CLI 앱을 제외하고 라이브러리만 정적 링크하는 전략 채택- mruby Rake 빌드 시스템 내
curl → ssl → crypto → z순의 링크 순서를 강제하여 의존성 전파 해결 hal-posix-socket젬 적용을 통한 APE 환경 내 네트워크 소켓 시스템 콜 연결 보장
실천 포인트
- Cross-Platform 단일 바이너리 설계 시 ABI 호환성을 위해 핸드라이팅 어셈블리(`no-asm`) 제거 검토 - 정적 라이브러리 링크 시 심볼 충돌 방지를 위해 필요한 라이브러리 유닛만 선별적으로 포함 - 복잡한 의존성 체인(curl-ssl-zlib) 구축 시 Linker의 심볼 해석 순서를 고려한 라이브러리 배치 확인