關於 Ghostty

Ghostty 是一款以快速、功能豐富、原生為特色的終端機模擬器。市面上雖有許多優秀的終端機模擬器,但它們都迫使你在速度、功能或原生 UI 之間做出取捨。Ghostty 三者兼備。

在各個方面,我並非宣稱 Ghostty 是最好的(例如最快、功能最豐富或最原生)。但當我著手開發 Ghostty 時,我深感所有終端機最多只讓你在三個維度中選兩個。我想要打造一款在這三個維度上都具有競爭力的終端機,而我相信 Ghostty 實現了這個目標。

在深入細節之前,我也想說明,Ghostty 是由 Mitchell Hashimoto(也就是我!)發起的熱情專案。這是我利用閒暇時間投入心血的勞動成果。與專案互動時,請不要忘記這點。我會和可愛的貢獻者們一起盡力把它做得更好,但這對我們任何人都不是一份全職工作。

原生

「原生」的大意是:Ghostty 的設計目標,是讓它在你的桌面環境中擁有你所期望的外觀、手感與行為。

重要的是,Ghostty 在 macOS 與 Linux 上確實是原生應用程式。在 macOS 上,GUI 使用 Swift 撰寫,並採用 AppKit 與 SwiftUI。在 Linux 上,GUI 使用 Zig 撰寫,並採用 GTK4 C API1。這些 GUI 與一個由 Zig 撰寫的共享核心對接,我們稱之為「libghostty」。對於不熟悉 Zig 的人,它是一種編譯為原生機器碼的系統程式語言。

其中一部分是使用原生 UI 元件2來實作諸如分頁、分割視窗、錯誤訊息等功能,這與許多其他終端機模擬器形成對比——它們要麼使用文字 UI 與自訂控制項,要麼根本不支援這些功能。

另一部分是使用你已熟悉的標準鍵盤與滑鼠快捷鍵。Ghostty 在 macOS 與 Linux 上使用不同的預設綁定,以符合各平台的慣例。

還有一部分是 Ghostty 與執行平台獨有的系統能力進行整合。例如在 macOS 上,Ghostty 支援快速預覽(Quick Look)、力度觸控、macOS 安全輸入 API、重啟後內建視窗狀態還原等。這些都是 macOS 提供的原生 API,在 Linux 桌面環境中並沒有對應物。

功能豐富

Ghostty 力求提供一套對日常使用很有幫助的豐富功能。這些功能可分為兩類:終端機功能與應用程式功能。

終端機功能包括執行於終端機內部的程式所能使用的能力。例如,Ghostty 支援 Kitty 圖形協定、淺色/深色模式通知、超連結等等。這讓 Neovim、Zellij 等終端機應用程式能夠做到在其他終端機模擬器中無法完成的事情3。

應用程式功能則是更高層的、用於與終端機模擬器本身互動的功能。例如,Ghostty 支援原生分頁、分割視窗、macOS 上的下拉式終端機、隨系統深淺色模式切換主題等。

快速

Ghostty 追求快速。

效能是一個容易讓人爭論不休的話題,所以我唯一的主張是:Ghostty 的目標是與最快的終端機模擬器處於同一檔次。在某些基準測試中它更快,在另一些中它較慢,但無論如何都不應該有人說 Ghostty 慢。

「快」也是個含義豐富的詞,因為「快」對不同的人可能意味著不同的事。例如,下面只是「快」可能涵蓋的一部分內容:啟動時間、捲動速度、IO 吞吐量、控制序列吞吐量、幀率等等。

未來,我希望提供詳細的基準測試,並說明 Ghostty 在各種效能維度上的表現。對於首次公開發布,我只能說 Ghostty 的目標是如上所述的「快」。

我知道很多人不相信速度對終端機模擬器那麼重要,但 Ghostty 的新使用者反覆告訴我,速度提升對他們日常使用的影響有多麼明顯。希望你也這麼覺得。

libghostty

Ghostty 也以其架構而與眾不同。Ghostty 的核心是一個跨平台、相容 C ABI 的函式庫,名為 libghostty。libghostty 提供核心的終端機模擬、字型處理與渲染能力。

Ghostty 的 GUI 應用程式是 libghostty 的使用者。macOS 應用程式使用 Swift 撰寫,採用 AppKit 與 SwiftUI,並連結到 libghostty 的 C API。Linux 應用程式使用 Zig 撰寫,採用 GTK4 C API,同樣連結到 libghostty4。

這種架構實現了終端機模擬與 GUI 之間的清晰分離。正是這一關鍵架構,讓 Ghostty 得以實現其原生的目標。

這一架構也讓 Ghostty 顯得獨一無二,因為 Ghostty 專案同樣致力於讓其他終端機模擬器專案能夠建構在共享核心之上。這將催生一個更加多元的終端機模擬器生態系,讓它們可以專注於更高層的功能與 UI,而無需重新實作核心的終端機模擬。

Note

在首次公開發布時,libghostty 還不是穩定的 API,也尚未作為獨立的穩定函式庫發布。不過,它已經被 macOS 與 Linux 的 GUI 應用程式所使用。目標是穩定該 API,並在未來將其作為獨立函式庫發布。

Footnotes

  1. Linux 並不像 macOS 那樣有「原生」的 GUI 工具套件,但 GTK4 是最接近標準 GUI 工具套件的存在。最重要的是,我們不繪製自訂控制項,Ghostty 能很好地融入你的桌面環境。 ↩

  2. Linux 使用 GTK4 以及(可選的)Adwaita,因此 Ghostty 會看起來、用起來像一個 GTK4 應用程式,它是否「原生」取決於你的桌面環境以及你對「原生」的定義。另見註 1。 ↩

  3. 例如,Neovim 使用同步渲染來防止幀間撕裂。 ↩

  4. 由於 GTK4 應用程式使用 Zig 撰寫,它並非傳統意義上的「連結」。相反,它使用公開的 libghostty API,並作為單一的 Zig 編譯單元進行編譯。 ↩