Pular para o conteúdo

Libghostty 1.0 traz uma ABI C estável para apps de terminal

A libghostty-vt 1.0 saiu em 6 de novembro com uma ABI C estável. Um teste de compilação da Tech AI Wire achou 209 funções versionadas e um número de versão que caiu.

Por

4 min de leitura

XLinkedIn

Traduzido automaticamente do original em inglês, que Claire Whitmore verificou e editou. Prevalece a versão em inglês. Como trabalhamos

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

Em números

funções exportadas, todas com a etiqueta GHOSTTY_VT_1.0, em uma compilação da Tech AI Wire
209
para compilar a partir dos tarballs assinados em um teste da Tech AI Wire em contêiner Linux
117 s
terminais ativos em uma máquina Linux de 4 núcleos e 8 GB no teste de um usuário, segundo a documentação
10.000

Mitchell Hashimoto lançou a libghostty-vt 1.0 em 6 de novembro de 2026. É a primeira versão estável do motor de terminal que fica dentro do seu terminal Ghostty. A versão 1.0 congela a ABI C da biblioteca, a interface binária com a qual os programas compilados se ligam. Um app compilado hoje sobre a 1.0 deve continuar funcionando quando versões 1.x posteriores substituírem a biblioteca. Isso importa porque as IDEs da JetBrains já rodam seu terminal integrado sobre ela. O Neovim também espera esta versão para abandonar seu antigo código de terminal.

O que a libghostty-vt 1.0 promete

Um motor de terminal lê os bytes que um programa imprime, incluindo os códigos de escape para cores e movimentos do cursor. Depois, acompanha a tela, o cursor e o histórico de rolagem. Ele não desenha nada. O desenho fica a cargo do app. Por isso um terminal do KDE, uma IDE e uma página web podem compartilhá-lo.

"A 1.0 significa que a libghostty-vt segue o versionamento semântico e tem promessas estritas de compatibilidade de ABI", escreve Hashimoto em sua publicação de anúncio. Ele descreve como o projeto garante isso:

  • Código compilado com cabeçalhos mais novos recebe de uma biblioteca mais antiga um erro GHOSTTY_UNSUPPORTED, em vez de travar.
  • Cada função exportada leva uma etiqueta de versão no Linux e em outros sistemas ELF. Assim, o sistema recusa pelo nome uma biblioteca incompatível quando um programa inicia.
  • A integração contínua compara a ABI com uma referência salva usando a libabigail no Linux. No macOS e no WebAssembly, compara com listas de tipos fixas.

A biblioteca agora tem seu próprio ciclo de lançamentos, separado do app Ghostty. Cada versão publica um tarball de código assinado e um segundo tarball com todas as dependências do Zig. Assim, as distribuições Linux podem compilar offline. As regras estão em PACKAGING-LIBGHOSTTY.md. O código tem licença MIT e precisa apenas da biblioteca C em tempo de execução.

Quem já usa

A JetBrains agora roda o terminal do IntelliJ, PyCharm, GoLand e de suas outras IDEs sobre a biblioteca, segundo Hashimoto. Ele cita o número da própria JetBrains: 12,5 milhões de usuários recorrentes dessas IDEs. A documentação do projeto estima que dezenas de milhões de pessoas usam a libghostty-vt todos os dias, e observa que não faz nenhum rastreamento.

O Neovim tem um pull request aprovado, o #39773, que substitui a libvterm pela libghostty-vt, segundo Hashimoto. Ele esperava uma versão com tag e ainda estava aberto em 7 de novembro. Ele fecharia um bug de 10 anos em que o texto do terminal é cortado depois que a janela muda de tamanho. Outros usuários incluem o Turborepo da Vercel, o OrbStack, o terminal Ghostel para Emacs e o terminal Kwi, experimental, do KDE. Há bindings da comunidade para Rust, Go, Python, Swift, .NET e outras.

Testado: compilando a 1.0 a partir dos tarballs assinados

Em um teste da Tech AI Wire em 7 de novembro, no macOS 26.6.2 com Docker 28.4.0, um contêiner Alpine Linux 3.22 (arm64) compilou a versão. Ele seguiu os passos que o guia de empacotamento dá às distribuições:

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
VerificaçãoResultado
Assinaturas do código, das dependências e do SHA256SUMSAs três verificadas com minisign
Compilador Zig0.17.0 (a versão exige 0.17.x)
Tempo de compilação, ReleaseFast117 segundos
Biblioteca compartilhadalibghostty-vt.so.1.0.0, 11,5 MB, soname libghostty-vt.so.1
Dependências em execuçãoApenas a biblioteca C (musl)
Funções exportadas209, todas com a etiqueta GHOSTTY_VT_1.0
Versão no pkg-config1.0.0
O exemplo em C da documentaçãoCompilou com gcc e imprimiu "Hello, world!"

A primeira tentativa falhou. O runtime C++ que vem com o Zig precisava do cabeçalho linux/futex.h, que falta em uma imagem Alpine mínima. Instalar o pacote linux-headers do Alpine resolveu.

O número de versão caiu

Antes da 1.0, a libghostty-vt pegava sua versão do app Ghostty. Nos arquivos de compilação do Ghostty 1.4.0, a versão da biblioteca é a do app, 1.4.0. A versão estável informa 1.0.0. Na compilação da Tech AI Wire, pkg-config --atleast-version=1.4.0 libghostty-vt respondeu que não.

O Kwi, do KDE, teve de se ajustar. Em 7 de novembro, o commit "Deps: Bump to libghostty-vt 1.0" do desenvolvedor Eike Hein mudou o README de "libghostty-vt 1.4.0+" para "libghostty-vt 1.0+". O mesmo commit mostra que a própria API C mudou antes do congelamento. ghostty_formatter_terminal_new() perdeu seu argumento de opções, que agora é definido com ghostty_formatter_set(). Dois tipos de estilo de cursor foram substituídos por um, GhosttyCursorStyle.

O que isso significa para desenvolvedores

  • Baixe as verificações de versão antigas para 1.0. Uma verificação do CMake ou do pkg-config que peça 1.4 ou superior vai rejeitar a biblioteca estável. O Kwi agora pede find_package(Ghostty 1.0 REQUIRED).
  • Recompile o código escrito para uma compilação anterior à 1.0. A promessa de ABI começa na 1.0. Espere tipos renomeados e assinaturas de funções alteradas, como na migração do Kwi.
  • Empacotadores devem usar os tarballs da versão, não um checkout do Git. O guia diz que um checkout ou um arquivo do GitHub compila o app Ghostty no lugar, a menos que se adicione -Demit-lib-vt. Use um ZIG_GLOBAL_CACHE_DIR novo e vazio, e o Zig 0.17.x.
  • Ligue contra o soname, libghostty-vt.so.1. As versões 1.x posteriores mantêm esse nome. Assim, programas compilados agora recebem correções sem recompilar.
  • Confira sua plataforma. Hashimoto lista Windows on Arm, illumos, x86 de 32 bits, WASI e bare metal como compilados na CI, mas não testados. Ele também não afirma cobrir todos os protocolos de terminal.
  • Usuários do Neovim podem esperar. Nada muda até que o pull request #39773 seja mesclado e chegue a uma versão.

Fontes

  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

Artigos relacionados