자동차 산업의 오픈소스 컴플라이언스: 1억 줄의 코드가 도로 위를 달릴 때
현대 스마트카는 1억 줄이 넘는 코드를 싣고 있다. 여객기를 훨씬 웃도는 양이다. 게다가 그 대부분은 OEM이 아니라 오픈소스 커뮤니티와 공급망이 쓴 것이다. 차량용 OS, 자율주행 스택, 콕핏 앱, OTA 프레임워크——겹겹이 쌓인 오픈소스 컴포넌트가 차와 함께 도로를 달리고, 그것이 15년간 이어진다. 그래서 자동차는 오픈소스 거버넌스 요구가 가장 엄격한 산업 중 하나가 됐다. 질문은 '오픈소스를 쓸 것인가'가 아니라 '이 1억 줄의 15년을 누가 책임지는가'다.
규제가 소프트웨어 공급망을 시장 진입 조건에 써넣었다
세 문서가 글로벌 자동차 소프트웨어 보안 규제의 바닥을 이룬다. UN R155는 OEM에 차량 수명주기 전체를 덮는 사이버보안 관리체계(CSMS) 구축을 요구하며 EU에서는 모든 신차에 강제 적용된다. CSMS 인증 없이는 차가 유럽에 못 들어간다. ISO/SAE 21434는 짝을 이루는 엔지니어링 표준으로, 공급망 위 소프트웨어 컴포넌트의 리스크 관리를 명시적으로 요구한다. 중국에서는 강제성 국가표준 GB 44495(자동차 정보보안 기술요구)가 공포되어 시행 단계에 들어갔다. '강제'라는 두 글자에 주목하라. 권고 표준이 아니라 진입 문턱이다. 셋이 가리키는 방향은 같다. OEM은 차에 어떤 소프트웨어가 실려 있고, 어떤 리스크가 있으며, 어떻게 지속 관리하는지를 증명해야 한다.
자동차 산업의 네 가지 특수성
압력은 티어를 따라 전이된다. 규제는 OEM에 떨어지고, OEM은 조달 계약으로 Tier 1에 요구를 넘기며, Tier 1은 Tier 2로 넘긴다. SBOM 납품, 취약점 대응 SLA, 라이선스 보증은 자동차 공급망 계약의 표준 조항이 되고 있다. 부품·소프트웨어 공급업체에게 오픈소스 거버넌스 역량은 가점 항목에서 입찰 자격으로 바뀌는 중이다.
임베디드 형태가 사각지대를 증폭한다. 차량 소프트웨어는 C/C++ 중심에 정적 링크가 일상이고 납품물 다수가 바이너리 펌웨어다. 매니페스트 수준 탐지의 사각지대를 전부 밟는 형태다. 자동차의 성분 투명성은 스니펫 수준 탐지와 바이너리 성분 분석의 조합으로만 성립하며, 의존성 선언만으로 만든 SBOM은 OEM 검수를 통과하지 못한다.
15년 수명주기와 컴포넌트 EOL의 충돌. 차량 소프트웨어 지원 기간은 10년 단위인데 오픈소스 컴포넌트의 활동 기간은 흔히 몇 년이다. 오늘 도입한 컴포넌트는 높은 확률로 차량 수명주기 안에 유지보수가 끝난다. EOL 거버넌스는 자동차 산업에서 선택이 아니다. 도입 시 커뮤니티 지속가능성 평가와 양산 후 EOL 상시 모니터링을 제도화해야 한다.
OTA가 컴플라이언스의 시간 형태를 바꿨다. 전통 차량의 소프트웨어 컴플라이언스는 '출고 시 일회성'이었지만 OTA는 그것을 '푸시마다 다시 성립해야 하는 것'으로 바꿨다. OTA 릴리스마다 대응하는 SBOM 스냅숏과 라이선스 컴플라이언스 확인이 필요하다. 그러지 않으면 한 번의 푸시가 새 GPL 충돌을 10만 대에 배포할 수 있다.
실행 요점
공급업체를 위한 세 가지: SBOM 생성을 빌드 파이프라인에 심어 납품 버전마다 자동 스냅숏을 만든다. 라이선스 정책은 '차량과 함께 배포된다'는 가장 엄격한 해석으로 설정한다. 차량 소프트웨어는 거의 전부 배포에 해당하며 라이선스 충돌에 '내부 사용' 면제의 여지가 없다. 외부 조달 바이너리 컴포넌트는 도구로 검증한 뒤 인수한다. 공급업체의 컴플라이언스 선언에는 증거가 뒷받침돼야 한다.
OEM을 위한 두 가지: 검수를 'SBOM 문서 요구'에서 '납품물과 SBOM의 일치를 도구로 검증'으로 격상한다. 차량 프로젝트 감사에서 실제 성분과 맞지 않는 아름다운 목록을 우리는 너무 많이 봤다. 전 차종 컴포넌트 대장을 구축해 새 취약점 인텔리전스가 도착하면 영향받는 차종과 버전을 분 단위로 특정한다. 이것이 R155 '지속 모니터링' 요구의 엔지니어링 실체다.
자동차 산업은 20년에 걸쳐 기능안전(ISO 26262)의 완전한 체계를 세웠다. 이제 사이버보안과 공급망 보안이 같은 길을 걷는다. 다만 이번에는 20년의 여유가 없다. 규제 당국이 이미 시계를 맞춰 놓았다.
