Ghostty 터미널 라이브러리 libghostty-vt 1.0, C ABI 안정화
Ghostty 제작자 Mitchell Hashimoto가 2026년 11월 6일 터미널 처리 C 라이브러리 libghostty-vt 1.0을 발표했습니다. 이 버전은 C ABI 안정성을 약속하고, 배포판이 오프라인 빌드와 표준 패키징에 쓸 아카이브와 도구를 제공합니다. Hashimoto는 Neovim의 터미널 라이브러리 교체 작업도 배포판용 릴리스 태그를 기다리고 있었다고 설명했습니다.
Ghostty 제작자 Mitchell Hashimoto가 2026년 11월 6일 터미널 에뮬레이션 라이브러리 libghostty-vt 1.0을 발표했습니다. 이번 버전은 라이브러리와 C ABI의 안정성을 약속하며, 배포판이 별도 패키지로 다룰 수 있도록 빌드 도구와 산출물을 제공합니다. 앱 개발자는 Ghostty 앱 전체가 아니라 터미널 처리 기능을 자기 프로그램에 넣어 쓸 수 있고, 배포판은 릴리스 아카이브를 이용해 오프라인 빌드와 표준 패키징을 진행할 수 있습니다.
libghostty-vt는 Ghostty의 터미널 처리 코어를 분리한 C 라이브러리입니다. 터미널 제어 시퀀스를 해석하고 커서 위치, 문자 스타일, 줄 바꿈 같은 상태를 관리합니다. 편집기나 개발 도구는 터미널 에뮬레이션 기능을 자체 구현하는 대신 라이브러리를 프로그램에 포함할 수 있습니다.
이번 1.0에 앞서 Hashimoto가 libghostty-vt를 소개했을 때는 Zig API만 시험용으로 공개돼 있었고 C API는 준비 중이었습니다. 그는 당시 API가 초기 시험 단계라 일반적인 사용에 적합하지 않다고 밝혔습니다. 이번 발표에서는 C API가 완성됐고 라이브러리와 C ABI가 안정됐다고 설명했습니다.
바이너리 호환성을 지키는 설계
C ABI는 컴파일된 프로그램이 라이브러리의 함수와 자료형을 어떤 방식으로 호출할지 정하는 약속입니다. 이 약속이 깨지면 앱이 새 라이브러리와 연결되지 않거나 실행 중 문제가 생길 수 있어, 배포판과 동적 링크를 사용하는 프로그램은 버전 간 호환성을 중요하게 다룹니다. Hashimoto는 libghostty-vt 1.0이 시맨틱 버저닝과 엄격한 ABI 호환 약속을 따른다고 밝혔습니다.
라이브러리는 객체의 내부 구조를 앱에 직접 노출하지 않고 불투명 핸들로 다룹니다. 읽고 쓸 값은 적은 수의 함수에서 열거형 키로 지정합니다. 새 값을 추가할 때마다 공개 함수 기호를 늘리지 않아도 되는 구조입니다. 새 헤더로 만든 프로그램이 지원하지 않는 구버전 라이브러리에 연결되면 충돌이나 정의되지 않은 동작 대신 GHOSTTY_UNSUPPORTED 결과를 받습니다. 일부 공개 구조체에는 크기 정보가 포함되거나 예약 공간이 있어 이후 필드를 추가할 여지를 둡니다. 열거형은 C 표준이 허용하는 범위에서 모든 컴파일러에서 int로 고정합니다.
Hashimoto는 CI에서 이 약속을 검사한다고 설명합니다. Linux에서는 libabigail로 기준 ABI와 변경 사항을 대조하고, macOS와 WebAssembly에서는 기준 타입 목록을 확인합니다. ELF 기반 시스템에서는 내보내는 심볼에 버전도 붙여 동적 로더가 호환되지 않는 라이브러리를 알아볼 수 있게 합니다.
Ghostty 앱과 별도로 배포
libghostty-vt는 Ghostty 앱과 독립된 릴리스 주기를 가집니다. 각 릴리스는 서명된 소스 아카이브와 Zig 의존성 아카이브를 함께 제공하며, 의존성 아카이브는 Zig의 캐시 형식을 따릅니다. 배포판은 필요한 파일과 의존성을 내려받아 네트워크 연결 없이 라이브러리를 빌드할 수 있습니다.
Linux와 FreeBSD용 패키지에는 SONAME을 갖춘 공유 라이브러리와 정적 라이브러리, 헤더, pkg-config 파일, CMake 설정이 포함됩니다. 설치 빌드는 --prefix, DESTDIR, lib64 설정을 반영합니다. libghostty-vt는 MIT 라이선스를 따르며, 의존성의 버전·SPDX 라이선스·해시를 기계가 읽을 수 있는 목록으로 제공합니다. Hashimoto는 의존성 트리에 카피레프트 코드가 없다고 밝혔습니다.
Hashimoto가 공개한 CI에서는 Linux의 glibc·musl 환경과 macOS, iOS, FreeBSD, Windows x86_64, Android, WebAssembly에서 단위 테스트와 예제를 실행합니다. 그는 Neovim에서 libvterm을 libghostty-vt로 바꾸는 풀 리퀘스트가 승인됐지만, 배포판이 의존성을 따로 패키징할 수 있도록 태그된 릴리스를 기다리고 있었다고 전했습니다. Hashimoto는 이번 1.0 릴리스가 통합을 진행할 수 있게 할 것으로 내다봤습니다.