Ghostty: 1.0 출시를 돌아보며
원문은 Mitchell Hashimoto님이 에 게재했습니다. 이 블로그 구독하기
이 글은 출시 공지가 아닙니다. Ghostty 1.0이 출시되었습니다. 다운로드 및 자세한 내용은 Ghostty 웹사이트에서 확인하실 수 있습니다. 이 글은 이 프로젝트에 대한 개인적인 회고입니다.
Ghostty 1.0이 출시되었습니다.
2년 전에 내가 터미널 에뮬레이터를 출시하게 될 거라고 누군가 말했다면 믿지 않았을 것이다. 나는 언제나 터미널을 좋아했고, 내 커리어 전체는 터미널 중심 소프트웨어를 만드는 일에 기반을 두고 있었다. 하지만 터미널은 이미 해결된 문제 아닌가? 나는 그렇게 생각했다.
나는 2022년에 단순히 Zig를 가지고 놀고, 그래픽 프로그래밍을 해보며, 터미널에 대한 이해를 깊게 하려는 목적으로 이 프로젝트를 시작했다. 출시할 생각은 전혀 없었다. 혁신할 여지가 있다고도 생각하지 않았다. 몇 달 동안 이것저것 배우다가 그만둘 줄 알았다.
하지만 작업을 이어가면서 다른 터미널들을 다르게 보게 됐다. 마음에 들지 않는 타협점들이 보였고, 내가 원하는 기능들이 보였다. 개선할 수 있는 성능이 보였고, 정체를 목격했다. 세상에는 정말 훌륭한 터미널들이 많고, 자신에게 잘 맞는다면 그걸 쓰면 된다. 하지만 나는 뭔가 다른 것을 원했고, 아마 다른 사람들도 그럴 거라고 생각했다.
그렇게 Ghostty가 탄생했다. 완벽하지도, 완성되지도 않았고, 모두를 위한 것도 아니다. 하지만 내 것이다. 나의 가치관과 터미널이 어떻게 달라질 수 있을지에 대한 나의 비전이 담겨 있다.
Ghostty가 다른 터미널과 어떻게 다른지, 그리고 이 프로젝트에 대한 나의 비전에 대해 더 알고 싶다면 Ghostty 1.0 is coming 글을 읽어보길 바란다.
비공개 베타
Ghostty에서 가장 논란이 됐던 부분은 비공개 베타였다. 아, 그 비공개 베타 말이다. 나는 이 결정이 프로젝트에 미칠 영향을 좋은 쪽이든 나쁜 쪽이든 크게 과소평가했다.
비공개 베타: 좋았던 점
먼저, 왜 비공개 베타였을까? 가장 큰 이유는 나 자신의 시간과 에너지를 관리하기 위해서였다. 나는 첫 아이가 태어나기 직전에 이 프로젝트를 공개적으로 공유하기 시작했다. 소프트웨어를 출시하는 일이 얼마나 스트레스가 많은지 경험으로 알고 있었기에, 그 스트레스를 피하고 가족에게 집중하고 싶었다. 관심 있는 소규모 사용자 그룹을 선별해 이슈를 조절하고, 내가 감당할 수 있다고 느낄 때마다 조금씩 사용자 수를 늘려갈 수 있다고 생각했다.
두 번째 이유는 중요도는 훨씬 떨어지지만, 터미널 에뮬레이터라는 소프트웨어는 다른 어떤 소프트웨어보다 되거나 안 되거나가 명확하다고 느꼈기 때문이다. Vim이 필요로 하는 기능의 절반만 에뮬레이트하는 터미널 에뮬레이터를 출시할 수는 없다. 일정 수준의 기능이라는 임계점 아래에서는 점진적으로 개선해 나갈 수도 없다. 첫 공개 릴리스가 그 기준을 충족하길 바랐다. 사람들이 당장 생산적이고 전문적인 용도로 쓸 수 있기를 원했다.
이 두 가지 측면에서는 비공개 베타가 대성공이었다(내 예상을 훨씬 뛰어넘었다). 나는 내 시간을 잘 관리하며 가족에게 집중할 수 있었다. 딸아이 생후 첫 1년 동안, 나는 매일 아침 딸을 깨웠고, 깨어 있는 시간마다 함께 놀아주었으며, 모든 병원 진료에 함께 갔고, 모든 중요한 순간들을 함께했다1.
그리고 베타 커뮤니티는 정말 놀라웠다. 그들은 인내심이 있었고, 이해심이 많았으며, 도움이 많이 됐다. 버그를 찾아주고, 피드백을 제공했으며, 그들 덕분에 Ghostty는 그들 없었을 때보다 훨씬 더 좋아질 수 있었다. 정말 감사하다는 말을 전하고 싶다.
비공개 베타: 아쉬웠던 점
그 외의 모든 것은 비공개 베타가 낳은 의도치 않은 결과였다. 과도한 기대감, 들어오지 못한 사람들의 좌절감, 일부가 느낀 엘리트주의 등등.
나는 그 열기를 예상하지 못했다. 내가 이렇게 말하면 거짓말이라고 생각하는 사람들도 있다. 하지만 정말이다. 비공개 베타와 한정된 접근이 원칙적으로 기대감을 불러일으킨다는 걸 모를 만큼 순진하지는 않다. 하지만 터미널 에뮬레이터에 많은 사람들이 관심을 가질 거라고는 전혀 생각하지 못했다. 나는 틈새 청중을 위한 지루한 소프트웨어를 만들고 있다고 생각했다. 무슨 기대감이란 말인가!
하지만 내 예상은 틀렸고, 그 결과는 현실이 됐다. 사람들은 들어오지 못해 좌절했고, 소외감을 느꼈다. 내가 기대감을 조성하려고 일부러 그런 척을 한다고 느끼는 사람들도 있었다. 대기자 명단은 내가 (앞서 말한 우선순위를 고려했을 때) 감당할 수 있다고 생각한 규모보다 훨씬 더 커졌다.
그 점에 대해서는 미안하게 생각한다. 할 수 있는 말은 의도한 바가 아니었다는 것뿐이다. 감당할 수 있다고 느끼는 수준에서, 아니 그보다 조금 더 넘어서까지 베타 초대 규모를 늘리려고 노력했다. 베타는 당시 28,000명의 Discord 커뮤니티 중 약 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을 즐겁게 사용해 주길 바라며, 그 안에 담긴 애정과 정성을 느껴주길 바란다. 앞으로 우리가 함께 나아갈 길이 기대된다!
각주
글을 무작위로 읽기
댓글
로그인하고 댓글 남기기