コンテンツにスキップ
Linux

Paneflow 0.8.0: Linux の Alacritty を libghostty-vt に置き換え

Paneflow 0.8.0 では、標準 Linux ビルドで新しく作成するすべてのターミナルセッションに libghostty-vt を使用します。terminal.backendauto の場合、Linux x86_64 と ARM64 のビルドは Ghostty をデフォルトで選択します。

この移行で変わるのは、VT データを解釈してターミナル状態を管理するエンジンです。周囲のワークスペースは変わりません。PTY、プロセスのライフサイクル、GPUI レンダラー、ペイン、セッション、エージェントの状態、diff、永続化は引き続き Paneflow が管理します。macOS と Windows は Alacritty のままです。

青とラベンダーの風景に並ぶ Ghostty と Paneflow のアプリアイコン

Ghostty が VT エンジンとして Paneflow に加わる

Paneflow 0.7.x までのターミナルセッションは、Rust crate の alacritty_terminal 0.26 を基盤としていました。このエンジンがエスケープシーケンス、グリッド、スクロールバック、入力モード、検索、レンダリングモデルの一部を担っていました。

新しい Linux パスは、Ghostty の組み込み可能なターミナルエンジンである libghostty-vt を使用します。VT シーケンスを解析し、カーソルと画面の状態、書記素、折り返し、リフローを管理します。さらにキーボードとマウスの入力をエンコードし、ホストアプリケーションへ差分レンダリング状態を公開します。

Paneflow は Ghostty アプリ本体、GTK UI、レンダラーを組み込んでいません。Ghostty がターミナルのコアを提供し、Paneflow がその状態を所有権のある Rust スナップショットへ変換して、既存の GPUI レンダラーで描画します。製品 UI とマルチエージェントのワークフローは Paneflow の管理下に残ります。

Paneflow 固有の境界でエンジンと製品を分離

パーサーの置き換えは作業の一部にすぎませんでした。Alacritty の型は PTY ループ、レンダリング、検索、選択、リンク、スクロールバックの復元、セッションのライフサイクルまで入り込んでいました。先にこの結合を外さず依存関係だけを交換すると、同じ問題を新しいエンジンへ移すことになります。

Paneflow は独自のターミナルセッション境界を持つようになりました。Alacritty と Ghostty は、同じ Paneflow のコマンド、イベント、モード、検索結果、レンダリングスナップショットを生成します。レンダラーは、どちらのエンジンがセルを作成したか知る必要がありません。

この境界が移行の長期的な成果です。macOS と Windows を変更せず Linux から先に移行でき、将来エンジンを更新してもアプリケーション全体が内部型を採用する必要はありません。

不安定な C API を小さな Rust ラッパーに閉じ込める

Ghostty は libghostty-vt の機能を成熟したものと説明する一方で、API シグネチャはまだ変更中としています。そのため Paneflow は、Ghostty の正確なコミット ae52f97d、C ヘッダー、生成済み bindings、Zig のバージョン、ビルド構成、アーカイブのチェックサムを固定しています。

生の C ABI は 1 つの -sys crate に隔離されています。もう 1 つの安全なラッパーが各ネイティブハンドルを所有し、ターミナル作成前に API バージョンと C レイアウトを検証します。コールバックの panic を封じ込め、Ghostty の割り当ては対応するアロケーターで解放します。

所有権のルールはレンダリング時に特に重要です。libghostty-vt が公開する行とセルは借用データであり、その後のターミナル変更で無効になる可能性があります。Paneflow はターミナルをロックしている間に必要なデータをコピーし、所有権のある Rust スナップショットだけを GPUI に渡します。C ポインターや借用 slice がロックやフレームの境界を越えることはありません。

この方式は、固定しない依存関係を追うより保守コストがかかります。Ghostty を更新するたびに、2 つの Linux アーキテクチャ向けにヘッダー、bindings、静的アーカイブ、チェックサム、シンボル、ライセンスを再生成してレビューする必要があります。ランタイムの不確実性を受け入れず、コストを明示して狭い範囲に閉じ込める選択です。

Alacritty は差分検証の基準とロールバックとして残る

ユーザーから見た目標は継続性です。シェル、コーディングエージェント、フルスクリーン TUI、検索、選択、クリップボード、スクロールバック、OSC イベント、リサイズ、リフロー、プロセス終了は、エンジン変更前と同じように動作する必要があります。

Paneflow は同じ決定的な VT ストリームを複数のチャンクサイズで Alacritty と Ghostty に入力し、正規化したスナップショットと順序付きイベントを比較します。別の fuzzing ターゲットでは、不正または途中で切れたシーケンス、入力エンコード、リサイズ、リフロー、複数の PTY read に分割されたシーケンス境界を検査します。パッケージ検証は、ランタイムで libghostty.so に依存する、不正なビルド ID を持つ、またはレビュー済みのネイティブ通知を含まない Linux アーティファクトを拒否します。

Alacritty は削除されていません。新しく作成する Linux セッションで使用するには、paneflow.json の backend を設定します。

{
  "terminal": {
    "backend": "alacritty"
  }
}

実行中のセッションがメモリ上でエンジンを切り替えることはありません。設定を変更した後、そのセッションを閉じて新しいペインを開いてください。auto は標準 Linux ビルドで Ghostty を選択し、macOS、Windows、または --no-default-features でコンパイルした Linux ビルドでは Alacritty を選択します。

Ghostty のインストールを必要としない静的リンク

公式 Linux パッケージには、x86_64 または ARM64 向けに固定された静的 libghostty-vt アーカイブが含まれます。マシンに Ghostty、Zig、共有ライブラリをインストールする必要はありません。クリーンな Paneflow checkout で通常の cargo build を実行した場合も、リポジトリに含まれる検証済みアーカイブを使用し、build.rs からネイティブソースをダウンロードしません。

この backend は Linux から導入します。Windows や macOS への拡張と、将来 Alacritty を削除するかどうかは別の判断です。Paneflow 0.8.0 は影響範囲を限定しています。新しいデフォルトは 1 つ、サポートするエンジンは 2 つ、新規セッションはすぐにロールバックできます。

Paneflow 0.8.0 に更新し、新しいペインを開いて、普段使っているシェル、TUI、コーディングエージェントを実行してください。ターミナルの動作にリグレッションがあれば、新しいセッションを Alacritty に戻し、コマンド、Linux ディストリビューション、Wayland と X11 のどちらで動かしていたかを報告してください。

最新の記事

すべての記事