Ghostty:回顧邁向 1.0 之路
這不是一篇版本發布公告。Ghostty 1.0 已經推出。你可以在 Ghostty 官網上下載並閱讀相關資訊。這篇文章是我對這個專案的個人回顧。
Ghostty 1.0 已經推出。
如果兩年前有人告訴我,我會發布一款終端機模擬器,我一定不會相信。我一直是終端機的愛好者,整個職涯都在打造以終端機為核心的軟體。但終端機不是早就被解決的問題了嗎?那時我是這麼想的。
我在 2022 年啟動這個專案,初衷只是想玩玩 Zig、做一些圖形程式設計,並加深對終端機的理解。我從未打算要發布它。我不認為這個領域還有什麼創新的空間。我以為自己會在幾個月內學到很多,然後就轉向別的東西。
但隨著投入越多,我開始用不同的眼光看待其他終端機。我看到一些我不喜歡的取捨,看到了我想要的功能,看到了可以改進的效能,也看到了停滯不前。市面上已經有許多非常出色的終端機,如果它們適合你,就應該繼續使用。但我想要不一樣的東西,也覺得或許其他人也有同感。
於是 Ghostty 誕生了。它並不完美,也尚未完成,更不是為每個人而設計。但它是我的作品。它反映了我的價值觀,以及我對終端機應有樣貌的想像。
想進一步了解 Ghostty 如何與其他終端機做出區隔,以及我對這個專案的願景,請閱讀〈Ghostty 1.0 即將到來〉一文。
封閉測試
Ghostty 最具爭議的部分就是封閉測試。唉,那個封閉測試啊。我遠遠低估了它對專案造成的影響,無論是好的還是壞的。
封閉測試:好的一面
首先,為什麼要做封閉測試?最主要的原因是為了掌控我個人的時間與精力。我在第一個孩子出生前不久開始公開分享這個專案。我有發布軟體的經驗,也深知隨之而來的壓力。我想避開那些壓力,好好專注在家人身上。我覺得可以先篩選一小群有興趣的使用者來控制問題回報的數量,等我覺得狀況合適再逐步擴大使用者規模。
次要但遠沒那麼重要的原因是,我覺得終端機模擬器比起大多數軟體,非成即敗。你無法推出一款只能模擬 Vim 所需一半功能的終端機模擬器。在功能未達到一定門檻之前,也無法以漸進的方式改進終端機模擬器。我想確保第一次公開發布就能達到那個門檻,讓大家能立刻在實際工作與專業場景中有效率地使用它。
在這兩個層面上,封閉測試取得了巨大的成功(遠超我的預期)。我得以掌控自己的步調,專注於家庭。在女兒出生後的第一年,我每天早上叫她起床,在她每次清醒的時間陪她玩,參加了每一場健康檢查,見證了每一個重要的里程碑1。
而測試社群的表現更是令人驚豔。他們耐心、體諒又樂於助人。他們找出錯誤、提供回饋,而且他們讓 Ghostty 變得比沒有他們時好上太多。我對他們的感謝難以言表。
封閉測試:不好的一面
其他的一切,都是封閉測試帶來的非預期後果。炒作、無法加入者的挫折感、部分人感受到的菁英主義等等。
我沒有預料到那樣的熱度。有些人覺得我在這麼說時是在說謊,但我沒有。我並非天真到認為封閉測試與限量體驗原則上不會製造話題。但我真的不覺得會有多少人對終端機模擬器感興趣。我以為自己在為小眾族群打造無聊的軟體,根本不會有話題!
但我錯了,而且後果是真實的。人們因為無法加入而感到沮喪,覺得被排除在外,甚至覺得我是故意裝模作樣來炒作。等候名單的人數膨脹到超出我能安心開放的範圍(考量到我先前表明的優先順序)。
對此我感到抱歉。我只能說,這並非我的本意。我盡量加快了測試邀請的步調,想在自己能承受的範圍內(其實還稍微超出了一點)讓盡可能多的人加入。到測試結束時,我們在當時擁有 28,000 人的 Discord 社群中約有 5,000 名測試使用者。這個開放比例並未達到我理想中想讓大家參與的程度,但已經超過我所能負荷的上限。
好消息是,Ghostty 現在已經公開,人人都能使用!我希望我們能把封閉測試帶來的負面影響拋在身後,一起展望未來。
熱度帶來的另一個負面影響,是大家期待 Ghostty 具有革命性。說是也是,說不是也不是。Ghostty 與其他終端機有著不同的目標與取捨。對於追求這些特性的人來說,Ghostty 帶來一股清新的空氣,做了其他終端機做不到的事。但對其他人而言,它就只是一個終端機。這也沒關係。我希望你能找到適合自己的終端機,我也從未宣稱 Ghostty 是終端機的終極解答。
技術堆疊
Ghostty 擁有非典型的技術堆疊與架構:以Zig 作為核心,並為圖形介面撰寫各平台原生的程式碼。更多關於技術堆疊的細節,可以在我當初介紹 Ghostty 的演講中找到。
兩年後的今天,我對這套技術堆疊與架構非常滿意。我認為這對這個專案而言是正確的選擇,更重要的是,我認為這樣的架構對許多專案來說也可能是正確的選擇2。
使用 Zig 的過程絕對是一種樂趣。我每天寫 Zig 都感到愉快,而且這份樂趣在兩年來絲毫未減。它的建構系統非常出色,社群也很棒,核心維護者更是才華洋溢。我的熱情眾所皆知,我也以實際行動支持,贊助了 Zig Software Foundation。
將以 Zig 撰寫的共用核心與各平台原生的圖形介面分開的做法,也取得了成功。我能夠輕鬆地將原生平台體驗整合進 Ghostty,同時保持超過 90% 的程式碼共用。
測試社群在參與專案貢獻時也沒有遇到什麼困難。我認為這顯示了儘管 Zig 是個新穎且小眾的語言,對新貢獻者而言仍然容易上手且具生產力。這對專案的未來而言是個好消息。
意料之外的社群
圍繞著 Ghostty 形成的社群出乎意料,也令人驚豔。
具體來說,我指的是封閉測試社群。由於無法實際使用軟體,公開社群的狀態有點像是蠻荒西部,缺乏秩序。但私密的封閉社群則有著明確的焦點與目標,能成為其中一分子是件令人愉快的事。
Ghostty 社群是一群熱愛終端機(當然!)的人,同時也熱衷於效能、設計、軟體品質,以及把事情做對而且是為了正確的理由而做。這是一群相處與合作起來都令人愉快的夥伴,也是我很樂於結識、並期待繼續共事的一群人。
對我個人而言,這個社群之所以意料之外,也在於 Ghostty 社群中的大多數人對我的作品都是全新的。他們大多沒有基礎架構的背景,因此也不熟悉我過去的作品。打造一個全新的社群很有趣,也讓我想起職涯早期圍繞著第一個開源專案建立社群的日子。
1.0 之後的未來
Ghostty 1.0 已經推出,但對我而言,這個專案還遠未完成。甚至 1.0 的完成度都還不如我期望的那樣!但我必須在某個地方畫下一條線,而我認為 1.0 的成果非常棒。
短期內,我想繼續專注於「最佳現有終端機」這個目標。我想補齊那些未能納入 1.0 的功能,並修復仍然存在的錯誤。我想確保 Ghostty 所立足的基礎足夠穩固,以支撐未來的創新。
在中長期、但不會太久(2025 年內),我想將重心轉向發布一個穩定且獨立的libghostty,讓其他專案可以用它來打造自己的終端機模擬器前端。我認為 libghostty 是這個專案中最有前景的部分,對 Ghostty 在技術社群中能產生的長遠影響最為關鍵。
但無論目標是什麼,Ghostty 對我而言始終會是一個熱情所在的專案。我投入這個專案是因為它很有趣,我也希望我和社群都不會忘記這一點。
致謝
我相信這世上沒有任何成就是單靠一人完成的。我或許獨自啟動了 Ghostty,但並非獨自完成它,一路上也有太多人值得我致謝。
Ghostty 測試社群的影響怎麼強調都不為過。我在這篇文章中已經提過,但 Ghostty 之所以能如此功能豐富且精緻,都要歸功於測試社群對細節的關注與回饋。我由衷感謝每一位參與測試、幫助 Ghostty 成就今日樣貌的人。
Discord 的管理員們值得特別致謝。他們努力維持秩序,讓社群專注在正確的事情上。我每天都能看到他們為了營造一個讓我能專心、讓測試社群得以蓬勃發展的環境所付出的努力。我們不到 10 位管理員要管理 30,000 人,在這樣的情況下,他們的表現非常出色3。
最後,也是最重要的,我想感謝我的太太。我們是新手父母,要在照顧新生兒的同時,還要為我想撥空投入的 side project 找到時間,絕非易事(即使有封閉測試的安排)。她幫我找到了投入 Ghostty 的時間,也耐心地聽我(聽到睡著)絮絮叨叨地講述字型渲染的細節。
希望你會喜歡 Ghostty 1.0,並能感受到其中傾注的愛與用心。我很期待看到我們接下來的旅程!
註腳
隨機一篇部落格