Libghostty 1.0、組み込みツール向けターミナルエミュレーションを安定化
Cライブラリ「libghostty-vt」がバージョン1.0に到達し、安定したABIを提供します。JetBrains IDEやNeovimのターミナルを支えつつ、移植性と低リソースでの高性能を実現しています。
英語の原文から自動翻訳されました。
Mitchell Hashimoto氏がlibghostty-vt 1.0のリリースを発表しました。これはターミナルエミュレーション基盤にとって重要なマイルストーンです。Ghosttyターミナルエミュレータのコア部分から抽出されたこのポータブルなCライブラリは、現在、安定したアプリケーションバイナリインターフェース(ABI)と完全な機能セットを提供しています。今回のリリースは、業界大手による採用や数百万のユーザー向け製品への統合を経て進められてきた1年間の開発を検証するものです。
何が起きたか
バージョン1.0への道のりは、プロジェクトが初期段階にあった1年以上前に始まりました。当時、Zigモジュールがマージされたばかりで、C APIはまだ存在せず、コードの利用者はGhostty自体のみでした。今日では状況は大きく変わっています。C APIは完全なターミナルエミュレーター実装へと進化し、数百の無料および商用製品を通じて数百万人のユーザーの本番環境で動作しています。1.0という指定は、ライブラリの機能とそのC ABIの両方が現在安定していることを確認するものであり、開発者にとって信頼できる基盤を提供します。
採用率は当初の予想を上回りました。JetBrainsはIDEスイートの従来のターミナルエンジンJediTermをlibghosttyに置き換えました。この変更はIntelliJ、PyCharm、GoLandのすべてのユーザーに影響し、JetBrainsの報告によればアクティブユーザー数は1250万人を超えます。Neovimのメンテナーは、libvtermをlibghostty-vtに置き換えるプルリクエストを承認しました。これにより、ウィンドウサイズ変更時のスクロールバックリフローに関する10年来の問題が解決されます。Linuxディストリビューションがこの依存関係を個別にパッケージ化できるようにするため、このタグ付きリリースまでマージは保留されていました。
これらの主要な統合に加え、ライブラリは多様なツールでも活用されています。KDEの開発者はこのライブラリに基づく新しいKonsole代替品の実験を行っています。VercelはTurborepoのテキストユーザーインターフェースでタスク出力を描画するために使用し、devenvはシェル駆動のために利用しています。Antithesisはこのライブラリを使用してTUIプログラムをファジングし、btopなどのツールにおける実際のバグを発見しました。エコシステムはRust、Go、JavaScript、Swift、Python、.NET、Elixir、Dart、Java向けのコミュニティバインディングを含むよう拡大しています。現在、libghosttyを搭載したターミナルを使用している人は、Ghosttyアプリ自体を使用している人よりも多くなっています。
仕組み
Libghostty-vtは、重いランタイム要件を課すことなくターミナルエミュレーションロジックを処理する、高性能かつポータブルなCライブラリとして設計されています。スレッドを作成せずに動作し、メモリ割り当てを開発者がカスタマイズできるようにすることで、最小限の計算量とメモリ使用量を保証します。負荷テストでは、4コア8GB RAMのLinuxサーバー上で、ライブシェルを持つ1万個のアクティブターミナルをライブラリが正常に管理することに成功しました。この効率性により、組み込みシステムやWebAssembly経由のWebブラウザなど、リソースが制限された環境にも適しています。
アーキテクチャ上の核心的な決定事項は、ABI安定性の強制です。ライブラリ内のすべてのオブジェクトは不透明ハンドルであり、データアクセスはenumキー付きのゲッターとセッターを通じて行われます。この設計により、既存のバイナリを壊すことなく、新しいシンボルを追加せずに値を追加できます。新しいヘッダーでコンパイルされたプログラムが古いバージョンのライブラリに対してリンクする場合、クラッシュするのではなくGHOSTTY_UNSUPPORTEDの結果を受け取ります。非不透明構造体には、将来のフィールド追加を可能にするためにサイズまたは予約済みパディングが含まれます。継続的インテグレーションパイプラインは、Linux上ではlibabigailを、macOSおよびWebAssembly上ではゴールデン型マニフェストを使用して、これらのポリシーを適用します。
ライブラリは、SIMD操作用のsimdutfやGoogle Highway、グラフームデータ用のコンパクトなUnicodeテーブル、画像デコード用のWuffsなど、少数のパーミッシブライセンスの依存関係でコンパイルされます。C++標準ライブラリに依存せず、依存関係ツリー全体はコピーレフトコードを含みません。WebAssemblyビルドの場合、入力エンコーディングやKittyグラフィックスサポートなどのサブシステムをコンパイル時に除外でき、API互換性を維持しながらモジュールサイズを1メガバイト未満に削減できます。
主要な詳細
- 安定したABI: バージョン1.0はセマンティックバージョニングと厳格なABI互換性を保証し、Linux、macOS、WebAssembly上のCIツールによって検証されています。
- 大規模な採用: JetBrains IDEでは1250万人以上のユーザー向けにlibghosttyが使用されるようになったほか、Neovimではlibvtermの置き換えとしての統合が承認されました。
- ポータブルビルド: Linux、macOS、iOS、FreeBSD、Windows、Android、WebAssemblyをサポートし、Appleプラットフォーム向けXCFrameworksなどの特定の成果物を提供します。
- 軽量フットプリント: スレッドなしで動作し、カスタマイズ可能なアロケーターを使用します。SIMDが無効の場合、libcなしのフリースタンディング環境でも動作可能です。
- クリーンなライセンス: MITライセンスで配布され、コピーレフト依存関係はありません。SPDXライセンス検証用の機械可読マニフェストも含まれています。
- パッケージング対応: サイン済みソースtarball、Zigキャッシュレイアウトによるオフラインビルド機能、Linuxディストリビューション向けの適切なSONAMEバージョニングを提供します。
なぜ重要なのか
開発者ツール、CLIアプリケーション、組み込みインターフェースを構築するソフトウェアエンジニアにとって、libghostty-vtはターミナル断片化という長年の問題を解決します。歴史的に、各ツールは独自のエミュレーターを書くか、libvtermのような一貫性がなくしばしばバグのあるライブラリに頼る必要がありました。単一の高品质な参照実装を提供することにより、libghosttyはチームがターミナル解析を再発明する代わりに、プロダクトロジックに集中できるようにします。安定性の保証により、ライブラリの更新が既存の統合を壊すことはなく、長期プロジェクトのメンテナンスオーバーヘッドが軽減されます。
パフォーマンス特性は、クラウドベースおよびエージェント型コーディングツールにも新たな可能性を開きます。ライブラリが非常に軽量であるため、中程度のハードウェアで数千個の同時ターミナルセッションを実行できます。この効率性は、リモート開発環境や自動テストパイプラインを提供するサービスにとって極めて重要です。さらに、ほぼすべての主要プログラミング言語向けのバインディングが利用可能になったことで参入障壁が下がり、技術スタックに関係なく堅牢なターミナルエミュレーションを統合できるようになりました。
あなたができること
- lib.ghostty.orgのドキュメントを確認して、次のTUIプロジェクトにlibghostty-vtを評価してください。
- アプリケーション内のレガシーターミナルエミュレーションライブラリを置き換え、改善された標準準拠とパフォーマンスの恩恵を受けてください。
- 提供されているWebAssemblyビルドを使用して、バンドルサイズへの影響を最小限に抑えながら、Webベースの開発者ツールにターミナル機能を追加してください。
- illumosやベアメタルRISC-Vなど未対応プラットフォームでのライブラリテストを通じて、エコシステムに貢献してください。
- 機械可読な依存関係マニフェストを活用して、ディストリビューションパッケージのライセンスコンプライアンスチェックを簡素化してください。
- お好みの言語向けのコミュニティバインディングを検討し、Cコードを直接書かずにターミナルエミュレーションを統合してください。



