“결국, 개발자는 무엇으로 코딩해야 하는가?”
카이가 던진 질문은 NXT 팀의 축제 분위기에 찬물을 끼얹었다. 브라우저가 소비할 이상적인 중간 코드, SPIR-V를 찾아냈다는 기쁨도 잠시. 그들은 개발자라는 가장 중요한 퍼즐 조각을 빠뜨리고 있었다. SPIR-V는 기계를 위한 언어이지, 사람을 위한 언어가 아니었다.
회의실 화이트보드에는 ‘개발자 언어(???) -> 컴파일러 -> SPIR-V’ 라는 새로운 다이어그램이 그려졌다. 모두의 시선은 첫 번째 물음표에 꽂혀 있었다.
“가장 간단한 방법은 기존 언어를 지원하는 컴파일러를 제공하는 겁니다.”
벤이 다시 한번 의견을 냈다. 그는 현실적인 대안을 찾고 있었다.
“GLSL-to-SPIR-V 컴파일러는 이미 존재합니다. 개발자들이 기존 WebGL 코드를 쉽게 마이그레이션 할 수 있도록 GLSL을 지원하는 거죠. 필요하다면 HLSL 컴파일러도 추가할 수 있고요.”
겉으로 보기엔 가장 합리적인 해결책이었다. 새로운 언어를 배우는 부담 없이, 기존의 지식을 그대로 활용할 수 있다. 하지만 드미트리의 생각은 달랐다. 그의 경험이 경고 신호를 보내고 있었다.
“그 방식은 단기적으로는 편할지 모릅니다. 하지만 장기적으로는 더 큰 혼란을 낳을 겁니다.”
드미트리가 천천히 입을 열었다.
“어떤 버전의 GLSL을 지원할 겁니까? OpenGL 4.5용 GLSL? 아니면 Vulkan용 GLSL? 둘은 미묘하게 다릅니다. 이 미묘한 차이가 개발자들에게는 끝없는 디버깅의 늪이 될 겁니다. ‘이 코드는 왜 WebGL에선 되는데, NXT에선 안 되지?’ 라는 질문이 쏟아질 게 뻔합니다.”
그의 지적은 뼈아픈 사실이었다. 언어의 모호함은 버그의 온상이다.
“HLSL도 마찬가지입니다. 두 개의 다른 고급 언어를 지원하는 것은 브라우저 내부에 두 개의 거대하고 복잡한 컴파일러를 내장하는 것과 같습니다. 유지보수 비용도, 보안 공격에 노출될 면적도 두 배가 되는 셈이죠.”
드미트리는 화이트보드에 그려진 물음표를 가리켰다.
“우리는 지금 ‘새로운 집’을 짓고 있습니다. 그런데 그 집에 들어갈 가구를 옛날 집에서 쓰던 것들로, 규격도 맞지 않는 것들로 억지로 채워 넣으려는 것과 같습니다. 우리는 이 새로운 집에 완벽하게 들어맞는, 맞춤 제작된 가구가 필요합니다.”
그 순간, 연구실의 공기가 바뀌었다. 모두가 드미트리가 말하려는 바를 직감했다. 그것은 너무나도 대담하고, 어쩌면 무모하기까지 한 발상이었다.
“우리가… 직접 언어를 만들어야 합니다.”
그 말이 나오는 순간, 정적이 흘렀다. 새로운 프로그래밍 언어를 창조하는 일. 그것은 수년, 혹은 수십 년이 걸릴 수도 있는 거대한 프로젝트였다. 수많은 언어들이 세상에 나왔다가 이름도 없이 사라져갔다. 성공을 보장할 수 없는, 위험천만한 길이었다.
“드미트리, 진심입니까?”
카이의 목소리에 놀라움이 가득했다. “사양 정의, 컴파일러 구현, 개발자 생태계 구축… 우리가 그걸 다 감당할 수 있을까요?”
“해야만 합니다.”
드미트리의 목소리는 단호했다. 그의 눈에는 확신이 서려 있었다.
“우리의 목표를 달성하기 위한 유일한 길입니다. 우리의 API 철학에 완벽하게 부합하고, SPIR-V로 모호함 없이 변환되며, 보안에 강하고, 웹 개발자들이 쉽게 배울 수 있는 언어. 그런 언어는 세상에 존재하지 않습니다. 그러니 우리가 만들어야 합니다.”
그는 새로운 언어가 가져야 할 세 가지 원칙을 제시했다.
첫째, 명시적이고 모호하지 않을 것. 언어의 모든 기능은 Vulkan, Metal, DirectX 12의 공통 개념에 직접적으로 대응되어야 했다.
둘째, 파싱과 검증이 쉬울 것. 브라우저가 최소한의 비용으로 처리할 수 있도록 문법은 단순하고 명료해야 했다.
셋째, 친숙할 것. 완전히 새로운 문법이 아니라, Rust, C++, Swift, TypeScript 등 현대 프로그래밍 언어에서 영감을 얻어 개발자들이 쉽게 적응할 수 있도록 해야 했다.
그의 논리 정연한 설명에 팀원들의 눈빛이 흔들리기 시작했다. 불가능해 보였던 길이, 유일한 길처럼 보이기 시작했다. 이것은 단순히 편의를 위한 선택이 아니라, 새로운 API의 성공을 위한 필연적인 과정이었다.
“좋습니다. 우리가 직접 만들죠.”
카이가 마침내 동의했다. 그의 한마디에 다른 팀원들도 결심한 듯 고개를 끄덕였다.
NXT 프로젝트는 이제 API 설계를 넘어, 새로운 프로그래밍 언어의 창조라는 더 거대한 영역으로 발을 내디뎠다.
“이름을 정해야겠군요.”
드미트리가 미소를 지으며 말했다.
“WebGPU를 위한 셰이딩 언어. WebGPU Shading Language. 줄여서, WGSL(위그슬).”
WGSL.
그 이름이 회의실에 울려 퍼지는 순간, 모두가 자신들이 지금 역사의 한 페이지를 쓰고 있음을 직감했다. 아직은 이름뿐인 이 언어가, 앞으로 전 세계 수백만 웹 개발자들의 손에서 웹의 모습을 바꾸어 놓을 강력한 도구가 될 것이었다.