Ghostty: 1.0 출시를 돌아보며
이 글은 릴리스 공지가 아닙니다. Ghostty 1.0이 출시되었습니다. 다운로드와 자세한 내용은 Ghostty 웹사이트에서 확인하실 수 있습니다. 이 글은 프로젝트에 대한 개인적인 회고입니다.
Ghostty 1.0이 출시되었습니다.
2년 전에 제가 터미널 에뮬레이터를 출시하게 될 거라고 했다면 믿지 않았을 겁니다. 저는 항상 터미널을 좋아했고, 커리어 내내 터미널 중심의 소프트웨어를 만들어 왔습니다. 하지만 터미널은 이미 해결된 문제 아닌가요? 저는 그렇게 생각했습니다.
2022년에 이 프로젝트를 시작한 건 Zig를 가지고 놀고, 그래픽스 프로그래밍을 해보며, 터미널에 대한 이해를 더 깊게 하기 위한 수단에 불과했습니다. 출시할 생각은 전혀 없었습니다. 혁신할 여지가 있다고도 생각하지 않았습니다. 몇 달 동안 이것저것 배우고 넘어가리라 생각했습니다.
하지만 작업을 이어가면서 다른 터미널들을 다른 시각으로 보게 되었습니다. 마음에 들지 않는 타협점들이 보였고, 제가 원하는 기능들이 보였습니다. 개선할 수 있는 성능이 보였고, 정체가 보였습니다. 세상에는 정말 훌륭한 터미널들이 많고, 지금 쓰는 터미널이 잘 맞는다면 계속 쓰시면 됩니다. 다만 저는 다른 무언가를 원했고, 혹시 같은 생각을 하는 분들이 있지 않을까 싶었습니다.
그렇게 Ghostty가 탄생했습니다. 완벽하지도, 완성되지도 않았고, 모두를 위한 것도 아닙니다. 하지만 저의 프로젝트입니다. 제가 추구하는 가치와 터미널이 어떤 모습이어야 하는지에 대한 제 비전을 담고 있습니다.
Ghostty가 다른 터미널과 어떻게 다른지, 그리고 이 프로젝트에 대한 제 비전이 궁금하시다면 Ghostty 1.0 is coming 글을 읽어 보시기 바랍니다.
프라이빗 베타
Ghostty에서 가장 논란이 됐던 부분은 프라이빗 베타였습니다. 정말, 프라이빗 베타 말입니다. 이게 프로젝트에 미칠 영향을 좋든 나쁘든 제가 크게 과소평가했습니다.
프라이빗 베타: 좋았던 점
우선, 왜 프라이빗 베타였을까요? 가장 큰 이유는 제 개인적인 여력을 관리하기 위해서였습니다. 첫 아이가 태어나기 직전에 프로젝트를 공개하기 시작했습니다. 소프트웨어를 출시해 본 경험이 있어 그 과정에서 오는 스트레스를 잘 알고 있었습니다. 그 스트레스를 피하고 가족에게 집중하고 싶었습니다. 관심 있는 소수의 사용자를 모아 이슈를 조절하고, 제가 감당할 수 있는 만큼만 점차 사용자 수를 늘려가고 싶었습니다.
두 번째 이유는 비중이 훨씬 작지만, 터미널 에뮬레이터는 다른 소프트웨어보다 되거나 안 되거나가 분명하다고 느꼈기 때문입니다. Vim이 필요로 하는 기능의 절반만 에뮬레이션하는 터미널 에뮬레이터를 내놓을 수는 없습니다. 일정 수준의 기능에 도달하기 전까지는 점진적으로 개선해 나갈 수도 없습니다. 첫 공개 릴리스가 그 기준을 충족하도록 하고 싶었습니다. 사람들이 처음부터 바로 업무에 쓸 수 있을 만큼 충분히 쓸 만한 상태이길 바랐습니다.
이 두 가지 측면에서 프라이빗 베타는 대성공이었습니다(제 예상을 훨씬 뛰어넘었습니다). 저는 제 여력을 관리하면서 가족에게 집중할 수 있었습니다. 딸아이 생후 1년 동안 매일 아침 아이를 깨웠고, 깨어 있는 시간마다 함께 놀았으며, 모든 병원 진료에 함께 갔고, 모든 순간을 함께했습니다1.
그리고 베타 커뮤니티는 정말 놀라웠습니다. 인내심 있고, 이해심 많으며, 도움이 되는 분들이었습니다. 버그를 찾아 주셨고, 피드백을 주셨으며, 그분들 덕분에 Ghostty는 훨씬 더 좋아졌습니다. 아무리 감사해도 모자랍니다.
프라이빗 베타: 아쉬웠던 점
그 외의 모든 것은 프라이빗 베타가 불러온 의도치 않은 결과였습니다. 과도한 관심과 기대, 참여하지 못한 분들의 답답함, 일부가 느낀 엘리트주의 같은 것들이었습니다.
저는 그런 관심을 전혀 예상하지 못했습니다. 이렇게 말하면 거짓말이라고 생각하는 분들도 있지만, 정말입니다. 프라이빗 베타나 한정된 접근이 원칙적으로는 관심을 모은다는 걸 모를 만큼 순진하지는 않습니다. 다만 터미널 에뮬레이터에 관심을 가질 사람이 그렇게 많을 거라고는 생각하지 못했습니다. 좁은 사용자층을 위한 지루한 소프트웨어를 만들고 있다고 생각했습니다. 관심 따위 없을 거라고요!
하지만 제 예상은 빗나갔고, 그 여파는 실제로 나타났습니다. 참여하지 못해 답답해하는 분들이 생겼고, 소외감을 느끼는 분들도 있었습니다. 일부는 제가 관심을 끌기 위해 일부러 그런 척한다고 느끼기도 했습니다. 대기자 명단은 제가 감당할 수 있다고 생각한 규모를 넘어서 계속 커졌습니다(앞서 말씀드린 우선순위를 고려했을 때).
이 점에 대해서는 죄송하게 생각합니다. 의도한 바가 아니었다는 말씀밖에 드릴 수 없습니다. 제가 감당할 수 있는 선에서, 사실은 그보다 조금 더 무리해서라도 최대한 많은 분을 초대하려 했습니다. 베타는 당시 Discord 참여자 28,000명 중 약 5,000명 규모로 마무리되었습니다. 제가 원했던 접근성에는 미치지 못했지만, 제가 감당할 수 있는 것보다는 많은 숫자였습니다.
좋은 소식은 Ghostty가 이제 공개되어 누구나 사용할 수 있다는 점입니다! 프라이빗 베타의 부정적인 측면은 뒤로 하고 앞으로에 집중할 수 있기를 바랍니다.
관심이 불러온 또 하나의 부정적인 측면은 Ghostty가 혁명적일 거라는 기대입니다. 어떤 면에서는 그렇기도 하고, 아니기도 합니다. Ghostty는 다른 터미널과는 다른 목표와 타협점을 가지고 있습니다. 그런 특성을 찾는 분들에게 Ghostty는 신선한 바람이 되고, 다른 어떤 터미널도 하지 못하는 일을 해냅니다. 하지만 다른 분들에게는 그냥 터미널일 뿐입니다. 그것도 괜찮습니다. 여러분에게 맞는 터미널을 찾으시길 바라며, Ghostty가 모든 터미널의 정점이라고 주장하고 싶지는 않습니다.
기술 스택
Ghostty는 비전형적인 기술 스택과 아키텍처를 가지고 있습니다. 코어는 Zig로, GUI는 플랫폼별 네이티브 코드로 작성했습니다. 기술 스택에 대한 더 자세한 내용은 Ghostty에 대해 제가 했던 원래 발표에서 확인하실 수 있습니다.
2년이 지난 지금, 이 기술 스택과 아키텍처에 매우 만족합니다. 이 프로젝트에는 옳은 선택이었다고 생각하며, 더 나아가 많은 프로젝트에도 적합한 선택이 될 수 있다고 생각합니다2.
Zig로 작업하는 것은 정말 즐거웠습니다. 매일 Zig 코드를 쓰는 것이 재미있고, 그 재미는 2년 동안 조금도 줄어들지 않았습니다. 빌드 시스템은 훌륭하고, 커뮤니티는 멋지며, 핵심 메인테이너들은 뛰어난 분들입니다. 제 열정은 이미 잘 알려져 있고, 말뿐 아니라 Zig Software Foundation을 후원하며 직접 실천하기도 했습니다.
Zig로 작성된 공유 코어와 플랫폼별 GUI를 분리한 구조 역시 성공적이었습니다. 코드의 90% 이상을 공유하면서도 Ghostty에 플랫폼 네이티브 경험을 자연스럽게 녹여낼 수 있었습니다.
베타 커뮤니티 역시 프로젝트에 기여하는 데 아무런 어려움을 겪지 않았습니다. 이는 Zig이 새롭고 틈새 언어임에도 새로운 기여자들이 쉽게 접근하고 생산적으로 작업할 수 있다는 것을 보여 준다고 생각합니다. 프로젝트의 미래에 있어 정말 반가운 소식입니다.
뜻밖의 커뮤니티
Ghostty를 중심으로 형성된 커뮤니티는 예상치 못했고, 놀라울 정도로 멋졌습니다.
좀 더 구체적으로 말하면, 프라이빗 베타 커뮤니티를 두고 하는 말입니다. 공개 커뮤니티는 소프트웨어에 접근할 수 없다는 비정형성 때문에 다소 무질서한 면이 있습니다. 반면 프라이빗 커뮤니티는 뚜렷한 초점과 목적이 있었고, 그 일원이 된 것은 큰 즐거움이었습니다.
Ghostty 커뮤니티는 터미널에 열정을 가진 것은 물론(당연히!), 성능, 디자인, 소프트웨어 품질, 그리고 올바른 이유로 제대로 만들기에 열정을 가진 사람들의 모임입니다. 함께 있으면 즐겁고 협업하기 좋은 분들이고, 알아가면서 정말 즐거웠으며 앞으로도 함께하고 싶은 분들입니다.
개인적으로는 이 커뮤니티가 더욱 의외인 이유가, Ghostty 커뮤니티의 많은 분이 제 작업을 처음 접한 분들이기 때문입니다. 대부분 인프라를 배경으로 두지 않아 제 이전 작업을 잘 모르십니다. 새로운 커뮤니티를 만들어 가는 과정이 즐거웠고, 첫 오픈소스 프로젝트를 중심으로 커뮤니티를 만들어 가던 커리어 초창기가 많이 떠올랐습니다.
1.0 이후의 미래
Ghostty 1.0이 출시되었지만, 저에게 이 프로젝트는 아직 갈 길이 멉니다. 1.0조차 제가 바랐던 것보다는 덜 완성되었습니다! 하지만 어딘가에서는 선을 그어야 했고, 이번 1.0은 정말 잘 나왔다고 생각합니다.
단기적으로는 “최고의 기존 터미널”이라는 목표에 계속 집중하고 싶습니다. 1.0에 포함되지 못한 기능들을 보강하고, 남아 있는 버그들을 고치고 싶습니다. 앞으로의 혁신을 위해 Ghostty가 딛고 선 기반이 탄탄하도록 만들고 싶습니다.
중기적으로, 그리 멀지 않은 시점(2025년 안)에 다른 프로젝트들이 자체 터미널 에뮬레이터 프론트엔드를 만들 때 활용할 수 있는 안정적이고 독립적인 libghostty를 출시하는 데 집중하고 싶습니다. libghostty야말로 Ghostty가 기술 커뮤니티에 장기적으로 미칠 수 있는 영향 측면에서 가장 유망한 부분이라고 생각합니다.
하지만 목표가 무엇이든, Ghostty는 저에게 언제나 무엇보다 열정 프로젝트로 남을 것입니다. 이 프로젝트를 하는 이유는 재미있기 때문이며, 저와 커뮤니티가 그 점을 잊지 않았으면 합니다.
감사 인사
세상의 어떤 일도 혼자서 이루어지는 것은 없다고 믿습니다. Ghostty는 혼자 시작했을지 몰라도 혼자 완성한 것은 아니며, 그 과정에서 감사해야 할 분들이 정말 많습니다.
Ghostty 베타 커뮤니티의 영향력은 아무리 강조해도 지나치지 않습니다. 이 글에서 이미 말씀드렸지만, Ghostty가 지금처럼 기능이 풍부하고 완성도 있게 다듬어진 것은 베타 커뮤니티의 세심한 관심과 피드백 덕분입니다. 베타에 참여해 오늘의 Ghostty를 만드는 데 도움을 주신 모든 분께 진심으로 감사드립니다.
Discord 운영진에게는 특별한 감사를 전하고 싶습니다. 평화를 유지하고 커뮤니티가 올바른 방향에 집중하도록 정말 열심히 일해 주셨습니다. 제가 집중하고 베타 커뮤니티가 성장할 수 있는 환경을 만들기 위해 매일 노력하는 모습이 보였습니다. 30,000명에 운영진이 10명도 되지 않는 상황에서, 주어진 여건 속에서 정말 놀라운 일을 해내 주셨습니다3.
마지막으로, 그리고 가장 중요하게, 아내에게 감사하고 싶습니다. 저희는 초보 부모이고, 사이드 프로젝트에 시간을 내고 싶다는 욕심과 새로 태어난 아이를 함께 돌보는 일은 결코 쉽지 않았습니다(프라이빗 베타라는 장치가 있었음에도). 아내는 제가 Ghostty를 작업할 시간을 찾을 수 있도록 도와주었고, 폰트 렌더링에 대한 제 장황한 이야기를 인내심 있게 들어주었습니다(그러다 잠들기도 했지만요).
Ghostty 1.0을 즐겁게 사용하시고, 그 안에 담긴 애정과 정성을 느껴 주시길 바랍니다. 앞으로 우리가 함께 어디로 나아갈지 정말 기대됩니다!
각주
글을 무작위로 읽기