Ghostty 1.0 即将发布
经过近两年的开发和私下 Beta 测试1,我很高兴地宣布,Ghostty 1.0 将于 2024 年 12 月作为 MIT 许可证下的开源项目公开发布。
在这篇博客文章中,我想重申 Ghostty 项目的整体目标,并概述 1.0 版本的具体目标。我对 Ghostty 有着雄心勃勃的计划,但我也想让大家清楚地知道,发布首日能期待什么,以及未来还会有什么。
简而言之,Ghostty 1.0 的目标是成为 macOS 和 Linux 上现有终端模拟器的最佳即插即用替代品。Ghostty 将快速、功能丰富、拥有平台原生 GUI,同时是市面上最符合标准的终端模拟器。
最佳现有终端模拟器
这张幻灯片出自我在 2023 年 9 月的 Zig Showtime 演讲,最能概括我为什么要着手开发一个新的终端模拟器:

由于幻灯片设计的限制,所比较的终端模拟器数量有限,但更广泛的观点仍然成立:我认为现有的终端模拟器在速度、功能和平台原生 GUI 之间强加了一种不必要的取舍。2
有了 Ghostty,我的目标是打造一个快速、功能丰富、拥有平台原生 GUI,同时又是跨平台的终端模拟器。我相信 Ghostty 1.0 实现了所有这些目标。
这一目标聚焦于成为最佳现有终端模拟器。在这一目标下,Ghostty 1.0 并不试图在终端能做什么上进行创新,而是提供当今 macOS 和 Linux 上可获得的最佳单一终端模拟器体验3。
当然,Ghostty 并不完美,也不完整。我没有实现每个终端模拟器的所有功能,所以 Ghostty 仍然缺少很多功能。不过,我相信在我持续改进的过程中,Ghostty 能够满足大多数用户的需求。
快速、功能丰富、平台原生
在使用 Ghostty 之前,人们给我的最常见反馈是怀疑这些到底能带来什么不同。而在使用 Ghostty 之后,人们给我的最常见反馈是:他们没想到差异会这么大,已经无法想象回到从前了。
Ghostty 快速、功能丰富、平台原生究竟意味着什么?这三个方面都是庞大而复杂的话题,所以每个方面我只重点介绍几个关键点。
关于“快速”,我最近在 Systems Distributed 2024 上做了一个 5 分钟的闪电演讲,题目是 “Making a Terminal Emulator Really, Really Fast: Ghostty”(时间戳链接到 50:15)。它很好地概述了 Ghostty 在性能方面的思考,但由于只是闪电演讲,并不全面。
关于“功能丰富”,Ghostty 首要的目标是尽可能支持最广泛的终端应用程序。这意味着 Ghostty 支持的 xterm 转义序列比其他任何终端模拟器都多(xterm 本身除外)。Ghostty 还支持几乎所有现代终端规范,例如带样式的下划线、Kitty keyboard protocol、graphics protocol 等等。(虽然不是终端转义序列,但没错,Ghostty 确实支持连字!)
关于“平台原生”,Ghostty 在 macOS 上使用原生 GUI 工具包,在 Linux 上使用 GTK(如有 libadwaita 则一并使用)。这意味着 Ghostty 在两个平台上看起来、感觉上(而且实际上就是)一个原生应用程序。这与许多终端模拟器形成对比——后者只在创建窗口时才使用原生 GUI 工具包。
举一个平台原生的好处作为例子:Ghostty 拥有原生标签页、分屏、右键菜单、菜单栏、Dock 集成、输入法支持(表情键盘、听写等)、确认窗口、桌面通知、macOS 安全输入模式等等。
下面是一些 Ghostty 在 macOS 和 Linux 上的截图(两者都做了主题美化,但可能只用了几行配置),展示了平台原生的 GUI:


(两张图片均来自 Ghostty Discord 服务器公开展示频道中的社区成员)
首个发布版本将是 1.0
Ghostty 已经进行了近两年的私下 Beta 测试。截至撰写本文时,Ghostty 在 macOS 和 Linux 上拥有约 2,000 名测试者,其中大多数人一直在毫无问题地将 Ghostty 作为日常主要终端模拟器使用。
得益于 extensive 的私下 Beta 测试,Ghostty 的首个公开版本将是 1.0。这里不会有任何 ZeroVer!4
我进行 extensive 私下 Beta 测试的动机主要是自私的:我有了第一个孩子,我希望把与家人相处的时间置于构建功能或修复 bug 的外部压力之上。理论上,我可以无视这些噪音,但实际上我很了解自己,知道自己会因此分心,精神上也会不堪重负。
除了家庭因素之外,我还怀念软件“准备好了才发布”的时代。我喜欢想象,如果像 CompUSA 这样的商店还存在,Ghostty 1.0 会被装盒、塑封、摆上货架待售(同时也是免费和开源的)。
私下 Beta 测试带来的其他影响则出乎意料或并非有意为之。例如,我从没打算让 Ghostty 显得有排他性(坦白说,我根本没想到会有这么多人对终端模拟器感兴趣!),也从没打算通过私下 Beta 人为制造对 Ghostty 的炒作。如果你因此受到了负面影响,我向你道歉。
我对因这种做法而受到的批评之多、以及那些自认为仅仅因为我喜欢分享我的工作和进展就有权索取什么的 entitlement 之人的数量感到惊讶。与此同时,我也感谢那些数量更多、对我的做法表示支持和理解的人。
最后,感谢那些一直在使用 Ghostty 并提供精彩反馈的测试者。Ghostty 的稳定性之所以能够实现,正是因为有这一多元化的测试者群体愿意冒险使用一个早期版本——而终端模拟器往往是开发者工具链中至关重要的一环。
宏大的愿景
展望未来,Ghostty 在两个主要领域有着雄心勃勃的计划:libghostty 和终端应用程序功能。
libghostty 是驱动 Ghostty 的核心跨平台库。它以 Zig 和 C API 的形式提供,目前已可在 macOS 和 Linux 上运行。其目标是让一个庞大而多元的终端模拟器应用生态系统得以涌现,涵盖独立应用程序、编辑器中的嵌入式终端、基于 Web 的终端、新型终端多路复用器等等。
libghostty 的理念是:开发者可以专注于构建出色应用程序这项艰难的工作,同时免费获得快速、功能丰富、符合标准的终端模拟能力。在很多方面,我把今天的 Ghostty 描述为 libghostty 消费者的“参考实现”。
对于 Ghostty 1.0,libghostty 尚不被视为稳定,也不作为独立的公开 API 提供。不过,Ghostty 内部确实在使用 libghostty。Ghostty 1.0 之后的目标是让 libghostty 作为独立库发布,并将平台支持扩展到 macOS 和 Linux 之外,尤其是 WebAssembly。
除了 libghostty 之外,我还希望在终端内构建更多可供应用程序利用的功能。一些想法包括提高转义序列的安全性、支持更多现代输入方式(例如触摸手势、惯性滚动、绘图设备等)、允许应用程序提供原生上下文菜单等等。
扩展终端应用程序功能的目标,是让基于文本的应用程序对开发者更有吸引力去构建、对用户更有吸引力去使用。我相信基于文本的应用程序在软件生态系统中占有一个宝贵的利基,我希望帮助这个平台实现现代化。
这些是宏大而长期的目标,用以表明我对 Ghostty 有着更远大的愿景并正在为之努力。在短期内,我计划根据用户反馈和我自己的想法,按照“快速、功能丰富、平台原生”这一最初的整体目标,迭代地改进 Ghostty。有一些重要功能我很遗憾未能赶上 1.0 版本,但将在后续版本中推出。
财务与可持续性
我不想让这成为这篇博客文章的重点,但鉴于我作为创业者的背景以及人们对这个话题的普遍兴趣,我会简要谈谈 Ghostty 的财务和可持续性问题,以避免任何混淆或猜测。
Ghostty 对我来说是一个热情驱动的项目,我没有计划对该项目进行任何形式的商业化。如第一段所述,Ghostty 将作为 MIT 许可证下的开源项目发布。
就个人而言,得益于以往的成功,我有幸拥有财务自由,可以在没有任何经济压力的情况下从事像 Ghostty 这样的项目。我已多次公开表示,我把在 Ghostty 上的工作视为一种“技术慈善”;这既是回馈社会的一种方式,也让我得以满足自己的兴趣并获得乐趣。
与此同时,我确实希望 Ghostty 在没有我的情况下也能长期存续,我也希望能够潜在地为主要贡献者的工作提供报酬。为此,我和[目前私密的]社区正在探索非营利组织架构,以帮助确保 Ghostty 的长期可持续性。但这是一个长期目标,不会在 1.0 发布时实现。
十二月见
我期待着 2024 年 12 月 Ghostty 1.0 的公开发布。
两年多来,Ghostty 一直是我倾注巨大热情的项目:起初是我全职工作之余偶尔为之的副业,在我离职并迎来第一个孩子后,它成为了我的主要(但仍然是兼职性质的)关注点。
Ghostty 1.0 不会完美,但它的稳定性和功能集令我自豪,我认为它已经准备好与世界分享了。最重要的是,我希望人们能感受到我在 Ghostty 上倾注了多少爱与用心,也希望它能为他们的日常工作带来快乐(就终端模拟器所能做到的程度而言)。
👻
脚注
随机一篇博客