API 설계가 구체화될수록, 워킹 그룹의 엔지니어들은 필연적으로 하나의 거대한 장벽에 계속해서 부딪혔다. 그것은 기술적인 난제가 아니라, 웹의 존재를 관통하는 근본적인 철학의 문제였다. 바로 ‘보안(Security)’이었다.
회의실의 화이트보드에는 WebGL의 데이터 흐름이 그려져 있었다.
자바스크립트 코드 -> 브라우저(게코, 웹킷 등) -> 그래픽 드라이버 -> GPU 하드웨어
문제는 ‘그래픽 드라이버’ 구간이었다.
그래픽 드라이버는 엔비디아, AMD, 인텔 같은 하드웨어 제조사가 만드는, 운영체제의 가장 깊숙한 곳(커널 모드)에서 동작하는 복잡하고 거대한 소프트웨어였다. 이 드라이버들은 역사적으로 수많은 보안 취약점(Vulnerability)의 온상이었다.
지금까지는 사용자가 자신의 컴퓨터에 직접 설치한 신뢰할 수 있는 응용 프로그램(게임, 포토샵 등)만이 드라이버와 직접 통신했다. 하지만 WebGL은 이 구도를 완전히 바꾸려 하고 있었다.
“우리가 지금 하려는 일의 본질을 다시 생각해 봅시다.”
애플의 보안 아키텍트가 무겁게 입을 열었다. 그의 표정은 그 어느 때보다 심각했다.
“우리는 지금, 인터넷에서 내려받은 정체불명의 코드 조각(자바스크립트)이 생성한 데이터를, 잠재적 버그 덩어리인 그래픽 드라이버에 직접 전달하려는 겁니다. 이것이 얼마나 위험천만한 일인지 모두가 알아야 합니다.”
그의 말에 회의실은 찬물을 끼얹은 듯 조용해졌다.
그의 우려는 기우가 아니었다. 악의적인 공격자가 특정한 형태의 3D 모델 데이터나 교묘하게 조작된 셰이더 코드를 WebGL을 통해 드라이버에 전달한다고 상상해보자. 만약 해당 드라이버에 알려지지 않은 버그가 있다면?
최악의 시나리오는 끔찍했다.
공격 코드가 드라이버의 메모리 처리 오류를 유발하여 시스템 전체를 다운(Denial of Service)시킬 수 있었다. 더 심각하게는, 드라이버의 권한을 탈취하여 샌드박스를 무력화하고 컴퓨터의 모든 파일에 접근하거나 키보드 입력을 훔쳐보는 스파이웨어를 설치할 수도 있었다.
웹페이지를 방문했을 뿐인데, 컴퓨터가 좀비 PC가 되어버리는 것이다.
“이건 마치, 공항 검색대를 통과한 승객에게 비행기 조종간을 직접 만지게 해주는 것과 같습니다. 절대 있어서는 안 될 일입니다.”
그의 비판은 워킹 그룹 전체를 뒤흔들었다. 몇몇 엔지니어들은 WebGL 프로젝트 자체가 너무 위험해서 중단해야 하는 것이 아니냐는 극단적인 의견까지 내비쳤다.
블라디미르는 이 장벽을 넘지 못하면 모든 것이 끝장이라는 것을 직감했다. 그는 자신의 프로토타입을 만들 때부터 이 문제를 고민해왔다.
“우리가 조종간을 직접 주자는 게 아닙니다.”
블라디미르가 반박에 나섰다. “우리는 승객(웹 개발자)과 조종사(드라이버) 사이에, 모든 통신을 감시하고 검증하는 ‘부조종사(브라우저)’를 두자는 겁니다. 승객의 모든 요청은 부조종사의 엄격한 검토를 거쳐야만 조종사에게 전달될 수 있습니다.”
그의 아이디어는 ‘다층 방어(Defense in Depth)’ 전략이었다.
첫째, API 수준에서의 제한. 애초에 위험한 기능은 WebGL API 자체에 포함시키지 않는다.
둘째, 입력값 검증(Input Validation). 자바스크립트에서 넘어오는 모든 데이터(정점 좌표, 텍스처 크기 등)가 합리적인 범위 내에 있는지, 약속된 형식에 맞는지 브라우저가 철저히 검사한다. 비정상적인 값이 감지되면 드라이버에 전달하기 전에 즉시 에러를 발생시킨다.
셋째, 셰이더 코드 검증. 개발자가 작성한 GLSL 셰이더 코드를 브라우저가 직접 분석하고, 잠재적으로 위험한 코드(무한 루프, 허용되지 않은 함수 호출 등)가 없는 안전한 코드로 재작성(transpiling)한 후에 드라이버에 전달한다.
이러한 다중의 안전장치를 통해, 설령 드라이버 자체에 버그가 있더라도 브라우저 단에서 대부분의 공격 시도를 사전에 차단할 수 있다는 논리였다.
하지만 애플의 보안 아키텍트는 여전히 회의적이었다.
“이론적으로는 그럴듯하지만, 우리가 세상의 모든 드라이버 버그를 예측하고 막을 수는 없습니다. 단 하나의 예외만 뚫려도 끝입니다.”
보안이라는 거대한 장벽 앞에서 WebGL의 운명은 다시 한번 기로에 섰다. 그들은 단순히 새로운 기술을 만드는 것이 아니었다. 웹의 기본 철학인 ‘안전함’을 훼손하지 않으면서 혁신을 이뤄낼 수 있는, 그 누구도 가보지 않은 길을 개척해야만 했다. 이 문제를 해결하지 못하면, WebGL은 세상의 빛을 보지 못하고 역사 속으로 사라질 운명이었다.