Ghostty:1.0 发布之际的回顾
这不是一篇发布公告。Ghostty 1.0 已经发布。你可以下载它,并在 Ghostty 官网上了解详情。这是我对这个项目的一些个人感想。
Ghostty 1.0 已经发布。
如果两年前有人告诉我,我会发布一款终端模拟器,我是不会相信的。我一直热爱终端,我的整个职业生涯都建立在开发终端优先的软件之上。但终端不是早已被解决的问题吗?我以前就是这么想的。
2022 年我开始这个项目,最初只是为了玩玩 Zig、做点图形编程、加深自己对终端的理解。我从没打算发布它。我不认为终端还有什么创新空间可言。我以为自己会在几个月里学到很多东西,然后就转向别处。
但随着开发的深入,我用不同的眼光看待其他终端。我看到了我不喜欢的取舍,看到了我想要的功能,看到了我可以改进的性能,也看到了停滞不前。市面上有许多非常出色的终端,如果它们适合你,你应该使用它们。但我想要一些不一样的东西,并觉得也许其他人也一样。
于是 Ghostty 诞生了。它并不完美,尚未完成,也不适合所有人。但它属于我。它体现了我的价值观,以及我对终端应有的样子的愿景。
想进一步了解 Ghostty 与其他终端的差异之处以及我对这个项目的愿景,请阅读《Ghostty 1.0 即将到来》一文。
私人内测
Ghostty 最具争议的部分就是私人内测。哦天哪,那个私人内测。我严重低估了它对这个项目的影响,无论好坏。
私人内测:好的一面
首先,为什么要进行私人内测?最主要的原因是为了管理我个人的精力带宽。我在第一个孩子出生前不久开始公开分享这个项目。我有发布软件的经验,深知随之而来的压力。我想避开那种压力,能够专注于家庭。我觉得我可以筛选出一小群感兴趣的用户来控制问题反馈的数量,只在我觉得可以承受时才扩大用户群。
另一个次要得多、但仍然存在的原因是,我觉得终端模拟器比大多数软件更非成即败。你无法发布一款只模拟 Vim 所需一半功能的终端模拟器。在低于某个功能门槛的情况下,你无法渐进式地改进一款终端模拟器。我希望确保首次公开发布就达到那个门槛。我希望人们能立刻把它投入高效、专业的日常使用。
在这两个方面,私人内测取得了巨大的成功(远超我的预期)。我得以管理好自己的精力并专注于家庭。在我女儿出生后的第一年里,每天早上都是我叫醒她,每个清醒时段我都陪她玩耍,每次看医生我都到场,每一个成长里程碑我都在场1。
内测社区也棒极了。他们耐心、包容、乐于助人。他们发现 bug、提供反馈,正是他们让 Ghostty 变得好太多了,远胜于没有他们的情形。我怎么感谢他们都不过分。
私人内测:坏的一面
其余的一切都是私人内测带来的意外后果。炒作、进不去的人的沮丧、某些人感受到的精英主义,等等。
我没有预料到会有炒作。有些人认为我说这话是在撒谎。我没有。我还不至于天真到以为私人内测和专属访问权原则上不会产生炒作。但我根本没想到会有很多人对一款终端模拟器感兴趣。我以为自己在为一个小众受众构建无聊的软件。不会有炒作的!
但我错了,后果是真实的。人们因为进不去而沮丧。人们感到被排斥在外。人们觉得我在装模作样制造炒作。等待名单增长到了超出我能放心放行的规模(鉴于我之前声明的优先事项)。
对此我很抱歉。我只能说,我并非有意让这一切发生。我加大了内测邀请的力度,尽量让更多我感觉能承受的人加入(好吧,稍微超出了那么一点)。我们在大约 5,000 名用户时结束了内测,当时 Discord 里共有 28,000 人。虽然不是我想要的开放比例,但也已经超过了我能应付的范围。
好消息是,Ghostty 现已公开,所有人都可以使用了!我希望我们能放下私人内测的负面部分,专注于未来。
炒作带来的另一个负面影响,是对 Ghostty 具有革命性的期待。它既是,也不是。Ghostty 与其他终端有着不同的目标和取舍。对于追求这些特性的人来说,Ghostty 令人耳目一新,做到了其他终端做不到的事情。但对另一些人来说,它只是一款终端。这也没关系。我希望你能找到适合自己的终端,我也不声称 Ghostty 就是终端的终极答案。
技术栈
Ghostty 采用了一套非常规的技术栈和架构:核心使用 Zig,GUI 则使用各平台特定的代码。关于技术栈的更多细节,可以在我最初关于 Ghostty 的演讲中找到。
两年后,我对这套技术栈和架构非常满意。我认为这对这个项目来说是正确的选择,但不止于此,我认为这种架构对许多项目来说都可能是正确的选择2。
用 Zig 编程绝对是一种享受。我每天都从编写 Zig 中获得乐趣,而且两年来这份乐趣丝毫未减。构建系统非常出色,社区很棒,核心维护者们才华横溢。我的热情众所周知,我也用实际行动支持了自己的言论——赞助了 Zig Software Foundation。
用 Zig 编写的共享核心与平台特定 GUI 之间的分离同样取得了成功。我得以毫不费力地将平台原生体验集成到 Ghostty 中,同时保持超过 90% 的代码共享。
内测社区为项目做贡献也没有遇到任何障碍。我认为这说明,尽管 Zig 是一门新兴的小众语言,新贡献者也能轻松上手并高效产出。这对项目的未来是个好消息。
一个意想不到的社区
围绕 Ghostty 形成的社区出乎意料,也很棒。
具体来说,我说的是私人内测社区。由于无法访问软件所带来的无组织性,公开社区有点像狂野西部。但私人社区有着专注和目标,参与其中是一种乐趣。
Ghostty 社区是一群对终端充满热情的人(当然!),同时也热衷于性能、设计、软件质量、把事情做对——并且是出于正确的理由。这是一群相处起来令人愉悦、合作起来令人舒心的人。这是一群我真正乐识的人,我期待继续与他们合作。
对我个人而言,说它意想不到还因为 Ghostty 社区中的大多数人也是初次接触我的作品。大多数人没有基础设施方面的背景,因此不熟悉我以前的工作。建立一个新社区很有趣,这让我想起了职业生涯早期,我为自己的第一个开源项目建立社区的那些日子。
1.0 之后的未来
Ghostty 1.0 已经发布,但对我来说这个项目远未完成。就连 1.0 也比我期望的要不完整!但我必须在某处划下界线,我认为 1.0 最终做得很好。
短期内,我想继续专注于“最好的现有终端”这一目标。我想补齐没能进入 1.0 的功能,修复仍然存在的 bug。我想确保 Ghostty 所构建的基础足够稳固,以支撑未来的创新。
在中期但不至于太长的期限内(2025 年之内),我想把重心转移到发布一个稳定且独立的 libghostty 上,供其他项目用来构建自己的终端模拟器前端。我认为 libghostty 是这个项目中最有前景的部分,关系到 Ghostty 能在技术社区产生的长期影响。
但无论如何,Ghostty 对我来说永远首先是一个热情驱动的项目。我做这个项目是因为它有趣,我要确保社区和我都不会忘记这一点。
致谢
我相信世上没有什么事是一个人完成的。Ghostty 也许是我一个人开始的,但我并不是一个人完成它的,一路上我要感谢许许多多的人。
Ghostty 内测社区的影响怎么强调都不为过。我在本文中已经说过,Ghostty 之所以能有如今丰富的功能和精致的打磨,要归功于内测社区对细节的关注和反馈。我衷心感谢每一位参与内测并帮助 Ghostty 成为今天模样的人。
Discord 管理员值得特别一提。他们辛勤工作,维持秩序,让社区专注于正确的事情。我每天都能看到他们的付出,他们努力营造一种让我能够专注、内测社区能够蓬勃发展的环境。我们只有不到 10 名管理员却要管理 30,000 人,考虑到实际情况,他们做得非常出色3。
最后,也是最重要的,我要感谢我的妻子。我们是第一次为人父母,一边照顾新生儿,一边还要挤出时间做我想做的副业项目,绝非易事(即使有私人内测这一点)。她帮我找到了开发 Ghostty 的时间,还耐心地听(听着听着睡着了)我絮叨字体渲染的话题。
希望你喜欢 Ghostty 1.0,并能感受到其中倾注的爱与用心。我期待看到我们从这里走向何方!
脚注
随机一篇博客