Outils de développement

Libghostty 1.0 stabilise l'émulation de terminal pour les outils embarqués

La bibliothèque C libghostty-vt atteint la version 1.0 avec une ABI stable, alimentant les terminaux dans les IDE JetBrains et Neovim tout en offrant des performances portables et peu gourmandes en ressources.

Un cube en verre avec des circuits lumineux représentant la bibliothèque libghostty sur le bureau d'un développeur.
Illustration générée pour cet article

Traduit automatiquement depuis l'original anglais.

Mitchell Hashimoto a annoncé la sortie de libghostty-vt 1.0, marquant une étape significative pour l'infrastructure d'émulation de terminal. Cette bibliothèque C portable, extraite du cœur de l'émulateur de terminal Ghostty, offre désormais une interface binaire d'application (ABI) stable et un jeu de fonctionnalités complet. Cette publication valide un an de développement au cours duquel la bibliothèque a été adoptée par des acteurs majeurs de l'industrie et intégrée dans des millions de produits destinés aux utilisateurs.

Ce qui s'est passé

Le chemin vers la version 1.0 a commencé il y a plus d'un an, lorsque le projet était à ses débuts. À cette époque, le module Zig venait tout juste d'être fusionné, l'API C n'existait pas encore et Ghostty était le seul consommateur du code. Aujourd'hui, le paysage est radicalement différent. L'API C a évolué pour devenir une implémentation complète d'émulateur de terminal, utilisée en production par des millions d'utilisateurs via des centaines de produits gratuits et commerciaux. La désignation 1.0 confirme que tant les fonctionnalités de la bibliothèque que son ABI C sont désormais stables, offrant une base fiable aux développeurs.

Le taux d'adoption a dépassé les attentes initiales. JetBrains a remplacé son ancien moteur de terminal, JediTerm, par libghostty dans sa suite d'IDE. Ce changement affecte tous les utilisateurs d'IntelliJ, PyCharm et GoLand, totalisant plus de 12,5 millions d'utilisateurs actifs selon les rapports de JetBrains. Les mainteneurs de Neovim ont approuvé une demande d'intégration (pull request) pour remplacer libvterm par libghostty-vt, une décision qui résout un problème vieux d'une décennie concernant le reflow du défilement lors du redimensionnement de la fenêtre. La fusion était en attente de cette version taguée afin de permettre aux distributions Linux de packager la dépendance séparément.

Au-delà de ces intégrations majeures, la bibliothèque a trouvé sa place dans divers outils. Les développeurs de KDE expérimentent un nouveau remplacement de Konsole basé sur cette bibliothèque. Vercel l'utilise pour afficher la sortie des tâches dans l'interface utilisateur textuelle de Turborepo, tandis que devenv s'en sert pour piloter des shells. Antithesis a employé la bibliothèque pour tester par fuzzing des programmes TUI, révélant des bugs réels dans des outils comme btop. L'écosystème s'est étendu pour inclure des bindings communautaires pour Rust, Go, JavaScript, Swift, Python, .NET, Elixir, Dart et Java. Actuellement, plus de personnes utilisent un terminal propulsé par libghostty qu'elles n'utilisent l'application Ghostty elle-même.

Comment cela fonctionne

Libghostty-vt est conçue comme une bibliothèque C portable et haute performance qui gère la logique d'émulation de terminal sans imposer de lourdes exigences d'exécution. Elle fonctionne sans créer de threads et permet aux développeurs de personnaliser l'allocation mémoire, garantissant une utilisation minimale des ressources de calcul et de mémoire. Lors de tests de stress, la bibliothèque a géré avec succès 10 000 terminaux actifs avec des shells interactifs sur un serveur Linux doté de seulement quatre cœurs et 8 Go de RAM. Cette efficacité la rend adaptée aux environnements contraints en ressources, y compris les systèmes embarqués et les navigateurs web via WebAssembly.

Une décision architecturale centrale a été l'imposition de la stabilité de l'ABI. Chaque objet de la bibliothèque est une poignée opaque, et l'accès aux données se fait via des getters et setters basés sur des énumérations. Cette conception permet d'ajouter de nouvelles valeurs sans introduire de nouveaux symboles ni casser les binaires existants. Si un programme compilé avec des en-têtes plus récents est lié à une version plus ancienne de la bibliothèque, il reçoit des résultats GHOSTTY_UNSUPPORTED plutôt que de planter. Les structures non opaques incluent leur taille ou un rembourrage réservé pour permettre l'ajout futur de champs. Les pipelines d'intégration continue appliquent ces politiques en utilisant libabigail sous Linux et des manifestes de types dorés (golden type manifests) sous macOS et WebAssembly.

La bibliothèque se compile avec un petit nombre de dépendances sous licences permissives, notamment simdutf et Google Highway pour les opérations SIMD, une table Unicode compacte pour les données de graphèmes, et Wuffs pour le décodage d'images. Elle ne dépend pas de la bibliothèque standard C++, et l'arbre de dépendances entier est exempt de code copyleft. Pour les builds WebAssembly, les développeurs peuvent compiler hors certains sous-systèmes comme l'encodage d'entrée ou le support graphique Kitty, réduisant la taille du module à moins d'un mégaoctet tout en maintenant la compatibilité API.

Détails clés

  • ABI Stable : La version 1.0 garantit le versionnage sémantique et une compatibilité ABI stricte, vérifiée par des outils CI sous Linux, macOS et WebAssembly.
  • Adoption Majeure : Les IDE JetBrains utilisent désormais libghostty pour plus de 12,5 millions d'utilisateurs, et Neovim a approuvé son intégration pour remplacer libvterm.
  • Build Portable : Prend en charge Linux, macOS, iOS, FreeBSD, Windows, Android et WebAssembly, avec des artefacts spécifiques comme les XCFrameworks pour les plateformes Apple.
  • Empreinte Légère : Fonctionne sans threads, utilise des allocateurs personnalisables et peut opérer dans des environnements autonomes sans libc si le SIMD est désactivé.
  • Licence Propre : Distribuée sous licence MIT sans dépendances copyleft ; inclut des manifestes lisibles par machine pour la vérification des licences SPDX.
  • Prête pour le Packaging : Fournit des tarballs sources signés, des capacités de build hors ligne via les dispositions de cache Zig, et un versionnement SONAME approprié pour les distributions Linux.

Pourquoi c'est important

Pour les ingénieurs logiciels développant des outils pour développeurs, des applications CLI ou des interfaces embarquées, libghostty-vt résout le problème persistant de la fragmentation des terminaux. Historiquement, chaque outil devait soit écrire son propre émulateur, soit compter sur des bibliothèques incohérentes et souvent boguées comme libvterm. En fournissant une seule implémentation de référence de haute qualité, libghostty permet aux équipes de se concentrer sur la logique de leur produit plutôt que de réinventer l'analyse des terminaux. La garantie de stabilité signifie que les mises à jour de la bibliothèque ne casseront pas les intégrations existantes, réduisant ainsi la charge de maintenance pour les projets à long terme.

Les caractéristiques de performance ouvrent également de nouvelles possibilités pour les outils de codage basés sur le cloud et agentiques. Comme la bibliothèque est très légère, elle peut exécuter des milliers de sessions de terminal concurrentes sur du matériel modeste. Cette efficacité est cruciale pour les services fournissant des environnements de développement distants ou des pipelines de test automatisés. De plus, la disponibilité de bindings pour presque tous les principaux langages de programmation abaisse la barrière à l'entrée, permettant aux équipes d'intégrer une émulation de terminal robuste indépendamment de leur stack technique.

Ce que vous pouvez faire

  • Évaluez libghostty-vt pour votre prochain projet TUI en consultant la documentation sur lib.ghostty.org.
  • Remplacez les anciennes bibliothèques d'émulation de terminal dans votre application pour bénéficier d'une meilleure conformité aux normes et de performances améliorées.
  • Utilisez les builds WebAssembly fournis pour ajouter des capacités de terminal aux outils de développement web avec un impact minimal sur la taille du bundle.
  • Contribuez à l'écosystème en testant la bibliothèque sur des plateformes non prises en charge comme illumos ou RISC-V nu (bare-metal).
  • Exploitez les manifestes de dépendances lisibles par machine pour simplifier les vérifications de conformité des licences pour vos packages de distribution.
  • Explorez les bindings communautaires pour votre langage préféré afin d'intégrer l'émulation de terminal sans écrire directement de code C.
  • #terminal emulation
  • #c library
  • #developer tools
  • #libghostty
  • #abi stability

Outils de la Boutique Bytechap

Continuer la lecture

Tous les articles