Aller au contenu

Libghostty 1.0 apporte une ABI C stable aux applications de terminal

Libghostty-vt 1.0 est sortie le 6 novembre avec une ABI C stable. Un test de compilation de Tech AI Wire a trouvé 209 fonctions versionnées et un numéro de version qui a baissé.

Par

4 min de lecture

XLinkedIn

Traduit automatiquement de l'original anglais, vérifié et édité par Claire Whitmore. La version anglaise fait foi. Notre méthode

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

En chiffres

fonctions exportées, toutes marquées GHOSTTY_VT_1.0, dans une compilation de Tech AI Wire
209
pour compiler depuis les archives signées, dans un test en conteneur Linux de Tech AI Wire
117 s
terminaux actifs sur une machine Linux à 4 cœurs et 8 Go dans le test d'un utilisateur, selon la documentation
10 000

Mitchell Hashimoto a publié libghostty-vt 1.0 le 6 novembre 2026. C'est la première version stable du moteur de terminal au cœur de son terminal Ghostty. La version 1.0 fige l'ABI C de la bibliothèque, l'interface binaire contre laquelle les programmes compilés se lient. Une application compilée sur la 1.0 aujourd'hui devrait continuer à fonctionner quand des versions 1.x ultérieures remplaceront la bibliothèque. C'est important, car les IDE de JetBrains font déjà tourner leur terminal intégré dessus. Neovim attend aussi cette version pour abandonner son ancien code de terminal.

Ce que promet libghostty-vt 1.0

Un moteur de terminal lit les octets qu'un programme affiche, y compris les codes d'échappement pour les couleurs et les déplacements du curseur. Il suit ensuite l'écran, le curseur et l'historique de défilement. Il ne dessine rien. Le dessin est laissé à l'application. C'est pourquoi un terminal KDE, un IDE et une page web peuvent tous le partager.

« La 1.0 signifie que libghostty-vt suit la gestion sémantique de version et offre des promesses strictes de compatibilité d'ABI », écrit Hashimoto dans son billet d'annonce. Il décrit comment le projet s'y tient :

  • Du code compilé avec des en-têtes plus récents reçoit d'une bibliothèque plus ancienne une erreur GHOSTTY_UNSUPPORTED, au lieu d'un plantage.
  • Chaque fonction exportée porte une étiquette de version sous Linux et les autres systèmes ELF. Le système refuse donc par son nom une bibliothèque incompatible au lancement d'un programme.
  • L'intégration continue compare l'ABI à une référence enregistrée avec libabigail sous Linux. Sous macOS et WebAssembly, elle la compare à des listes de types figées.

La bibliothèque a désormais son propre cycle de publication, séparé de l'application Ghostty. Chaque version fournit une archive source signée et une seconde archive avec toutes les dépendances Zig. Les distributions Linux peuvent ainsi compiler hors ligne. Les règles figurent dans PACKAGING-LIBGHOSTTY.md. Le code est sous licence MIT et n'a besoin que de la bibliothèque C à l'exécution.

Qui l'utilise déjà

JetBrains fait désormais tourner le terminal d'IntelliJ, PyCharm, GoLand et de ses autres IDE sur la bibliothèque, selon Hashimoto. Il cite le chiffre de JetBrains : 12,5 millions d'utilisateurs réguliers de ces IDE. La documentation du projet estime que des dizaines de millions de personnes utilisent libghostty-vt chaque jour, et précise qu'aucun suivi n'est fait.

Neovim a une demande de fusion approuvée, la #39773, qui remplace libvterm par libghostty-vt, d'après Hashimoto. Elle attendait une version étiquetée, et elle était encore ouverte le 7 novembre. Elle corrigerait un bogue vieux de dix ans, où le texte du terminal est coupé après un redimensionnement de la fenêtre. D'autres utilisateurs incluent Turborepo de Vercel, OrbStack, le terminal Ghostel pour Emacs et le terminal Kwi, expérimental, de KDE. Des liaisons communautaires existent pour Rust, Go, Python, Swift, .NET et d'autres.

Testé : compiler la 1.0 depuis les archives signées

Lors d'un test de Tech AI Wire le 7 novembre, sous macOS 26.6.2 avec Docker 28.4.0, un conteneur Alpine Linux 3.22 (arm64) a compilé la version. Il a suivi les étapes que le guide d'empaquetage donne aux distributions :

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
VérificationRésultat
Signatures des sources, des dépendances et de SHA256SUMSLes trois vérifiées avec minisign
Compilateur Zig0.17.0 (la version exige 0.17.x)
Durée de compilation, ReleaseFast117 secondes
Bibliothèque partagéelibghostty-vt.so.1.0.0, 11,5 Mo, soname libghostty-vt.so.1
Dépendances à l'exécutionLa bibliothèque C seulement (musl)
Fonctions exportées209, toutes marquées GHOSTTY_VT_1.0
Version pkg-config1.0.0
L'exemple C de la documentationCompilé avec gcc, il a affiché « Hello, world! »

La première tentative a échoué. Le runtime C++ fourni avec Zig avait besoin de l'en-tête linux/futex.h, absent d'une image Alpine nue. L'installation du paquet Alpine linux-headers a réglé le problème.

Le numéro de version a baissé

Avant la 1.0, libghostty-vt tirait sa version de l'application Ghostty. Dans les fichiers de compilation de Ghostty 1.4.0, la version de la bibliothèque est celle de l'application, 1.4.0. La version stable annonce 1.0.0. Dans la compilation de Tech AI Wire, pkg-config --atleast-version=1.4.0 libghostty-vt a répondu non.

Kwi, chez KDE, a dû s'adapter. Le 7 novembre, le commit « Deps: Bump to libghostty-vt 1.0 » du développeur Eike Hein a changé le README de « libghostty-vt 1.4.0+ » en « libghostty-vt 1.0+ ». Le même commit montre que l'API C elle-même a changé avant le gel. ghostty_formatter_terminal_new() a perdu son argument d'options, désormais réglé avec ghostty_formatter_set(). Deux types de style de curseur ont été remplacés par un seul, GhosttyCursorStyle.

Ce que cela signifie pour les développeurs

  • Abaissez les anciennes vérifications de version à 1.0. Une vérification CMake ou pkg-config exigeant 1.4 ou plus rejettera la bibliothèque stable. Kwi demande désormais find_package(Ghostty 1.0 REQUIRED).
  • Recompilez le code écrit pour une version antérieure à la 1.0. La promesse d'ABI commence à la 1.0. Attendez-vous à des types renommés et à des signatures de fonctions modifiées, comme dans le portage de Kwi.
  • Les empaqueteurs doivent utiliser les archives de publication, pas un clone Git. Selon le guide, un clone ou une archive GitHub compile l'application Ghostty à la place, sauf si l'on ajoute -Demit-lib-vt. Utilisez un ZIG_GLOBAL_CACHE_DIR neuf et vide, et Zig 0.17.x.
  • Liez contre le soname, libghostty-vt.so.1. Les versions 1.x ultérieures gardent ce nom. Les programmes compilés maintenant reçoivent donc les correctifs sans recompilation.
  • Vérifiez votre plateforme. Hashimoto indique que Windows on Arm, illumos, x86 32 bits, WASI et le bare metal sont compilés en CI, mais pas testés. Il ne prétend pas non plus couvrir tous les protocoles de terminal.
  • Les utilisateurs de Neovim peuvent attendre. Rien ne change tant que la demande de fusion #39773 n'est pas fusionnée et publiée dans une version.

Sources

  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

Articles liés