Ghostty 1.4
Ghostty 1.4: 성능·메모리 개선과 Kitty 그래픽 프로토콜 완전 구현
Ghostty 1.4는 macOS에서 터미널 입출력 처리량을 25~55% 높이고, 스크롤백 메모리를 줄였습니다. Kitty 그래픽 프로토콜의 애니메이션과 상대 배치를 구현했으며, 보안 취약점 수정과 SSH 통합 개선도 포함했습니다.
- 주제
에디터 노트
터미널 선택에서 속도만큼 기능 호환성과 설정 방식도 갈립니다. 이번 릴리스는 pty 처리량, 파서 속도, 스크롤백 메모리처럼 수치로 제시한 개선과 취약점 수정을 함께 담았지만, 성능 수치는 특정 장비와 조건에 한정되고 GTK에는 새 시스템 요구사항이 생겼습니다. 댓글은 OSC 8 링크를 기본으로 허용할지, terminfo를 원격에 설치할지, 설정 UI와 텍스트 파일 중 무엇이 편한지를 두고 갈립니다. 특히 새 프로토콜 지원은 TUI와 임베디드 라이브러리 활용을 넓히는 한편, 악성 출력이 공격 표면을 늘릴 수 있다는 우려도 제기됐습니다. Ghostty는 이번 버전에서 관련 취약점을 수정하고 일부 시퀀스를 기본 차단했지만, 보안과 기능 지원의 경계는 설정과 사용 방식에 남아 있습니다.
AI 요약
Ghostty 1.4.0은 7개월 동안 172명의 기여자가 2,889개 커밋으로 작업한 릴리스입니다. macOS 13 Ventura 이상을 지원하며 macOS 27 호환성을 추가했습니다. GTK 빌드는 GTK 4.18과 libadwaita 1.7 이상이 필요해 Ubuntu 24.04 LTS의 기본 패키지로는 요구사항을 충족하지 못합니다.
성능과 메모리
macOS에서는 커널이 pty 읽기 한 번에 전달하는 데이터가 약 1KiB로 제한된다는 점에 맞춰 입출력 처리를 바꿨습니다. 한 스레드는 pty를 계속 비우고 다른 스레드는 데이터를 파싱합니다. M4 Max에서 측정한 입출력 처리량은 1.3.x보다 25~55% 높아졌습니다. 파서 벤치마크에서는 일반 ASCII 처리량이 초당 128MB에서 725MB로 늘었고, CJK 텍스트는 3.4배 빨라졌습니다. macOS에서 150MB 텍스트 파일을 출력하는 시간은 1.5초에서 566ms로 줄었습니다. 이 수치는 명시된 장비와 작업 조건에서 나온 결과입니다.
화면에 보이지 않는 스크롤백은 터미널이 유휴 상태일 때 압축합니다. 일반적인 텍스트 기록에서 물리 메모리 사용량을 70~90% 줄이며, 스크롤하거나 검색할 때 필요한 페이지를 풉니다. 이에 따라 기본 스크롤백 한도를 터미널당 10MB에서 50MB로 올렸습니다. 압축은 macOS와 64비트 Linux에서 지원합니다. 빈 터미널의 화면 메모리는 macOS에서 약 128KiB에서 16KiB로 줄었고, 숨겨진 탭은 GPU 자원을 놓습니다. 탭 하나가 보이고 20개가 숨은 macOS 구성에서 GPU 메모리는 약 385MiB에서 18MiB로 감소했습니다.
Kitty 그래픽과 터미널 에뮬레이션
Ghostty는 Kitty 그래픽 프로토콜의 애니메이션과 상대 배치를 구현했습니다. 애니메이션 프레임 전송, 합성, 재생 제어를 지원하며 터미널이 보이지 않을 때는 재생을 멈춥니다. 상대 배치는 한 이미지를 다른 이미지에 연결해 부모 이미지와 함께 움직이게 합니다. 명세와 Kitty 구현을 대조하는 적합성 점검도 진행해 스크롤 영역 안의 이미지 이동, 이미지 ID 재전송 처리, 잘못된 이미지 데이터에 대한 오류 응답 등을 수정했습니다. 이미지 데이터 파싱은 SIMD 일괄 처리로 바꿨으며, x86_64 Linux에서 64MiB 입력의 파싱 속도가 벤치마크 기준 약 16배 빨라졌습니다.
터미널 적합성 테스트 esctest를 CI에 추가하고 xterm과의 동작 차이를 수정했습니다. DECSTR 소프트 리셋, 확장 커서 위치 응답, 화면 크기 조회 등도 지원합니다. 일부 프로그램이 악용할 수 있는 창 크기 변경과 화면 체크섬 조회는 기본적으로 비활성화했습니다. OSC 52 같은 제어 시퀀스의 입력 크기 제한도 추가했습니다.
보안 수정과 클립보드
릴리스 노트는 붙여넣기 보호, Kitty 그래픽 명령, tmux 제어 모드, 스크롤백 메모리 처리, zsh·bash 셸 통합, macOS 링크 열기와 드래그 앤 드롭 등에서 발견한 취약점 9건을 열거합니다. 일부는 악성 터미널 출력만 표시해도 충돌이나 메모리 손상을 일으킬 수 있고, OSC 8 링크나 붙여넣기 관련 문제는 사용자의 클릭 또는 붙여넣기가 필요합니다. macOS에서는 제어 문자가 포함된 파일명으로 확인 대화상자에 표시된 명령과 다른 명령이 실행될 수 있는 문제도 수정했습니다. 작성 시점에는 GitHub가 요청된 CVE 번호를 아직 부여하지 않았다고 밝혔습니다.
macOS와 GTK에서 Kitty 클립보드 프로토콜 OSC 5522를 구현했습니다. OSC 52와 달리 이미지나 HTML 등 여러 형식을 읽고 쓸 수 있으며, 붙여넣기 이벤트로 클립보드 형식을 확인할 수 있습니다. 읽기 권한은 기본적으로 확인을 요청하고 쓰기는 허용합니다. 쓰기 한도는 기본 64MiB이며, 초과하면 클립보드를 변경하지 않고 실패합니다.
SSH와 GTK 렌더링
새 ghostty +ssh 명령은 SSH 연결 전에 원격 호스트에 Ghostty의 terminfo를 설치하고 COLORTERM, TERM_PROGRAM, TERM_PROGRAM_VERSION을 전달한 뒤 실제 SSH를 실행합니다. terminfo가 설치되지 않으면 TERM=xterm-256color로 대체합니다. 호스트와 포트별로 설치 상태를 캐시하며, 셸 통합을 쓰지 않아도 직접 실행하거나 SSH 별칭으로 사용할 수 있습니다. SetEnv 설정을 덮어쓰던 문제도 고쳤습니다.
GTK 렌더러는 GtkGLArea 대신 별도 스레드에서 EGL로 그린 뒤 DMABUF 프레임을 GTK에 전달합니다. 삼중 버퍼링을 적용했고, 125%나 150% 같은 분수 배율에서 글자와 선 문자가 흐릿해지던 문제를 수정했습니다. DMABUF를 내보낼 수 없는 GPU 드라이버에서는 CPU 복사 방식으로 대체하지만 속도가 느려집니다.
Hacker News 반응
- @cassianoleal — Konsole이 자신의 컴퓨터에서는 이 터미널들보다 훨씬 빠르고 현대적인 터미널에서 기대하는 기능도 갖췄는데, Ghostty와 Kitty, WezTerm이 무슨 장점을 주는지 여전히 이해하지 못하겠습니다. Linux로 옮긴 뒤 iTerm2에서 그리운 기능은 tmux -CC 통합인데, 이들 중 어느 것도 제공하지 않습니다. 깎아내리려는 말은 아닙니다. 무엇을 제공하는지 정말 알고 싶습니다.
- @BorisMelnik — 여러 사람이 macOS와 Linux에서 모두 쓸 수 있는 점과 GPU 가속을 좋아합니다.
- @reissbaker — Konsole은 기본 설정에서 OSC 8 링크 지원을 꺼 둡니다. 사용자가 직접 켜지 않으면 CLI 앱이 대체 동작을 제공해야 합니다. Ghostty와 WezTerm은 기본으로 OSC 8 링크와 Nerd Font 대체 글꼴을 지원합니다.
- @hnlmorg — OSC 8 링크를 기본으로 끄는 것이 맞다고 봅니다. 터미널에서 임의의 텍스트가 링크로 동작하는 것은 유용하지 않습니다.
- @adrian_b — 링크를 완전히 끄기보다 사용자가 확인한 뒤 열게 하는 편이 낫다고 봅니다.
- @wpm — 설정 파일에 기본값이 없고 설명서에서 옵션 이름과 값 형식을 찾아야 하는 점이 불편합니다. 글꼴이나 색상처럼 기본 설정을 바꾸려 해도 웹 문서를 뒤져야 합니다.
- @mitchellh — Ghostty GUI 릴리스 외에도 libghostty가 macOS, iOS, visionOS, Windows, Linux, FreeBSD, Android, WebAssembly와 운영체제 없는 환경에서 빌드 및 CI 테스트를 한다고 밝혔습니다. JetBrains IDE 터미널에도 쓰이며, 앞으로 몇 달 안에 libghostty 1.0과 ABI 안정성을 발표할 계획이라고 했습니다.
- @TrueDuality — 사용처 목록은 흥미롭지만 실제 라이브러리 변경 내용도 읽고 싶었습니다.
- @sho_hn — KDE 프로젝트에서 libghostty-vt 기반 프런트엔드를 만들고 있으며, 사용 경험이 순조롭다고 전했습니다.
- @Hitech-Redneck — SSH 연결에서 이상한 동작을 겪어 Ghostty를 한동안 쓰다 그만뒀는데, 이번 릴리스가 문제를 해결할 수도 있겠다고 했습니다.
- @kccqzy — 자신이 관리하지 않는 원격 시스템에 terminfo를 설치하는 것은 무례하다고 지적했습니다.
- @zamalek — NixOS에서 Ghostty 시작 시간이 다른 터미널보다 느려 Rio를 쓰고 있으며, 이번 시작 속도 개선은 macOS에 한정된 것 같다고 했습니다.
- @chungus — 메모리 사용량 때문에 Konsole로 돌아갔지만 이번 개선 내용을 보고 다시 평가하겠다고 했습니다.
원문: Ghostty 릴리스 노트 / 번역·요약: Trawling