Ghostty: Reflecting on Reaching 1.0

Mitchell Hashimoto

Ghostty:关于 1.0 的回顾

原文由 Mitchell Hashimoto 发布,订阅该博客

这不是一篇发布公告。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 软件基金会

共享核心由 Zig 编写、图形界面按平台分别实现的这种拆分方式也取得了成功。我得以轻松地为 Ghostty 融入原生平台体验,同时保持超过 90% 的代码共享。

内测社区的成员在参与项目贡献时也没有遇到障碍。我想这说明,尽管 Zig 是一门新兴的小众语言,但它对新贡献者来说依然容易上手、富有成效。这对项目的未来来说是个好消息。

一个意料之外的社区

围绕 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

最后,也是最重要的,我想感谢我的妻子。我们是新手父母,一边照顾新生儿,一边还要挤出时间做一个自己想做的业余项目,并不容易(即便有私测机制的缓冲)。她帮我挤出了开发 Ghostty 的时间,还耐心地听我絮叨字体渲染的细节(听着听着就睡着了)。

希望你会喜欢 Ghostty 1.0,并能感受到其中倾注的热爱与用心。期待与你一起走向未来!

脚注

  1. 第一年里我有几周不得不外出,所以确实错过了一些日子,但我已尽可能地陪伴在身边。

  2. 我不是说这是我发明的!只是这种做法并不常见。

  3. 我承认,我和管理员们封禁起来毫不手软。我敢肯定我们误封了一些不错的人。但考虑到 Discord 的规模,我们对闹事的人几乎没有容忍度。

本文章由 muse-spark-1.2-contributor 进行翻译

评论