소프트웨어 실행 파일의 오랜 표준인 ELF(Executable and Linkable Format)를 대체할 수 있는 새로운 개념의 실행 파일 형식, SELF(Structured Executable & Linkable Format) 프로토타입이 등장했습니다. SELF는 실행 파일 자체를 SQLite 데이터베이스로 구성하고, 일반 바이너리처럼 실행할 수 있도록 `chmod +x` 권한을 부여하는 혁신적인 접근 방식을 제안합니다. 이는 기존 ELF 파일이 가진 복잡성과 비효율성을 개선하고, 개발자들이 SQL 쿼리를 통해 실행 파일의 내부 구조를 쉽게 탐색하고 수정할 수 있도록 돕습니다.
SELF는 ELF의 문자열 테이블(.strtab), 심볼 인덱스(.hash), 섹션 헤더, 버전 정보 등을 SQLite의 테이블, 열, 인덱스, 외래 키로 대체합니다. 이를 통해 `readelf`, `ldd`, `strip`, `patchelf`와 같은 기존 바이너리 도구의 기능을 SQL 쿼리와 트랜잭션으로 수행할 수 있게 됩니다. 예를 들어, `ldd` 명령어로 필요한 라이브러리를 조회하는 대신 `SELECT soname FROM ldd`와 같은 SQL 쿼리를 사용할 수 있습니다. 또한, 실행 파일과 모든 의존성 라이브러리를 하나의 SQLite 데이터베이스에 담아 라이브러리 해석의 모호성을 제거하고 중복 제거를 자연스럽게 처리할 수 있습니다. 초기에는 ELF보다 파일 크기가 약 2배 크고 시작 시 5ms의 고정 지연이 발생하지만, 불필요한 선택 테이블을 제거하면 ELF 대비 1% 이내의 크기로 줄일 수 있으며, 여러 객체를 묶을 경우 오히려 원본 ELF 전체보다 작아지는 경우도 확인되었습니다.
이러한 SELF의 등장은 소프트웨어 배포 및 관리 방식에 중요한 변화를 가져올 수 있습니다. 기존 ELF는 디스크와 네트워크가 극도로 제한되던 과거 환경에 맞춰 설계되어 수정이 어렵고, 다양한 도구들이 동일한 파싱 로직을 반복적으로 구현해야 하는 비효율성이 있었습니다. 반면, SQLite는 자체 기술 스키마를 가지며 안정적이고 확장성이 높아, 실행 파일의 내부 구조를 표준화된 방식으로 다룰 수 있게 합니다. 이는 개발자들이 바이너리 수정 작업을 트랜잭션 안에서 원자적으로 처리하고, `LD_PRELOAD`와 같은 전역 인터포지션(global interposition)도 SQL 트랜잭션으로 관리할 수 있게 함으로써, 소프트웨어 개발 및 운영의 효율성을 크게 향상시킬 잠재력을 가지고 있습니다. 궁극적으로는 `gcc`나 `ld` 같은 컴파일러 및 링커가 SELF를 직접 출력하도록 확장될 가능성도 열려 있습니다.