C를 버리지 않고 더 안전하게 — Microsoft의 lib0xc 오픈소스 공개

“안전한 소프트웨어를 만들고 싶다면 C를 버리고 Rust로 가라.” 최근 몇 년 사이 미국 NSA, 백악관 사이버 보안 전략 보고서까지 이런 방향을 공식 권고하고 있다. Microsoft 역시 내부 신규 프로젝트에서 Rust 채택을 적극 장려해온 곳이다. 그런데 이번에 내놓은 패는 예상과 달랐다.

시스템 프로그래밍 보안 코드 화면

이미지 출처: Unsplash

Microsoft는 이번 주 lib0xc를 GitHub에 오픈소스로 공개했다. “C 표준 라이브러리 인접 API들을 통해 더 안전한 시스템 프로그래밍”을 목표로 한다는 설명인데, 쉽게 말하면 C를 쓰면서도 흔한 메모리 버그 패턴을 구조적으로 막아주는 보조 라이브러리다. C를 갈아치우는 게 아니라, C를 쓸 수밖에 없는 현실 코드베이스를 위한 안전망을 만들겠다는 접근이다.

C 코드베이스는 쉽게 버릴 수 없다

수십 년 된 운영체제 커널, 임베디드 펌웨어, 게임 엔진 코어처럼 성능과 하드웨어 근접성이 생명인 코드는 아직도 C로 유지되는 경우가 많다. Rust로의 전환은 이상적이지만 수백만 줄 코드를 한 번에 바꿀 수는 없고, 팀 역량과 생태계 도구도 갖춰야 한다. lib0xc는 그 사이 어딘가에 있는 현실적 선택지를 제안한다.

기술 구조는 크게 두 축으로 나뉜다. 표준 라이브러리 확장 쪽(0xc/std/)에는 타입 안전 할당을 위한 alloc.h, FILE 스트림을 대체하는 cursor.h, 오버플로우 발생 시 즉시 트랩하는 정수 변환 int.h, 정적 문자열 함수들이 들어있다. 시스템 프로그래밍 유틸리티 쪽(0xc/sys/)에는 경계 안전 해시 테이블(hash.h), 범위 제한 버퍼(buff.h), 자동 탐색 테스트 프레임워크(unit.h) 등이 포함된다.

C 언어 코드 편집 화면

이미지 출처: Unsplash

설계 원칙도 눈에 띈다. 동적 할당을 전제하지 않고 고정 크기 데이터 구조를 권장하며, 매크로로 컴파일 타임에 크기 정보를 확보한다. clang의 -fbounds-safety 확장과 완전히 호환되어 포인터 범위를 정적으로 표현할 수 있고, -Wall -Wextra -Werror 같은 엄격한 컴파일러 경고 옵션 아래서도 경고 없이 빌드된다. 기존 표준 라이브러리가 이 조건을 충족하지 못해 진지한 C 프로젝트들이 오랫동안 겪어온 지점을 정확히 파고든 셈이다.

지원 환경은 C11(GNU 확장 포함), clang/gcc, macOS와 Linux의 arm64·x86_64다. Rust로 가기 어려운 레거시 시스템 프로그래밍 팀들에게는 꽤 실용적인 선택지가 될 수 있다. Microsoft가 이 라이브러리를 자사 내부 프로젝트에도 실제로 사용하고 있는지, 그리고 리눅스 커널 기여자 커뮤니티가 어떻게 반응할지가 이 프로젝트의 다음 관전 포인트다.


출처

댓글 남기기