WebGPU의 생태계는 빠르게 확장되고 있었다. 크롬과 파이어폭스가 안정적인 지원을 제공했고, 개발자 커뮤니티는 활발하게 움직였다. 하지만 드미트리는 마음 한구석에 남아있는 마지막 불안 요소를 떨칠 수 없었다. 바로 애플의 사파리(Safari)였다.
사파리는 WWDC에서 WebGPU 지원을 화려하게 발표했지만, 그 이후의 행보는 다소 불투명했다. 사파리 테크놀로지 프리뷰(Safari Technology Preview)에서는 꾸준히 기능이 개선되고 있었지만, 정식 버전에 언제 기본 활성화될 것인지에 대한 명확한 로드맵은 공개되지 않았다.
이것은 생태계에 미묘한 불확실성을 안겨주었다.
“우리가 만든 WebGPU 콘텐츠가 과연 아이폰 사용자들에게도 제대로 전달될 수 있을까?”
모든 웹 개발자들이 품고 있는 질문이었다.
그러던 어느 날, W3C ‘GPU for the Web’ 그룹의 비공개 메일링 리스트에 짧은 메시지 하나가 도착했다. 발신인은 애플의 딘 잭슨이었다.
“To all, Safari 17 on macOS Sonoma, a a well as iOS 17 and iPadOS 17, will ship with WebGPU enabled by default.”
(모두에게, macOS Sonoma의 Safari 17과 iOS 17, iPadOS 17에 WebGPU가 기본 활성화되어 출시될 예정입니다.)
메시지는 간결했지만, 그 파급력은 엄청났다.
드디어 마지막 거인이 참전을 공식화한 것이다. 데스크톱뿐만 아니라, 수억 대의 아이폰과 아이패드에서도 WebGPU가 기본으로 동작하게 된다는 선언. 이것은 WebGPU가 진정으로 ‘보편적인’ 웹 표준이 되었음을 알리는 마지막 퍼즐 조각이었다.
Dawn 팀의 연구실은 다시 한번 환호로 가득 찼다.
“이제 정말로 시작이군!”
“아이폰에서 네이티브 수준의 3D 게임을 돌릴 날이 온 거야!”
하지만 드미트리는 축제 분위기 속에서도 긴장을 늦추지 않았다.
그는 즉시 팀에게 지시했다.
“지금 당장 최신 아이폰과 맥북을 구해오게. 그리고 애플이 배포한 최신 개발자 베타 운영체제를 설치해. 우리의 공식 샘플과 주요 파트너들의 웹사이트가 사파리 17 베타에서 완벽하게 동작하는지, 픽셀 하나까지 검증해야 한다.”
그의 우려는 곧 현실이 되었다.
며칠 후, 테스트를 진행하던 벤이 심각한 표정으로 드미트리를 불렀다.
“드미트리, 문제가 생겼습니다. 컴퓨트 셰이더를 사용하는 대부분의 샘플이 사파리에서 아예 동작하지 않습니다.”
콘솔 창에는 Compilation failed
라는 에러 메시지만 덩그러니 떠 있었다.
“말도 안 돼. 우리의 WGSL 코드는 표준을 완벽하게 준수하고 있어. 크롬과 파이어폭스에서는 아무 문제 없었다고.”
팀은 원인 분석에 착수했지만, 단서는 거의 없었다. 사파리의 개발자 도구는 크롬만큼 상세한 디버깅 정보를 제공하지 않았다. 그들은 마치 깜깜한 방 안에서 고장 난 기계를 더듬거리며 수리하려는 기분이었다.
드미트리는 이 문제를 해결할 유일한 방법은 ‘협력’뿐이라고 판단했다. 그는 직접 애플의 딘 잭슨에게 연락을 취했다.
“딘, 당신들의 사파리 베타에서 WGSL 컴파일에 문제가 있는 것 같습니다. 저희가 만든 최소한의 테스트 케이스를 보내드릴 테니, 당신들의 내부 디버거로 원인을 파악해 줄 수 있겠습니까?”
초기의 경쟁 구도는 이제 온데간데없었다. 이제 그들은 웹 표준이라는 공동의 배를 함께 타고 있는 동지였다. 딘은 흔쾌히 협력을 약속했다.
며칠 후, 딘으로부터 회신이 왔다. 원인은 예상치 못한 곳에 있었다.
“당신들의 WGSL 코드에는 문제가 없습니다. 문제는 저희 사파리의 웹킷(WebKit) 엔진이 셰이더 코드를 처리하는 방식에 있었습니다. 저희는 보안을 위해 셰이더 코드를 별도의 격리된 프로세스에서 컴파일하는데, 이 프로세스와 메인 렌더링 프로세스 간의 데이터 통신 과정에 버그가 있었습니다. 특히, 컴퓨트 셰이더가 사용하는 복잡한 데이터 구조체를 전달할 때 문제가 발생하더군요.”
이것은 WebGPU 사양의 문제가 아니라, 브라우저 아키텍처의 깊숙한 곳에 숨어있던 구현 버그였다. 애플이 아니었다면 결코 찾아낼 수 없었을 문제.
애플의 엔지니어들은 즉시 패치 작업에 착수했다. 그리고 다음 베타 버전에서 그 버그는 깨끗이 해결되었다.
드미트리의 팀이 다시 테스트했을 때, 컴퓨트 셰이더 샘플들은 아이폰과 맥북에서 마침내 완벽하게 동작했다.
이 사건은 드미트리에게 중요한 사실을 다시 한번 일깨워주었다.
웹 표준의 성공은, 단순히 좋은 사양을 만드는 것에서 끝나지 않는다는 것을. 그 표준을 구현하는 모든 참여자들이 서로의 약점을 보완해주고, 투명하게 소통하며, 공동의 목표를 향해 나아갈 때 비로소 완성된다는 것을.
가을이 오고, 애플의 새로운 운영체제가 전 세계에 배포되기 시작했다.
수억 명의 아이폰 사용자들이 자신도 모르는 사이에, 그들의 손안에 WebGPU라는 새로운 엔진을 품게 되었다.
이제 정말로, 장애물은 모두 사라졌다.
크롬, 파이어폭스, 사파리. 세 개의 거대한 축이 모두 WebGPU라는 이름 아래 하나가 되었다.
개발자들은 이제 어떤 플랫폼, 어떤 기기를 걱정할 필요 없이, 오직 자신들의 상상력만을 한계로 삼아 새로운 웹을 창조할 수 있게 된 것이다.
드미트리는 자신의 아이폰으로 WebGPU 공식 샘플 페이지에 접속했다. 화면 속에서 수많은 물고기 떼가 유려하게 헤엄치고 있었다. 그는 그 작은 화면 속에서, 지난 10년간의 여정이 만들어낸 거대한 결실을 보았다. 그리고 그 결실 위에서 펼쳐질, 무한한 미래를 보았다.