리누스 토발즈의 ‘깃(Git)’ 20주년 소회 “별일 아니었다”

“나는 그냥 내게 필요해서 ‘깃’을 만들었다. 만들고 4개월만에 흥미를 잃었다. 20년 중 4개월만 투자한 셈이다. 모든 공은 깃에 참여하는 다른 모든 분에게 돌려야 한다. 그들은 지금까지 나보다 훨씬 더 많은 일을 해냈다.”

소프트웨어 버전관리 시스템 ‘깃(Git)’이 올해로 탄생 20주년을 맞았다. 이에 깃을 만든 리누스 토발즈는 깃허브와 소프트웨어 엔지니어 테일러 블라우와 인터뷰를 통해 소회를 밝혔다.

리누스 토발즈는 2005년 4월 7일 깃의 첫번째 커밋을 했다. 당시까지 리눅스 커널 개발에 사용하던 비트키퍼(Bitkeeper)를 더 이상 쓸 수 없게 된 리누스 토발즈는 열흘만에 깃을 개발했다. 첫 커밋에도 깃을 사용할 정도로 쓰기에 충분했다.

깃은 파일의 변경 사항을 추적하고 여러 사용자 간 협업을 관리할 수 있는 분산 버전 관리 시스템이다. 리눅스 커널 개발자는 2002년부터 비트키퍼란 소스관리시스템(SCM)을 쓰고 있었다. 그러다 비트키퍼 저작권을 소유하고 있던 래리 맥보이가 비트키퍼의 자유로운 이용을 철회했고, 리눅스 커널 개발자도 대안을 찾아야 했다.

리누스 토발즈는 사용 가능한 버전관리 시스템을 물색했지만 만족하지 못했고, 여러 사용자가 빠르게 활용할 수 있는 시스템을 직접 만들었다.

첫 공개 20년 후 현재 깃은 전세계 대부분의 소프트웨어 개발 작어에 활용되고 있다. 이에 대해 리누스 토발즈는 “깃이 SCM 세계 전체를 장악한 건 가장 큰 놀라움 중 하나”라며 “그것은 내 문제를 해결하는 방법으로 여겼고 당연히 뛰어나다고 생각하긴 했다”고 말했다.

그는 “20년전 첫번째 버전은 아직 다듬어지지 않은 상태였지만, 솔직히 그 버전조차 CVS보다 뛰어났다”며 “나는 이 시장이 매우 끈적끈적하다고 생각했고, CVS를 정말 싫어해서 사용할 수 없으니 내 방식대로 하기로 했다”고 설명했다.

이어 “비트키퍼도 더 이상 쓸 수 없게 됐고 내게 맞는 걸 하고 다른 사람은 신경쓰지 않기로 했다”며 “실제로 처음 몇달, 몇년 동안 사람들은 사용하기 어렵고 직관적이지 않다고 불평했는데, 그러다 스위치가 켜진 것처럼 뭔가 일어났다”고 덧붙였다.

깃 개발은 시작부터 공개까지 10일밖에 걸리지 않은 것으로 알려진다. 그러나 토발즈는 실제로 비트키퍼의 대안을 고민한 기간은 4개월 이상이었다고 밝혔다. 코드 작성은 10일 남짓 걸렸지만, 아이디어를 구상한 기간은 꽤 길었다는 얘기다.

토발즈는 이에 대해 “솔직히 전체 과정은 그 전해인 2004텬 12월이나 11월쯤 시작됐다”며 “비트키퍼는 완벽하진 않았어도 다른 어떤 것보다 훨씬 앞서 있었지만, 상용이었기에 커뮤니티에서 완전히 환영받지 못했다”고 설명했다.

그는 “내가 아는 래리 맥보이가 오픈소스를 정말 좋아해서 무료로 사용할 수 있었는데, 그는 동시에 오픈소스 기반 사업을 하고 있었고 비트키퍼를 대기업에 팔고 싶어했다”며 “오픈소스가 아닌데다 가장 큰 오픈소스 프로젝트 중 하나에만 사용된다는 점이 많은 사람에게 걸림돌이 됐다”고 밝혔다.

토발즈가 깃 개발을 결심하기 전 비트키퍼를 대체할 오픈소스를 찾을 당시 호주의 트리지(Tridge)에서 비트키퍼를 리버스엔지니어링한 오픈소스가 있었다. 비트키퍼는 오픈소스에 사용할 수 있지만 리버스 엔지니어링과 복제를 금지하는 라이선스 규정을 갖고 있었고, 이 때문에 비트키퍼가 완전히 독점 소프트웨어로 전환하게 됐다.

토발즈는 “나는 래리 맥보이와 이야기를 나누고, 트리지와 이메일을 주고 받으며 해결책을 찾으려 노력했지만, 둘은 완전히 상반된 입장이었고 해결책은 나오지 않았다”며 “그래서 깃을 쓰기 시작했을 때쯤, 사실 4개월 동안 이 문제를 고민하고 내가 맞는 게 뭔지, 비트키퍼보다 더 나은 기능을 제공하면서 방식은 다른 기능을 제공하려면 어떻게 할지 고민했다”고 말했다.

리누스 토발즈는 깃을 개발하는 기간동안 리눅스커널  개발을 중단했다. 그는 리눅스커널에서 가장 오랜 기간 손을 뗀 시간이었다고 했다.

그는 “사용자 공간에서 프로그래밍하는 게 얼마나 쉬운지, 신경 써야 할 게 훨씬 적었다”며 “메모리 할당도 걱정할 필요 없고, 많은 걸 신경쓰지 않아도 되고, 게다가 커널을 만들 때 필요한 모든 인프라를 갖추고 있으면 디버깅도 훨씬 쉬워진다”고 말했다.

앞서 토발즈가 언급했던 또 다른 SCM 오픈소스인 ‘CVS(동시 버전 시스템)’는 클라이언트-서버 방식의 버전 관리 체계였다. 1990년 만들어진 CVS는 당시에 오픈소스 프로젝트에 널리 쓰이고 있었다. 토발즈의 말처럼 깃 공개 당시 커널 개발자들은 깃이 방식을 어려워했다.

토발즈는 “지금은 당연한 게 당시엔 당연하지 않았다”며 “사람들이 깃을 사용하기 어려워한 이유 중 하나는 깃을 사용하지 않고 시작한 대부분의 사람이 CVS와 비슷한 배경을 갖고 있었기 때문”이라며 “나는 파일 시스템 전문가의 관점에서 깃에 접근했고 대부분의 소스 제어 관리 프로젝트를 경멸하고 거의 증오하는 마음을 갖고 있어서 현상 유지엔 전혀 관심이 없었다”고 말했다.

토발즈는 깃 개발에서 성능과 안정성을 중요한 기준으로 삼았다. 2000년대까지 SCM 소프트웨어들은 확장성을 고려하지 않고 만들어졌기 때문에 수많은 패치를 하는 상황에 적합하지 않았다. 리눅스커널은 한번에 250개의 패치도 진행돼야 했고, 당시 존재했던 방식은 너무 느렸다.

그는 “두세 가지의 근본적인 디자인 아이디어가 있었다”며 “낮은 수준에선 꽤 단순하지만, 세부사항과 사용자 인터페이스, 구현해야 하는 모든 기능은 복잡하다”고 말했다.

그는 “하지만 몇가지 핵심 개념을 가진 낮은 수준의 디자인을 사용하면 작성하기 더 쉬워지고 생각하기 훨씬 쉬워지며, 사람들에게 아이디어가 무엇인지 어느정도 설명할 수 있다”며 “이건 유닉스와 비교되는데, 유닉스는 철학의 근간을 이루는 개념은 단순하지만, 세부 내용은 매우 복잡하다”고 설명했다.

깃의 첫번째 버전은 1만줄의 코드로 작성됐다. 그는 깃 개발 초반에 장기적으로 어떻게 될 지 확신할 수 없었다고 했다.

그는 “첫주가 지난고 패치 적용에서 괜찮은 결과를 얻었지만, 다른 용도로 그다지 좋지 않았다”며 “병합을 위한 기본 사항은 이미 갖추고 있었고, 데이터 구조도 구축돼 있었지만, 첫번째 병합을 완료하기까지 실제로 일주일정도 더 걸렸다”고 말했다.

그는 “큰 그림과 결과를 염두에 두고 있었지만, 과연 내가 그 목표를 달성할 수 있을 지 확신하지 못했던 부분이 많았다”고 덧붙였다.

토발즈는 깃 공개 후 프로젝트의 유지관리를 주니오 하마노에게 넘겼다. 주니오 하마노는 지금까지 깃 프로젝트 유지관리자 역할을 수행하고 있다.

그는 “깃을 3~4개월 정도 유지하다가 2005년 8월 넘겨줬다”며 “당시엔 ‘아직 살아있네’란 생각뿐이었고 그냥 넘겼다”고 말했다.

그는 “깃 메일링리스트는 계속 보다가 요즘은 보지 않는데, 주니오는 혹시라도 무슨 질문을 하더라도 내가 괜찮을지 확인하고 싶어했다”며 “동시에 이건 내가 하고 싶은 일이 아니란 생각이 들었다”고 했다.

그는 “큰딸이 대학에 갔는데, 두달 뒤에 딸이 내게 문자를 보내서 컴퓨터과학 연구실에서 내가 리눅스보다 깃으로 더 유명하다고 했다”며 “거기서 모든 작업에 깃을 사용한다고 했고, 깃이 내게 큰 의미가 없다고 생각했다”고 덧붙였다.

주니오 하마노는 깃 프로젝트의 공개 후 초창기부터 참여한 사람이었다. 리누스 토발즈는 주니오 하마노가 깃 프로젝트 유지관리를 맡은 뒤 훌륭하게 운영하고 있다고 칭찬했다.

깃은 리눅스커널 같은 대규모 프로젝트에서도 효과적이지만, 소규모 프로젝트에서도 효과적이다.

깃은 사용자의 기기에서 작업한 코드를 다른 곳으로 옮기기 쉽고, 다시 활용하기도 쉽다. 깃허브 같은 저장소 서비스를 활용하면 공유와 추적도 간편하다. 하지만 토발즈는 깃허브 같은 저장소 서비스를 만들 생각은 하지 않았다고 한다.

토발즈는 “분산된 특성 덕분에 많은 일이 쉽게 이뤄진다는 게 바로 깃을 이전의 모든 SCM과 차별화하는 부분”이라며 “깃을 순전히 로컬에서 작업한 다음 나중에 다른 곳에서도 사용할 수 있게 하는 것을 1순위 설계 목표로 삼지 않았다”고 말했다.

그는 “CVS는 이런 종류의 저장소를 설정해야 하고, 다른 곳으로 옮기고 싶을 때 매우 번거로우며, 다른 사람과 공유하면 추적할 수 없다는 점에서 깃과 다르다”며 “기존 SCM은 항상 하나의 특별한 저장소가 존재하게 되지만, 깃은 그런 기능을 제공하지 않았고, 애초에 의도적으로 그렇게 하지 않았기 때문에 깃허브 같은 서비스가 사소하게 느껴졌다”고 했다.

그는 “깃의 기본 호스팅 사이트는 사실 아무것도 아니다”라며 “깃의 전체적인 설계는 복사를 쉽게 한 것이었고, 모든 저장소는 동일하고 동등하기 때문”이라고 말했다.

그는 “그것이 결국 개인 개발자가 깃을 사용하기 매우 쉽게 만들어준 것 같다”며 “새 깃 저장소를 만들 때 깃에서 하는 것처럼 하면 끝이고 프로젝트를 키워서 다른 사람과 함께 작업하려고 생각하면 그냥 깃허브에 푸시만 하면 된다”고 설명했다.

깃은 오늘날 소프트웨어 개발 방식에 막대한 영향을 끼쳤다. 이에 토발즈는 자신의 덕분이라기보다 깃허브 같은 호스팅 서비스 덕분이라고 했다.

그러면서 “세부적인 부분이 바뀌고, 어느정도 협업이 쉬워지고, 일회용 프로젝트들을 더 쉽게 진행할 수 있게 됐다”며 “하지만 소프트웨어 개발에 근본적인 변화를 가져왔다고는 생각하지 않는다”고 말했다.

그는 현대의 소프트웨어 개발에서 새롭게 등장하는 워크플로우를 지원하기 위해 버그 추적 기능이 더 많아지면 좋겠다고 밝혔다. 버그나 이슈를 더 통합적으로 관리할 수 있게 되길 바란다면서 모든 호스팅 사이트가 각자 다른 버전을 사용하는 등 분산돼 있다고 했다.

그는 “그들이 그렇게 하는 건 표준화된 좋은 기반이 없어서고, 깃 자체 덕분에 코드 이동이 매우 쉬운데도 가치를 더하고 사람들을 생태계에 머물게 하는 방법이기 때문”이라며 “버그 추적과 관련된 전반적인 문제를 호스팅 사이트 간에 더 공유하고 통합할 수 있는 방안이 있으면 좋겠다”고 밝혔다.

리누스 토발즈가 깃 프로젝트에 마지막으로 참여한 건 2022년 8월이다. 토발즈는 지난 몇년의 변화 중에서 병합 전략이 더 스마트해지고, 일부 스크립트를 C로 다시 작성해 더 빨라진 게 마음에 들었다고 했다.

깃 생태계는 풍부한 도구를 갖고 있다. 그러나 토발즈는 깃 명령 언어를 사용할 뿐 편집기 통합 기능을 사용하지 않는다고 했다. 그가 사용하는 깃의 명령어는 ‘git merge’, ‘git blame’, ‘git log’, ‘git commit’, ‘git pull’이라면서 “나는 아주 라이트한 깃 사용자”라고 말했다.

그는 깃의 잠재력을 진정으로 인정하는 사람들이 나타났다는 점이 가장 큰 기쁨이라고 밝혔다.

그는 “깃을 본격적으로 사용하기 시작한 건 낯선 웹 개발자들이었는데, 루비온레일즈 개발자들이 깃을 2008년쯤 사용하기 시작했다”며 “완전히 새로운 유형의 깃 사용자가 생겨난 게 이상했는데, SCM을 한번도 사용해 본 적 없는 젊은이들이 갑자기 깃을 사용하게 된 게 확연히 드러났다”고 말했다.

그는 “그게 역학 관계를 바꿔 놓은 것 같다”며 “평생 완전히 다른 SCM을 써 온 노인들이 없어지고, 갑자기 다른 건 전혀 접해보지 못한 젊은이들이 생겨났고, 깃의 진가를 알게 됐다”고 했다.

이어 “그들은 ‘깃이 너무 어려워’라고 하는 대신 ‘오래된 프로젝트가 CVS에 있는데 어떻게 해야 하냐’고 불평하는 사람을 보게 돼 참 재미있는 일이었다”며 “내 생각보다 사람들이 깃을 훨씬 더 좋아하고 있다”고 덧붙였다.

앞으로 깃 프로젝트는 어떻게 흘러갈까? 이제 소프트웨어 SCM에서 깃을 쓰는 건 너무나 당연한 일이다. 깃은 소프트웨어 엔지니어링 세계를 완벽히 장악했다. 스택오버플로우의 2022년 개발자 조사에서 전문 개발자의 96%가 깃을 사용하고, CVS의 후속판인 SVN은 6% 수준인 것으로 나타났다.

토발즈는 “깃은 강력한 네트워크 효과를 갖고 있어 대체하기 어려울 것”이라고 말했다.

그는 리눅스와 깃을 만든 자신의 행동을 작게 자평했다.

그는 “내가 만들어야 했던 모든 프로젝트는 다른 사람이 만든 것 중에서 더 나은 걸 찾을 수 없었기 떄문에 만들 수밖에 없었다”며 “하지만 나는 다른 사람이 내 문제를 해결해 주는 게 훨씬 더 좋으며, 내가 프로젝트를 구상한다는 건 사실상 세상의 실패”라고 말했다.

그는 “그런데 세상은 지난 20년동안 내게 실패한 적이 한 번도 없다”며 “이걸 꼭 해야겠다고 생각하게 만드는 프로젝트가 생기지 않기를 바란다”고 덧붙였다.

글. 바이라인네트워크
<김우용 기자>yong2@byline.network

첫 댓글

  1. 소프트웨어 역사에 있어서 리누스 토발즈 같은 인물은 손에 꼽을 정도로 역사적인 인물이라고 생각됩니다. 같은 시대를 사는 사람으로서 인류에 끼친 영향과 개인적으로도 받은 많은 소프트웨어에 감사드립니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다