C++26 표준안 역사상 최초 부결: 찬성률 60%로 3분의 2 미달

C++26 표준안 역사상 최초 부결: 찬성률 60%로 3분의 2 미달

C++C++26ISO프로그래밍 언어표준화

데이터 소스:HN + ISO/WG21 Papers

“Balloting has completed for C++26. Unfortunately it was Disapproved.”

2026년 10월 24일, C 언어 표준화 위원회 간사인 로버트 시코드(Robert Seacord)가 이 같은 결과를 공지했다. 그는 ISO/IEC JTC1/SC22 역사상 어떤 프로그래밍 언어 국제 표준 초안도 투표에서 부결된 적이 없었다고 덧붙였다. WG21(C++ 위원회) 디렉션 그룹 멤버인 다비드 반더보르데(Daveed Vandevoorde)의 설명은 더욱 직접적이었다. 지금까지 C++ 초안은 DIS(국제 표준안) 단계에서 단 1표의 반대표도 받은 적이 없었다. 30년간 이어져 온 무반대표 기록은 2026년 10월 23일로 완전히 깨졌다.

C++26 초안 부결의 핵심은 절차적 신뢰의 위기다. 논쟁적인 기능이 위원회 내부 다수결로 통과되었으나, 반대파가 각국 표준화 기구(National Bodies)로 전선을 옮겨 저지에 나섰다. 이 충돌은 3년 주기의 공식 발행 일정을 뒤흔들었을 뿐만 아니라, 위원회의 합의 형성 메커니즘 자체를 근본적으로 흔들어 놓았다.

찬성률 단 60%: 30년 무반대표 전원 통과 기록의 붕괴

ISO 국제 표준 초안(DIS) 투표가 통과하려면 두 가지 요건을 동시에 충족해야 한다. 투표에 참여한 회원국 중 찬성표가 최소 3분의 2(66.7%) 이상이어야 하며, 동시에 반대표는 전체 투표수의 25%를 넘지 않아야 한다. 둘 중 하나라도 미달하면 초안은 즉시 부결된다.

최종 개표 결과는 뼈아픈 이중 타격을 안겼다. 참여한 20개 회원국 중 찬성표는 12표에 그쳐 찬성률이 60%에 머물렀다(기준치에 2표 미달). 반면 총 22표 가운데 반대표는 9표에 달해 반대 비율이 허용 한도인 25%의 거의 두 배에 달하는 41%를 기록했다.

찬성 기준을 채우지 못한 동시에 반대표 상한선을 크게 초과한 결과는 각국 대표단 간의 기술적 합의가 완전히 갈라졌음을 드러낸다. 현대 C++ 30년 동안 DIS 단계에서 무반대표를 유지해 온 역사는 이렇게 막을 내렸다.

컨트랙트 단언 논쟁의 비화: 기술 토론이 국가 기구 로비로 변질

이번 사태를 촉발한 뇌관은 컨트랙트(Contracts, 계약 프로그래밍) 기능이다. 컨트랙트 기능은 pre(사전 조건), post(사후 조건), contract_assert(계약 단언) 세 가지 핵심 문법을 도입해, 함수 단위의 계약을 언어 차원에서 보장함으로써 소프트웨어의 안전성과 검증 가능성을 높이는 것을 목표로 삼았다.

하지만 이 기능의 표준화 과정은 험난했다. 2019년 쾰른 회의에서 이전 설계안이 막판 의견 차이로 전격 철회된 바 있다. 이후 전담 연구 그룹이 구성되어 수년간 바닥부터 다시 설계를 진행했다. 마침내 2026년 3월, WG21은 정식 다수결 투표를 통해 현재의 P2900 제안을 승인했다.

그러나 위원회 내부의 다수결 통과가 온전한 기술적 합의를 의미하지는 않았다. 반대파는 P2900 설계가 여전히 결함투성이이며, 정의되지 않은 동작(UB)에 대한 처리가 미흡하고 대규모 실제 검증이 부족하다고 맞섰다. 반면 찬성 측의 P4433R0 문서는 이러한 비판을 조목조목 반박하며, P2900을 철회할 경우 2019년 이후 6년간 쌓아온 모든 재설계 노력이 수포로 돌아간다고 경고했다.

결정적 문서 대결: P4238과 P4433이 드러낸 거버넌스의 균열

갈등은 결국 위원회 내부의 기술 심의 틀을 벗어나 공개적인 로비전으로 확대되었다. 2026년 9월 1일, 비니 팔코(Vinnie Falco)를 비롯한 4명의 베테랑 위원이 공동으로 WG21 문서 P4238R1을 발표했다. 문서 제목은 매우 직설적이었다. “누락된 평가를 완료하기 위해 C++26을 반려하라.”

WG21 문서 P4238R1 첫 페이지 그림: 각국 표준화 기구(NB)에 C++26 DIS 반대표 행사를 촉구하는 WG21 P4238R1 문서 표지. 출처: WG21 (open-std.org)

P4238R1은 전통적인 기술 제안서의 범위를 완전히 넘어섰다. 4명의 저자는 각국 표준화 기구(NB)를 직접 겨냥해 C++26 DIS에 반대표를 던질 것을 공개 촉구했다. 같은 진영은 P4334R0도 발표하여 컨트랙트 기능에 근본적 결함이 있다는 청원서를 회람시켰다.

이에 지지파도 즉각 정면 대응에 나섰다. 티무르 둠러(Timur Doumler), 존 라코스(John Lakos)를 비롯한 10여 명의 핵심 기여자가 P4433R0 문서를 공동 제출했다. 제목 또한 정면으로 맞섰다. “C++26에서 컨트랙트를 제거하지 말라.”

WG21 문서 P4433R0 첫 페이지 그림: 초안에서 컨트랙트 제거를 반대하는 핵심 저자들의 공동 성명서 P4433R0 표지. 출처: WG21 (open-std.org)

P4433R0은 반대파의 기술적 지적을 조목조목 반박했다. 나아가 내부 결정에 승복하지 않고 외부 국가 기구로 달려가 반대표를 로비한 행태를 강력히 규탄했다. 독일 대표 안드레아스 페르티히(Andreas Fertig)는 이번 부결 사태를 “완전한 재앙”으로 규정했다. 반대파가 내부에서 이미 논파된 구태의연한 주장을 반복했을 뿐이며, 정작 심각하게 훼손된 것은 표준화 위원회가 수십 년간 의지해 온 합의 형성 규칙이라고 꼬집었다.

9표의 반대표 이면: 소규모 국가 위원회 투표 구조의 취약점

ISO 공식 규정에 따르면 각국 표준화 기구의 세부 투표 내역은 비공개가 원칙이다. 그러나 비공식 집계에 따르면 덴마크, 스페인, 이탈리아, 일본, 스웨덴 등 9개국이 반대표를 던진 것으로 알려졌다. 비공식 명단의 유출은 대의제 투표 메커니즘의 공정성에 대한 의문을 폭발시켰다.

폴란드 국가위원회 위원 한 명은 지방 분과의 충격적인 운영 실태를 공개했다. 투표 마감 며칠 전까지도 정족수를 채우지 못해 발을 동동 굴렀으며, 오랜 회원 중 일부는 이직으로 이메일이 반송되거나 C++ 기술 논의에 거의 참여하지 않는 상태였다는 것이다.

ISO 규정상 모든 회원국은 동일하게 1표를 갖는다. 기술 논쟁이 외부 국가 절차로 번질 경우, 구성원이 몇 명 안 되는 소규모 국가 위원회를 포섭하는 것이 WG21 본회의에 모인 수백 명의 동료 전문가를 설득하는 것보다 훨씬 수월하다. 이러한 구조적 불균형이 반대파의 로비에 강력한 지렛대 효과를 제공했다.

네 가지 선택지: 컴파일러 구현은 지속되나 신뢰는 파편화

사상 첫 DIS 부결을 맞이한 WG21은 ISO 규정에 따라 네 가지 경로를 마주하고 있다. 초안을 수정한 뒤 2차 DIS 투표를 진행하거나, 위원회 초안(CD) 단계로 되돌리는 방법이다. 또는 컨트랙트를 별도 기술 규격(TS)으로 분리하거나, 프로젝트 자체를 전면 철회하는 선택지도 규정상 가능하다.

P4238R1의 공동 저자인 J. 다니엘 가르시아(J. Daniel Garcia)는 시코드의 공지에 대한 댓글에서 실용적인 해법을 제시했다. “논란이 되는 기능 하나를 빼면 나머지 표준은 쉽게 통과될 것이다.” 다비드 반더보르데 역시 표준 라이브러리 강화 조치만 남기고 컨트랙트를 C++26에서 제거하는 방안을 지지하고 있다. 기술적으로 최선은 아니지만 현실적으로 통과 가능성이 가장 높은 타협점이다.

각국 표준화 기구는 12주간 수정 의견을 제출할 수 있으며, 마감은 2027년 1월 중순이다. WG21은 2026년 11월 16일 브라질 부지오스(Búzios)에서 전체 회의를 개최한다. 반더보르데는 2026년 안에 수정 DIS 투표가 성사되기 어려울 것으로 보고 있으며, 일정이 2027년으로 넘어가면 “C++27이라는 명칭이 더 정확할 것”이라고 언급했다. 새 버전이 공식 출간되기 전까지 현행 국제 표준은 여전히 ISO/IEC 14882:2024(C++23)이다. 예정되었던 C++29 로드맵 작업은 이번 거버넌스 위기 수습을 위해 전면 보류되었다.

주요 컴파일러 개발사들은 이미 승인된 기능의 구현을 계속 진행 중이므로 현업 개발 코드베이스가 당장 중단되는 일은 없다. 그러나 C++26의 공식 발행 일정은 불확실성에 빠졌으며, 시스템 아키텍트들은 더 이상 컨트랙트 문법과 의미론을 확정된 사안으로 간주할 수 없게 되었다.

이번 사태가 드러낸 가장 심각한 문제는 거버넌스 규약의 붕괴다. 위원회 내부에서 수년간 치열한 토론 끝에 형성된 의사결정이 외부 로비에 의해 손쉽게 무력화되었다. 텍스트를 수정하는 타협에는 몇 달이면 족하겠지만, 무너진 절차적 신뢰를 복원하는 데는 개발 생태계 전체가 오랜 시간을 지불해야 할 것이다.

참고 링크:

  • 안드레아스 페르티히 블로그: C++26 DIS failed, how does C++ survive?
  • WG21 문서 P4238R1: Returning C++26 for the Evaluation It Skipped
  • WG21 문서 P4433R0: Do not remove Contracts from C++26
  • WG21 문서 P4334R0 및 관련 제안 토론
  • 로버트 시코드의 C++26 투표 결과 공식 공지