Ghostty: 反思1.0版本的发布
摘要
Mitchell Hashimoto 反思了他用 Zig 构建的终端模拟器 Ghostty 达到1.0版本的过程,讨论了项目的起源、成功但富有争议的内测版,以及他对这款终端的愿景。
暂无内容
查看缓存全文
缓存时间: 2026/05/16 03:40
# Ghostty:达至1.0版本的反思
来源:https://mitchellh.com/writing/ghostty-1-0-reflection
本文并非发布公告。Ghostty 1.0 已经发布。你可以前往 Ghostty 官方网站(https://ghostty.org/)下载并了解详情。本文是对该项目的一些个人反思。
Ghostty 1.0 正式发布了。
如果两年前你告诉我,我会发布一款终端模拟器,我绝不会相信。我一直是终端的爱好者,我的整个职业生涯都围绕着开发优先面向终端的软件。但终端这个领域不是已经解决了吗?我曾经就是这么认为的。
我于 2022 年启动这个项目,初衷只是想玩玩 Zig、做点图形编程、并加深对终端的理解。我从未想过要发布它。我并不认为这里面还有什么创新空间。我只想花几个月时间学点东西,然后就继续前行。
但当我真正动手之后,我开始以不同的眼光看待其他终端。我看到了自己并不喜欢的权衡取舍,看到了自己想要的功能,看到了可以改进的性能,也看到了停滞不前。现在市面上有很多**优秀**的终端产品,如果它们能满足你的需求,那你就应该使用它们。但我想要一些不同的东西,而且我想也许其他人也会有同样的想法。
于是 Ghostty 诞生了。它并不完美,尚未完成,也不适合所有人。但它是属于我的作品,它反映了我对终端应有的价值观和愿景。
想了解更多关于 Ghostty 如何区别于其他终端、以及我对项目的愿景,可以阅读《Ghostty 即将到来》这篇文章(https://mitchellh.com/writing/ghostty-is-coming)。
## 内部测试版
Ghostty 最具争议的部分当属内部测试版。噢,这个内部测试版。我大大低估了它对这个项目带来的影响——无论是好是坏。
### 内部测试版:好的一面
首先,为什么采取内部测试?主要原因是为了管理我个人的精力。我开始公开分享这个项目时,我的第一个孩子即将出生。我曾有过发布软件的经验,知道随之而来的压力有多大。我想避免那种压力,能够专注在家庭上。我觉得自己可以筛选一小群感兴趣的测试用户来限速问题反馈,等到感觉舒适时再逐步扩大用户群。
第二个原因(次要得多)是,我觉得终端模拟器比大多数软件更趋向于“要么能用,要么不能用”。你不能发布一个只模拟了一半 Vim 所需功能的终端模拟器;也不能在不达到一定功能阈值之前对终端模拟器进行增量改进。我希望确保第一个公开发布版本能达到那个阈值,让人们能够立即高效专业地使用它。
在这两点上,内部测试版是**巨大的成功**(远远超出了我的预期)。我能够控制自己的精力,专注于家庭。在女儿出生的第一年里,我每天早上都把她唤醒,在每个她清醒的时间段陪她玩耍,参加了每一次医生预约,见证了她每一个成长里程碑[1]。
而且测试社区**非常棒**。他们耐心、善解人意、乐于助人。他们发现 bug、提供反馈,**让 Ghostty 变得比没有他们会好得多**。我对他们感激不尽。
### 内部测试版:不好的一面
其他一切都是内部测试带来的意外后果:炒作、无法进入测试的人的挫败感、以及一些人感觉到的精英主义等等。
我没有预料到这种炒作。有人说我在说谎,但并非如此。我并非天真到认为“内部测试”和“独占访问”在**原则上**不会引发炒作。但我觉得,对一个终端模拟器感兴趣的人应该不会很多。我以为自己在为小众受众打造一款“无聊”的软件。根本不会有炒作!
但我错了,后果也确实存在。有人因为无法加入而沮丧,有人感到被排斥,有人觉得我在故作姿态以制造炒作。等待名单变得越来越长,甚至超出了我认为适合邀请的人数(考虑到我先前设定的优先级)。
对此我感到抱歉。我只能说,这并不是我有意造成的。我逐步增加了测试邀请数量,尽量让尽可能多的人参与进来——甚至已经稍微超出了我的舒适区。最终,测试结束时,Discord 上有大约 28,000 人,而测试用户大约有 5,000 人。虽然这个访问比例并非我所期望的,但也超出了我能处理的范围。
好消息是,Ghostty 现在已经公开,所有人都可以使用了!我希望我们可以把内部测试阶段的负面影响抛在身后,专注于未来。
**炒作的另一个负面影响是,人们对 Ghostty 抱有“革命性”的期待。** 它既是又不是。Ghostty 有着与其他终端不同的目标和权衡。对于那些寻找这些特性的人来说,Ghostty 是一股清流,做到了其他终端做不到的事情。但对其他人来说,它只是一个终端。这也没关系。我希望你能找到适合自己的终端,我也不声称 Ghostty 是终端的终极形态。
## 技术栈
Ghostty 采用了非传统的技术栈和架构:核心部分用 Zig(https://ziglang.org/)编写,GUI 部分则使用各平台特定的代码。关于技术栈的更多细节,可以参考我最初关于 Ghostty 的演讲(https://mitchellh.com/writing/ghostty-and-useful-zig-patterns)。
两年后,我对这个技术栈和架构感到非常满意。我认为对这个项目来说是正确选择,而且我觉得这种架构对许多其他项目来说也可能是个好选择[2]。
Zig 用起来非常愉快。我每一天写 Zig 都感到**有趣**,这种乐趣在两年来丝毫未减。它的构建系统很棒,社区令人惊叹,核心维护者才华横溢。我的兴奋之情众所周知,而且我也用实际行动支持了 Zig 软件基金会(https://mitchellh.com/writing/zig-donation)。
将共享核心(Zig 编写)与平台特定 GUI 分离的做法也很成功。我能够无缝地将**原生平台体验**(https://gpanders.com/blog/ghostty-is-native-so-what/)融入 Ghostty,同时保持超过 90% 的代码是共享的。
测试社区的成员也能毫无困难地为项目做贡献。这显示出,尽管 Zig 是一门新兴、小众的语言,但它对新贡献者来说非常平易近人且富有成效。这对项目的未来来说是一个很好的信号。
## 社区
围绕 Ghostty 形成的社区出乎意料,也非常棒。
具体来说,我指的是内部测试社区。公开社区由于缺乏正式访问软件的结构,显得有些混乱。但内部社区有明确的焦点和目标,参与其中非常愉快。
Ghostty 社区是一群对终端(当然)、性能、设计、软件质量充满热情的人——“把事情做对”并出于正确的原因。这是一群相处起来很愉快、乐于协作的人。我非常喜欢与他们交流,也很期待继续合作。
对我个人而言,这也意义非凡,因为大多数 Ghostty 社区成员也是**第一次接触我的工作**。他们大多没有基础设施背景,因此对我以前的作品并不熟悉。建立一个新的社区很有趣,让我回想起职业生涯早期围绕第一个开源项目建立社区的日子。
## 1.0 之后的未来
Ghostty 1.0 已经发布,但这个项目对我而言远未结束。甚至 1.0 版本,也不像我希望的那样完整!但我必须在某个地方划下一条线,而且我认为 1.0 已经很出色了。
短期内,我想继续专注于实现“最好的现有终端”(https://mitchellh.com/writing/ghostty-is-coming)这个目标。我想完善那些未能在 1.0 中集成的功能,修复仍然存在的 bug。我想确保 Ghostty 的基础足够坚实,为未来的创新做好准备。
在不远的将来(2025 年内),我想把重点转向发布一个稳定且独立的 `libghostty`(https://ghostty.org/docs/about#libghostty),让其他项目可以用它来构建自己的终端模拟器前端。我认为 `libghostty` 是 Ghostty 在未来对技术社区产生长期影响最具前景的部分。
但无论如何,Ghostty 首先永远是我个人的热情项目。我开发这个项目是因为它有趣,我想确保社区和我都不要忘记这一点。
## 致谢
我相信世上没有一件事是独自完成的。我可能是一个人启动了 Ghostty,但并不是独自完成了它。一路上有太多人需要感谢。
Ghostty 测试社区的影响怎么强调都不为过。我在本文中已经说过,但 Ghostty 之所以如此功能丰富、打磨精良,完全归功于测试社区的细致关注和反馈。我非常感激每一位参与测试并帮助 Ghostty 成为今天这个样子的人。
Discord 版主们值得特别感谢。他们**辛苦**地维持秩序,让社区专注于正确的事情。我每天都能看到他们的努力,为我创造一个能够专注工作的环境,让测试社区得以蓬勃发展。我们只有不到 10 位版主管理着 30,000 人,在如此情况下他们做得非常出色[3]。
最后,也是最重要的,我要感谢我的妻子。我们是第一次做父母,在照顾新生婴儿的同时,还要兼顾一个我想挤出时间做的业余项目,绝非易事(即使有内部测试版这个策略)。她帮助我找到了开发 Ghostty 的时间,并且耐心地听我喋喋不休地讲字体渲染(然后渐渐入睡)。
希望你喜欢 Ghostty 1.0,并感受到其中倾注的热爱和用心。我很期待看到我们未来能走多远!
1. 第一年我不得不离开了几周,因此确实错过了一些日子,但我尽可能多地陪伴在她身边。↩(https://mitchellh.com/writing/ghostty-1-0-reflection#user-content-fnref-2)
2. 我并不是说我发明了这种架构!但这种事情并不常见。↩(https://mitchellh.com/writing/ghostty-1-0-reflection#user-content-fnref-1)
3. 我承认,我和版主们经常挥舞禁言大棒。我相信我们确实误踢出了一些好人。但考虑到 Discord 的规模,我们对那些行为不当的人容忍度很低。↩(https://mitchellh.com/writing/ghostty-1-0-reflection#user-content-fnref-3)
相似文章
Ghostty 1.0 即将到来
Ghostty 1.0 是一款面向 macOS 和 Linux 的开源终端模拟器,将于 2024 年 12 月以 MIT 许可证公开发布,旨在成为现有终端的替代品,追求最快、功能最丰富且原生平台体验。
Ghostty 即将离开 GitHub
Mitchell Hashimoto 宣布,由于持续的中断和挫败感,Ghostty 终端模拟器项目将离开 GitHub,此前他已有18年日常使用经历。
Libghostty 即将到来
Mitchell Hashimoto 宣布了 libghostty 的计划,这是一个可嵌入的终端模拟库,首先推出 libghostty-vt,这是一个从 Ghostty 中提取的零依赖终端序列解析器。
我们重写了 Ghostty GTK 应用程序
Mitchell Hashimoto 详细介绍了 Ghostty 的 GTK 应用程序重写,以完全拥抱来自 Zig 的 GObject 类型系统,从而提高了稳定性、功能和内存安全性,并通过 Valgrind 验证。
欢迎Ghostty子系统维护者
Mitchell Hashimoto宣布为开源终端模拟器Ghostty新增八位子系统维护者,并阐述了子系统治理模型及项目扩展目标。