바이너리 블롭(Binary Blob)은 소스 코드가 공개되지 않은 채 기계어(바이너리) 형태로만 배포되는 소프트웨어 구성 요소를 지칭하는 용어이다. 주로 운영 체제 커널, 펌웨어, 장치 드라이버, 그래픽 처리 장치(GPU) 드라이버 등에서 하드웨어 제조사가 독점적인 하드웨어 인터페이스나 지적 재산권 보호를 이유로 소스 코드를 공개하지 않고 바이너리 파일만 제공할 때 사용된다.
주요 특징
- 비공개 소스: 내부 동작 원리, 알고리즘, 하드웨어 레지스터 맵 등이 외부에 공개되지 않는다.
- 이식성 제약: 특정 아키텍처(예: x86, ARM) 및 특정 커널 버전에 맞춰 컴파일되어 배포되므로, 다른 아키텍처나 커널 버전에서는 동작하지 않거나 별도의 빌드가 필요하다.
- 디버깅 및 감사 어려움: 소스 코드가 없으므로 버그 분석, 보안 취약점 검토, 성능 최적화가 원천적으로 어렵다.
- 라이선스 문제: GPL(GNU General Public License) 등 카피레프트 라이선스를 사용하는 커널(예: 리눅스 커널)에 바이너리 블롭을 링크하여 배포할 경우 라이선스 위반 소지가 있어 법적, 윤리적 논쟁의 대상이 된다.
사용 배경 및 목적 하드웨어 제조사는 경쟁사에게 하드웨어 구현 세부 사항이 노출되는 것을 방지하거나, 특허 라이선스 제약(예: 비디오 코덱, DRM), 서드파티 IP 라이선스 계약 등의 이유로 소스 코드 공개를 거부하고 바이너리 블롭을 제공한다.
논쟁 및 대안 자유 소프트웨어 재단(FSF) 및 오픈소스 커뮤니티는 바이너리 블롭이 사용자의 자유(실행, 연구, 수정, 배포)를 침해하고 시스템의 투명성과 보안을 저해한다고 비판한다. 이에 대한 대안으로 하드웨어 제조사가 공개한 사양서를 바탕으로 커뮤니티가 역설계하거나 제조사가 직접 공개한 오픈소스 드라이버(예: AMD의 오픈소스 GPU 드라이버, 인텔 그래픽 드라이버) 개발이 권장된다. 리눅스 커널 프로젝트는 '리눅스-리브레(Linux-libre)'와 같이 바이너리 블롭을 완전히 제거한 커널 버전을 별도로 배포하기도 한다.