드라이버 버그라는 외부의 적과 싸우는 동안, 팀 내부에서는 또 다른 종류의 혼란이 피어오르고 있었다. 그것은 W3C에서 매일같이 벌어지는 논쟁이 만들어내는 ‘사양 변경(Spec Change)’의 파도였다.
아침 스탠드업 미팅. 카이가 피곤한 얼굴로 입을 열었다.
“어젯밤, W3C에서 Bind Group의 구조에 대한 중대한 변경이 확정되었습니다. 기존의 GPUBindGroupBinding
인터페이스가 사라지고, GPUBindGroupEntry
라는 새로운 구조로 대체되었습니다.”
그의 말에 연구실의 공기가 싸늘하게 식었다. 지난 몇 주간 팀이 공들여 작성했던 Dawn의 Bind Group 관련 코드가 하루아침에 폐기물이 되었음을 의미했다.
벤이 믿을 수 없다는 듯 물었다.
“전부 다요? 왜 갑자기 바뀐 겁니까?”
“API의 일관성을 높이고, 미래 확장성을 고려한 결정이라고 합니다. 논리적으로는 타당한 변경입니다.”
카이는 어쩔 수 없다는 듯 어깨를 으쓱했다.
이것은 일상이었다. 그들이 잠든 사이에도, W3C의 깃허브 저장소에서는 치열한 논쟁이 벌어지고 있었고, 그 결과로 API의 이름, 매개변수의 순서, 객체의 구조가 수시로 바뀌었다. 어제의 코드는 오늘의 레거시(Legacy)가 되었다.
팀원들은 끊임없는 코드 수정 작업에 지쳐갔다.
“이건 마치 모래 위에 성을 짓는 것 같습니다. 성벽을 다 쌓았다고 생각하면, 누군가 와서 기초 설계를 바꿔버리는 꼴이에요.”
한 엔지니어의 푸념 섞인 목소리에는 모두가 공감하는 무력감이 묻어 있었다.
가장 큰 문제는 WGSL, 즉 그들이 직접 만들고 있는 셰이더 언어였다. WGSL의 사양은 특히나 변화가 잦았다.
@builtin(position)
이 @position
으로 바뀌었다가, 다시 @builtin(position)
으로 돌아왔다.
데이터 타입의 이름이 vec4f
였다가 vec4<f32>
로 변경되었다.
함수 선언 문법이 fn myFunction() -> f32
였다가 fn myFunction(): f32
를 거쳐 다시 원래대로 돌아오는 일도 있었다.
이런 사소한 변경 하나하나가 Dawn 내부에 구현된 WGSL 컴파일러의 수천 줄 코드를 수정해야 하는 대작업으로 이어졌다. 팀은 새로운 기능을 개발하는 시간보다, 끊임없이 바뀌는 사양을 따라잡기 위해 코드를 수정하는 데 더 많은 시간을 쏟아부어야 했다.
어느 날 오후, 드미트리는 완전히 지쳐버린 팀원들을 회의실로 불러 모았다. 그는 이대로 가다가는 프로젝트의 동력이 완전히 소진될 수도 있다는 위기감을 느꼈다.
“힘든 거 압니다. 우리 모두가 지쳤다는 것도 잘 알고 있습니다.”
드미트리가 차분하지만 힘 있는 목소리로 입을 열었다.
“하지만 우리가 지금 겪는 이 혼란이, 사실은 우리가 올바른 길을 가고 있다는 가장 강력한 증거입니다.”
팀원들은 의아한 표정으로 그를 바라보았다.
“생각해 보십시오. 만약 이 표준을 구글 혼자서 만들었다면 어땠을까요? 모든 것은 일사천리로 진행됐을 겁니다. 사양 변경도, 논쟁도 없었겠죠. 하지만 그 결과물은 ‘구글을 위한 API’가 되었을 겁니다. 다른 브라우저에서는 제대로 동작하지 않거나, 구현하기 매우 어려운, 반쪽짜리 표준이 되었을 겁니다.”
그는 잠시 말을 멈추고 모두를 둘러보았다.
“지금의 이 혼란은 애플과 모질라, 마이크로소프트, 그리고 수많은 독립 개발자들이 각자의 관점에서 이 표준을 더 좋게 만들기 위해 싸우고 있기 때문에 발생하는 겁니다. 이 과정이 고통스러운 만큼, 최종 결과물은 훨씬 더 견고하고, 보편적이며, 오래 살아남는 표준이 될 겁니다.”
그는 화이트보드에 ‘WebGPU’라고 크게 썼다.
“우리는 단순히 크로미움의 기능을 만드는 것이 아닙니다. 우리는 지금, 웹의 다음 10년을 위한 기반 시설을 닦고 있는 겁니다. 이 기반 위에서 미래의 개발자들이 무엇을 만들어낼지 상상해 보십시오. 이 고통은 그 미래를 위한 투자입니다.”
그의 말은 단순한 위로가 아니었다. 그들의 일이 가진 진정한 의미를 다시 한번 일깨워주는 선언이었다.
회의실을 나서는 팀원들의 발걸음은 여전히 무거웠지만, 그들의 눈에는 이전과는 다른 빛이 돌고 있었다. 그들은 다시 각자의 자리로 돌아가, 폐기된 코드를 지우고 새로운 사양에 맞춰 키보드를 두드리기 시작했다.
그것은 더 이상 의미 없는 반복 작업이 아니었다. 웹의 역사에 단단한 주춧돌 하나를 더 놓는, 신성한 노동이었다. 그들은 살아있는 표준을 만드는 고통스러운 영광을 온몸으로 감내하고 있었다.