Saltar al contenido

Libghostty 1.0 trae una ABI de C estable para apps de terminal

Libghostty-vt 1.0 salió el 6 de noviembre con una ABI de C estable. Una prueba de compilación de Tech AI Wire halló 209 funciones versionadas y un número de versión que bajó.

Por

4 min de lectura

XLinkedIn

Traducido automáticamente del original en inglés, que Claire Whitmore verificó y editó. Prevalece la versión en inglés. Cómo trabajamos

Screenshot of the libghostty-vt documentation's C example, which creates an 80x24 terminal with ghostty_terminal_new and writes colored text into it.
Foto: Ghostty project

En cifras

funciones exportadas, todas con la etiqueta GHOSTTY_VT_1.0, en una compilación de Tech AI Wire
209
para compilar desde los tarballs firmados en una prueba de Tech AI Wire en un contenedor Linux
117 s
terminales activas en una máquina Linux de 4 núcleos y 8 GB en la prueba de un usuario, según la documentación
10.000

Mitchell Hashimoto publicó libghostty-vt 1.0 el 6 de noviembre de 2026. Es la primera versión estable del motor de terminal que hay dentro de su terminal Ghostty. La versión 1.0 congela la ABI de C de la biblioteca, la interfaz binaria con la que se enlazan los programas compilados. Una app compilada hoy sobre la 1.0 debería seguir funcionando cuando versiones 1.x posteriores sustituyan la biblioteca. Esto importa porque los IDE de JetBrains ya ejecutan su terminal integrada sobre ella. Neovim también espera esta versión para retirar su antiguo código de terminal.

Qué promete libghostty-vt 1.0

Un motor de terminal lee los bytes que imprime un programa, incluidos los códigos de escape para colores y movimientos del cursor. Después lleva la cuenta de la pantalla, el cursor y el historial de desplazamiento. No dibuja nada. El dibujo queda en manos de la app. Por eso una terminal de KDE, un IDE y una página web pueden compartirlo.

"La 1.0 significa que libghostty-vt sigue el versionado semántico y tiene promesas estrictas de compatibilidad de ABI", escribe Hashimoto en su publicación de anuncio. Describe cómo lo hace cumplir el proyecto:

  • El código compilado con cabeceras más nuevas recibe de una biblioteca más antigua un error GHOSTTY_UNSUPPORTED, en lugar de un fallo.
  • Cada función exportada lleva una etiqueta de versión en Linux y otros sistemas ELF. Así, el sistema rechaza por su nombre una biblioteca incompatible al arrancar un programa.
  • La integración continua compara la ABI con una referencia guardada usando libabigail en Linux. En macOS y WebAssembly la compara con listas de tipos fijas.

La biblioteca tiene ahora su propio ciclo de lanzamientos, separado de la app Ghostty. Cada versión publica un tarball de código firmado y un segundo tarball con todas las dependencias de Zig. Así, las distribuciones Linux pueden compilar sin conexión. Las reglas están en PACKAGING-LIBGHOSTTY.md. El código tiene licencia MIT y solo necesita la biblioteca de C en tiempo de ejecución.

Quién ya la usa

JetBrains ya ejecuta la terminal de IntelliJ, PyCharm, GoLand y sus otros IDE sobre la biblioteca, según Hashimoto. Él cita la cifra de la propia JetBrains: 12,5 millones de usuarios recurrentes de esos IDE. La documentación del proyecto estima que decenas de millones de personas usan libghostty-vt a diario, y aclara que no hace ningún seguimiento.

Neovim tiene una solicitud de cambios aprobada, la #39773, que sustituye libvterm por libghostty-vt, según Hashimoto. Esperaba una versión etiquetada y seguía abierta el 7 de noviembre. Cerraría un error de hace 10 años por el que el texto de la terminal se corta al cambiar el tamaño de la ventana. Otros usuarios son Turborepo de Vercel, OrbStack, la terminal Ghostel para Emacs y la terminal Kwi, experimental, de KDE. Hay bindings de la comunidad para Rust, Go, Python, Swift, .NET y más.

Probado: compilar la 1.0 desde los tarballs firmados

En una prueba de Tech AI Wire el 7 de noviembre, en macOS 26.6.2 con Docker 28.4.0, un contenedor de Alpine Linux 3.22 (arm64) compiló la versión. Siguió los pasos que la guía de empaquetado da a las distribuciones:

minisign -V -P RWQlAjJC23149WL2sEpT/l0QKy7hMIFhYdQOFy0Z7z7PbneUgvlsnYcV -m libghostty-vt-1.0.0.tar.gz
ZIG_GLOBAL_CACHE_DIR=/tmp/build-cache zig build --prefix /usr \
  --system ../libghostty-vt-1.0.0-deps -Doptimize=ReleaseFast -Dcpu=baseline
objdump -T /usr/lib/libghostty-vt.so | grep -c GHOSTTY_VT_1.0
ComprobaciónResultado
Firmas del código, las dependencias y SHA256SUMSLas tres verificadas con minisign
Compilador Zig0.17.0 (la versión exige 0.17.x)
Tiempo de compilación, ReleaseFast117 segundos
Biblioteca compartidalibghostty-vt.so.1.0.0, 11,5 MB, soname libghostty-vt.so.1
Dependencias en ejecuciónSolo la biblioteca de C (musl)
Funciones exportadas209, todas con la etiqueta GHOSTTY_VT_1.0
Versión de pkg-config1.0.0
El ejemplo en C de la documentaciónCompiló con gcc e imprimió "Hello, world!"

El primer intento falló. El runtime de C++ que trae Zig necesitaba la cabecera linux/futex.h, que falta en una imagen de Alpine mínima. Instalar el paquete linux-headers de Alpine lo resolvió.

El número de versión bajó

Antes de la 1.0, libghostty-vt tomaba su versión de la app Ghostty. En los archivos de compilación de Ghostty 1.4.0, la versión de la biblioteca es la de la app, 1.4.0. La versión estable informa 1.0.0. En la compilación de Tech AI Wire, pkg-config --atleast-version=1.4.0 libghostty-vt respondió que no.

Kwi, de KDE, tuvo que adaptarse. El 7 de noviembre, el commit "Deps: Bump to libghostty-vt 1.0" del desarrollador Eike Hein cambió el README de "libghostty-vt 1.4.0+" a "libghostty-vt 1.0+". El mismo commit muestra que la propia API de C cambió antes de congelarse. ghostty_formatter_terminal_new() perdió su argumento de opciones, que ahora se fija con ghostty_formatter_set(). Dos tipos de estilo de cursor se sustituyeron por uno, GhosttyCursorStyle.

Qué significa esto para los desarrolladores

  • Baja las comprobaciones de versión antiguas a 1.0. Una comprobación de CMake o pkg-config que pida 1.4 o posterior rechazará la biblioteca estable. Kwi ahora pide find_package(Ghostty 1.0 REQUIRED).
  • Recompila el código escrito para una compilación anterior a la 1.0. La promesa de ABI empieza en la 1.0. Cuenta con tipos renombrados y firmas de funciones cambiadas, como en la migración de Kwi.
  • Los empaquetadores deben usar los tarballs de la versión, no un checkout de Git. La guía dice que un checkout o un archivo de GitHub compila en su lugar la app Ghostty, salvo que se añada -Demit-lib-vt. Usa un ZIG_GLOBAL_CACHE_DIR nuevo y vacío, y Zig 0.17.x.
  • Enlaza contra el soname, libghostty-vt.so.1. Las versiones 1.x posteriores mantienen ese nombre. Así, los programas compilados ahora reciben correcciones sin recompilar.
  • Revisa tu plataforma. Hashimoto indica que Windows on Arm, illumos, x86 de 32 bits, WASI y bare metal se compilan en la CI, pero no se prueban. Tampoco afirma cubrir todos los protocolos de terminal.
  • Los usuarios de Neovim pueden esperar. Nada cambia hasta que la solicitud de cambios #39773 se fusione y llegue en una versión.

Fuentes

  1. Libghostty 1.0 - Mitchell Hashimoto
  2. Packaging libghostty-vt for Distribution - GitHub
  3. libghostty-vt documentation - Ghostty
  4. feat(terminal): replace libvterm with libghostty-vt - GitHub
  5. Deps: Bump to libghostty-vt 1.0 - KDE on GitHub
  6. Libghostty 1.0 gives developers a stable terminal engine to embed - RuntimeWire
open-sourcelinuxterminalneovimzig

Artículos relacionados