지난 2024년 3월에 Chromium Committer 가 되었다. Chromium Gerrit 에 아이디를 만든 지 8년 10개월, 첫 번째 패치를 반영한 지 5년 10개월 만이다. 그동안 반영한 패치 수는 75개. 짧은 기간에 적은 패치로 Committer 가 되는 사람이 많은데 중간 3년 이상의 공백을 빼더라도 유독 오래 걸렸다.
어렸을 때부터 오픈소스 프로젝트와 오픈소스 개발자에 대한 환상이 있었다. 오픈소스 프로젝트가 뭔지 잘 모를 때부터 막연히 동경해 왔다. 오픈소스 프로젝트 개발자라는 이름 그 자체로 있어 보였고, 다른 개발자보다 좀 더 대단한 찐 개발자라는 환상이 있었다.
바야흐로 10년 전, 회사에 입사하기 전에 여름방학 동안 인턴으로 먼저 근무를 했었다. 인턴으로 입사할 때 회사 조직에 대해 아는 게 전혀 없었다. 1지망부터 3지망까지 가고 싶은 팀을 겨우 골라 써서 냈고 인사 면담을 했다. 며칠 뒤 알 수 없는 기준으로 2지망 팀에 배치를 받았다. 다행히 그 아래 부서를 선택할 수 있는 기회가 있었다. 말로 간단히 설명을 듣다가 한 부서가 WebKit 을 한다는 말을 듣고 옆에 있던 대학교 동기와 함께 바로 손을 들었다. 단순히 웹킷이 웹브라우저 오픈소스 프로젝트라는 것만 알고 손을 든 것이다.
막상 인턴을 하면서 회사에서 웹킷 코드는 구경도 못 했다. 짧은 인턴 후 신입 사원으로 다시 들어오기 전 6개월 사이 조직 구조와 프로젝트가 바뀌어 있었다. WebKit 은 이제 거의 하지 않고 Chromium 기반의 웹 브라우저를 메인으로 개발하고 있었다. 내가 인턴을 했던 그해에 Chromium 프로젝트에서 웹 엔진으로 사용하던 WebKit 을 Blink 로 fork 했고, 이에 따라 회사도 Chromium 기반의 프로젝트를 진행하기로 방향이 바뀐 것이다.
어쨌든 Chromium 도 오픈소스이고 오픈소스에 대한 로망은 여전했기 때문에 인턴을 했던 부서로 다시 돌아온 것에 만족했다. 신입으로 들어오면서 동경했던 오픈소스 개발자가 될 수 있을 거라는 기대를 했지만 생각처럼 되지는 않았다. 오픈소스 코드와 큰 관계가 없는 파트에 있으면서 4년 동안 Chromium 프로젝트에 직접적인 기여를 하지 못했다. 내가 먼저 적극적으로 어떻게든 움직였다면 기회가 많았을 텐데 그게 잘 안됐다. 시간이 지나 Chromium 프로젝트와 좀 더 밀접한 팀으로 옮기고 나서야 본격적으로 기여를 시작했다. 업무적으로도 이전보다 여유가 있었기 때문에 가능했다. 주변에 활발히 활동하던 Chromium Committer 분들과 Reviewer 가 있었던 것도 직간접적으로 도움이 됐다.
처음 패치를 반영했던 2018년에는 Good First Bug 레이블과 온갖 필터 조합으로 진입 장벽이 낮은 이슈를 찾아 패치를 올렸다. 다른 사람이 이슈를 선점하지 않게 경쟁적으로 최대한 빠르게, 많이 올렸다. 내가 올린 패치가 빌드와 테스트를 성공하고, 리뷰 후 최종 반영될 때마다 도파민이 터졌고 그 도파민으로 다음 패치를 또 작업했다. 동시에 여러 패치를 작업하기도 했다. 깊이는 별로 없었다. 회사에서도 웹 브라우저 개발을 했지만, 오픈소스 기여는 회사 업무와 관련이 없는 부분을 따로 했기 때문에 전문성을 키우는 데 한계가 있었다.
2018년 말 50개 가까이 패치를 반영하고 살짝 번아웃이 온 시점에 Committer 가 되지 않으면 의욕이 꺾일 것 같은 기분이 들었다. 내 패치를 제일 많이 리뷰해 주었던 Blink 리드 개발자에게 이메일로 커미터 추천해 줄 수 있는지 문의했다. 나를 추천할 2명의 다른 리뷰어가 있는지 물어보는 답장이 왔다. 넓고 얕게 패치를 반영하다 보니 non-trivial 한 패치를 많이 리뷰해 준 또 다른 두 명을 콕 집기가 어려웠다. 그동안 한 게 이만큼인데 그냥 추천서 올려주면 아무나 동의를 해주고 커미터 될 수 있는 거 아닌가? 나의 작업물을 인정해 주지 않고 완곡하게 거절한 걸로 느껴져서 괜히 서운했다. 말 그대로 2명 더 있으면 해주겠다는 단순한 말이었을 수도 있지만, 이 개발자가 깐깐하다는 소문도 있었고 나 자신도 부족한 걸 제일 잘 알았기 때문에 쉽게 포기했다. 의욕을 잃고 몇 달 뒤 새로운 서비스를 하는 팀으로 옮겼다. 그렇게 첫 번째 도전을 포기했다.
2019년 초 이후로 프로젝트 기여를 다시 시작한 건 2022년. 그사이 부서를 한 번 더 옮겼고 코로나 시기를 겪으면서 커리어에 대한 고민이 많았다. 이직이나 전배에 대한 기회가 있었지만, 뜻대로 진행되지 않았다. 그냥 남아서 끝까지 해볼걸, 좀 더 깊게 할 걸 후회를 하면서. 이직이든 뭐든 간에 오픈소스를 하는 게 도움이 되지 않을까? 도움이 될 정도로 깊이 해야 하지 않을까? 여러 생각을 했다. 3년 만에 다시 시작하면서 이번에는 하나를 깊게 해보는 걸로 전략을 바꿔보았다. 여러 모듈을 조금씩 보다가 Web Authentication 모듈과 관련된 패치를 반영하기 시작했다.
운이 좋게도 리뷰어를 잘 만나 리뷰어에게 도움을 받으면서 순조롭게 패치 반영을 했다. 그 리뷰어가 오래된 웹 표준 스펙과 테스트를 수정해 줬다고 추천까지 해줘서 Google Open Source Peer Bonus 를 받기도 했다. 6개월 동안 중요한 패치 10개만 딱 채우면 Committer 로 추천해달라고 할 수 있을 것 같았다. 그런데 Web Authentication 은 너무 어려운 모듈이었고 7~8개 정도로 애매한 개수의 패치를 반영한 후에 마무리가 잘 안됐다. 반영하던 내용과 관련된 스펙에 미묘한 부분이 정리가 잘 안됐고 뒤에 올리던 패치도 흐지부지됐다. 워낙 크고 엮인 게 많은 모듈이고, 구글에서 소수의 인원이 회사 업무로, 집중적으로 하는 느낌이라 중간에 끼어들기가 쉽지 않았다.
또 한 번 의욕이 꺾이긴 했지만 2023년 오픈 프런티어 기여형 프로그램 에 참여하면서 1년 동안 다시 도전했다. 조금만 더 하면 될 것 같아 여기서 포기하기에는 아까웠다. 이번에는 Blink CSS 모듈에 반영하는 걸 목표로 했다. 아래와 같은 이유로 CSS 모듈을 골랐다.
반영할 레이어가 적으면서, 스펙과 테스트가 명확하고, 앞으로 수정할 여지가 많은 모듈은 패치를 만들기도 쉽고 리뷰도 순조롭게 진행된다는 걸 경험했고 CSS 모듈이 이런 점을 충족한다고 판단했다.
전략(?)은 성공했고 결국 올해 CSS 모듈 리뷰어에게 추천을 받아 Committer 가 될 수 있었다. 올해 초에 리뷰 진행이 잘 안되고 feature spec 문서 작성 요청을 받으면서 귀찮고, 지치고, 포기하고 싶은 마음이 들었다. 마지막이라는 생각으로 최근에 자주 리뷰해 줬던 리뷰어에게 이메일로 작년에 반영한 패치 와 기존에 반영했던 패치 중에 중요한 것들을 정리하여 추천해 줄 수 있는지 문의했다. 조금 걱정했지만 리뷰어가 쿨하게 Committer 그룹에 노미네이션 이메일을 보내주었고 반대없이 지인 포함(ㅎㅎ) 여러 명이 +1을 해주면서 최종적으로 Committer 가 되었다. 내가 그 추천서 이메일을 직접 볼 수는 없고 아는 커미터 분께서 본인이 받은 메일을 따로 보내주셔서 내용을 볼 수 있었다. 추천서 내용을 보니 리뷰어가 feature spec 문서 작성을 요청했을 때 외부 개발자들은 잠수를 많이 타는데 나는 그렇지 않고 잘 진행해 주어 미래에도 가치 있는 컨트리뷰터가 될 것 같다는 멘트가 있었다. 올해 패치를 반영하면서 힘들게 feature spec 문서를 작성했던 게 크게 작용한 것 같다.
Chromium Committer 가 되기 위한 조건으로 10~20개의 non-trivial 패치 반영, 커미터 한 명의 추천 글과 다른 커미터 두 명 이상의 동의, 반대하는 사람이나 이견이 없어야 한다. 당연히 커미터 후보는 기본적으로 크로미움 프로젝트 개발 프로세스를 이해하는 개발자여야 한다. 협업 능력, 프로젝트 코드, 코딩 스타일, 테스트, 코드 리뷰 프로세스 등을 이해하는 것을 전제로 한다.
Committer 가 되면 좋은 점은 무엇일까?
Chromium 은 빅테크 기업 구글이 주도하는 큰 규모의 오픈소스 프로젝트이기 때문에 일반적인 오픈소스 커뮤니티 주도로 운영되는 프로젝트와는 조금 다르다. 개발 프로세스에서 볼 수 있는 chromium.org 계정의 대부분이 구글 개발자이고 그 사람들은 회사 업무와 프로젝트를 오픈된 환경에서 하는 것이라고 봐도 무방하다. 많지는 않지만, 외부 개발자에게 읽기 권한이 없는 이슈와 문서도 있다. 어떤 모듈은 구글 팀이 회사 업무로 로드맵을 세우고 매일 회의하면서 진행하고 있어서 외부인이 중간에 끼어들기 쉽지 않다.
프로젝트 규모가 너무 큰 것도 개인 개발자에게 한계로 느껴질 때가 많다. 규모가 너무 크고 코드가 빠르게 바뀌어 지속적인 추적을 하기 어렵다. 한 명의 개발자가 규모가 있는 큰 기능을 구현하는 것도 쉽지 않다. 그 과정에서 수많은 코드, 개발자, 리뷰어 등을 거쳐야 한다. 물론 처음부터 끝까지 프로세스를 거쳐 하나의 기능에 대해 디자인, 구현, 기능 배포까지 끝내면 퀀텀 점프를 한 느낌을 받을 수 있지만 감히 엄두가 나지 않는다. 그렇다 보니 자꾸 작고 쉬운 수정에 익숙해진다. 사실 내가 그렇다. 주도적으로 한 모듈에 큰게 기여 한 경험이 없다. 다음 레벨로 넘어가지 못하는 느낌이 든다. (다 실력이 부족해서 그렇다) 많은 개발자들이 Chromium 오픈소스 활동을 하다가 중간에 비슷한 한계를 느껴 흥미를 잃는다.
Chromium 프로젝트를 웹 브라우저 기반으로 사용하는 기업의 경우, 팀에서 별도의 협업을 통해 feature 를 제안하고 구현하기도 한다. 보통 Chrome 의 로드맵에 맞춰 Chromium 브라우저 기능을 구현하기 때문에 외부에서 새로운 브라우저 기능을 추가하는 건 사실상 불가능하고, 보통은 웹 표준 관련된 모듈에 기여한다. Blink 등 웹 표준과 관련된 웹 엔진 기능은 외부의 W3C Spec 에 맞춰 구현되기 때문에 구글 외의 다른 기업이 W3C Community 의 Working Group, Editor 활동을 하면서 Chromium 에도 같이 기여를 한다. 웹 표준화 일은 웹 플랫폼 생태계에 기여하는 것이지 금전적으로 큰 이익이 되는 건 아니기 때문에 보통은 개발자 생태계에 기여할 여유가 있는 메이저 웹 브라우저 벤더들이 참여하고 있다. 크롬의 구글, 사파리의 애플, 파이어폭스의 모질라 재단은 물론이고 이를 기반으로 웹 브라우저를 개발하는 빅테크 기업들도 웹 표준화 업무도 같이 한다. 마이크로소프트는 2018년부터 Edge 를 Chromium 브라우저 베이스로 개발하면서 코드 컨트리뷰션 뿐만 아니라 웹 표준화에도 깊게 참여하고 있다.
한계를 길게 써놨는데 순수 실력으로 이런 한계를 돌파한 분들도 있다. 이분들은 이미 웹 표준 에디터나 모듈 리뷰어를 하고 계신다. 외부 사람들이 보통 기대하는 커미터, 이상적인 오픈소스 개발자에 가까운 활동을 한다.
Committer 가 된 것이 개인적으로는 하나의 마일스톤을 달성했다는 의미가 있지만 대외적으로는 별것이 아니라고 생각한다. 이게 개발 실력을 대변해 주지 않고, 타이틀 하나로 큰 힘이 있는 게 아니라는 걸 많은 분들이 아실 것이다. 우리나라에도 대충 어림잡아도 20~30명 이상의 Chromium Committer 가 있다. 프로젝트에 기여하는 사람 수를 생각하면 적다고 생각할 수도 있지만 그렇다고 완전 소수도 아닌 숫자다.
어쨌든 수년간 오픈소스를 하면서 많이 배우고 성장할 수 있었다. 회사에서 배울 수 없는 개발 프로세스를 경험하고 좋은 코드와 디자인도 볼 수 있었다. 일반화하긴 어렵지만 대개 오픈소스 프로젝트는 보통 회사에서 진행하는 프로젝트보다 좀 더 이상적인 형태로 운영이 된다. 회사에서 업무를 할 때도 스스로나 팀에게 적용하여 많은 도움이 됐다.
지금은 웹 기술과 웹 플랫폼, 웹 브라우저와 관련된 일을 하고 있진 않지만, 언젠가는 다시 하고 싶다는 마음이 있다. 놓지 않고 꾸준히 하다 보니 결국 커미터가 되었다. 다음 단계로 웹 표준 에디터나 리뷰어도 열려 있지만 회사 업무로 웹 브라우저 개발을 본격적으로 해도 달성하기엔 너무 어려운 목표이다. 지금 이 시점에 이걸 더 하는 게 맞나 의구심이 들기도 한다. 어쨌든 2024년 AI 시대에 앞으로 패러다임이 어떻게 바뀔지는 모르겠지만, 일단 플랫폼 쪽에 붙어있으면 좀 더 오랫동안 인간이 주도하는 일을 할 수 있지 않을까 생각하고 있다. 개인적으로 웹 브라우저를 포함한 웹 플랫폼이나 최근에 했던 안드로이드 플랫폼 등 다른 개발자가 사용하는 플랫폼을 만드는 일에 재미를 느꼈다. (물론 내가 했던 일은 구글과 회사에 깊게 엮여 있다는 함정이 있다)
커미터가 된 지 벌써 두 달이 넘었는데 그 사이 별 활동을 하지 않았다. 다음 목표가 없고, 동기가 떨어져서 그런 것 같다. 다시 작은 수정부터 사이클을 만들어야겠다. 오픈소스 활동도 관성이 있어서 멈추면 다시 시작하기 너무 어려운데 한 번 반영하기 시작하면 다시 쉽게 사이클이 생긴다. 다시 쳇바퀴에 들어가 Chromium 에 구현되지 않은 웹 표준 기능을 처음부터 끝까지, 문서화부터 기능 배포까지 해보고 싶다. 이렇게 하나의 기능에 대해 한 사이클을 돌려본 적이 없기도 하고, 퀀텀 점프를 위한 이벤트를 스스로 만들고 싶은 것이 가장 큰 이유이다.