← 返回信息流
AI 资讯Hacker News·6 小时前

Mitchell Hashimoto 访谈:Ghostty 与 Zig

原标题:Interview with Mitchell Hashimoto about Ghostty and Zig

速览

Mitchell Hashimoto 在采访中分享了他对终端模拟器 Ghostty 的设计理念,并探讨了使用 Zig 语言开发的优势。Ghostty 旨在提供高性能与跨平台支持,而 Zig 则因其简洁与底层控制能力受到关注。这次访谈展现了 Hashimoto 对新项目的技术思考与未来规划。

AI 深度解读

背景

Mitchell Hashimoto 是 Vagrant、Packer、Consul、Terraform、Vault、Nomad、Waypoint 等知名开源项目的缔造者,曾共同创立 HashiCorp。离开 HashiCorp 后,他将重心转向终端模拟器 Ghostty 和身份验证工具 Vouch,并开始深入探索 Zig 语言。本次访谈中,他分享了对终端生态、Zig 语言以及开源社区的思考。

核心内容

为什么人们喜欢采访你?
Hashimoto 认为每次采访的视角都不同:有人关注他从软件工程师到企业创始人的心态转变,有人关心他在 HashiCorp 的产品工作,也有人关注 Ghostty。本次访谈没有明确的议程,双方都无需推销任何东西,因此更为纯粹。

为什么对终端感兴趣?为何选择做 Ghostty?
他花了约 15 年构建 CLI 应用程序(非如今的 TUI),期间无意中学会了颜色控制、光标移动等。离开 HashiCorp 后,他意识到自己的技术能力因疏于练习而变得迟钝,希望重拾三方面能力:

  1. 前 AI 时代的 GPU 编程;
  2. 桌面/单节点系统编程(过去在分布式系统上花太多时间,网络延迟主导了性能,无需关注缓存局部性或向量操作);
  3. 玩转 Zig 语言。

他最初只是想搞懂终端模拟器的工作原理——了解其组件但缺乏整体理解,这恰好能结合 GPU、桌面和 Zig 三项目标。他的初衷是用 Ghostty 运行 vim 和编译器,让 Ghostty 自己构建自己,然后弃用。但随着深入探索终端生态,他发现没有现成终端能满足他想要的“快速、功能丰富、原生跨平台”。他将原型分享给 Discord 好友,好友们表示每天实际使用并请求分享给更多人。Ghostty 的 Discord 频道最初只是朋友群聊,后来被重新用作项目社区。他本不想公开项目,因为其公众身份会带来过多不必要的关注,因此长期运行私有测试版。

如何进一步推动终端发展?
Hashimoto 并不支持将终端推向极端。终端可以作为应用平台(类似浏览器、Java 运行时),但浏览器、桌面和基于文本的单空格网格应用各有优势。文本应用应当快速实现、易于交互、安全模型清晰。终端应用的自然特性比其它范式更适合组合(compose)。大部分 CLI 工具(除了 TUI)都提供了类似函数调用的机制(UNIX 的“一件事”哲学)。Neovim 和 AI 工具提供了更多的命令行标志。更好的终端应用意味着更好的自动化和脚本能力。

他期望让终端成为一个“特殊领域”的应用平台。当前 PTY 带内信令(非结构化字节流 + 转义序列)是重大障碍。Nushell 生态尝试通过附加层修复,但需要根本性改进。很多人不喜欢微软生态,但 PowerShell 在结构化数据处理方面做得很好。

对非传统终端 API 的看法?
他认为当前存在多个大型应用平台(浏览器、Emacs、Apple 生态、Microsoft 生态、Android、游戏机),各平台的框架(Web 的 DOM+JS API、Apple 的 AppKit/Cocoa/SwiftUI、Windows 的 Win32/WinUI、Linux 的 GTK/Qt)已经做了多年探索。当有人提出“需要更好的剪贴板访问方式”(如支持图片、多种 MIME 类型)时,他倾向于查阅各平台的剪贴板管理器文档,而不是凭空自创。他目前还没有引入任何自定义协议。

两个迫切想改变的协议:

  1. 多屏协议:当前终端只有主屏(main screen,带回滚)和备屏(alt screen,全屏无回滚)。他设想一个 n-screen API,允许在后台创建无限数量的屏幕,可以叠加不同网格尺寸的屏幕,由终端模拟器处理换行、选择、鼠标事件路由。甚至可以将一个屏幕指定为独立窗口,由终端模拟器在网格外渲染——例如让 Neovim 的标签页变成原生窗口标签。这个基础层能解决许多问题。

  2. 按钮协议:当前有鼠标协议通知点击某个网格单元格,但只能接收当前屏幕的事件,无法处理滚动历史中的点击。现有超链接(OSC 8)支持类似功能。他设想类似 OSC 8 的按钮协议:点击某个预定义区域会向程序发送消息。用户可以在历史回滚中仍然点击按钮(例如打开某个配置文件)。这主要影响主屏应用(如 Claude Code,一种流行 AI 工具)。一旦内容进入历史,用户就失去了打开文件、应用内链接等能力。

这些想法会不会导致范围蔓延,相当于重做整个用户空间?
他确实尝试过用 Wayland 完全替换 PTY 协议。从某种角度看,终端就是一个窗口服务器,管理窗口和窗口中的小部件。他研究 Wayland 是为了让 Ghostty 在其上运行得更好,并认为 Wayland 在本地桌面和窗口渲染方面是很好的协议,但最终放弃了这一想法。

终端的问题是当前没有标准制定机构。有旧的官标规范,但过去 20 年标准化基本跟随最流行终端的实现,形成了混乱的功能集合,没有实体推动有品味的愿景。他不知道正确的路径是什么:或许可以创建一个全新的基于文本的应用平台(不再叫终端),然后在其上添加终端翻译层来兼容旧应用。

如何在这些想法与用户的日常需求之间取得平衡?
他公开强调开源维护者对用户没有义务——OS 许可证的第一行是“按原样提供,不提供任何保修”。但他愿意努力构建好软件,因此确实对修复问题、改进软件有责任感。有时候他会一整天只处理 issue 解决别人的问题;有时候他会完全忽略 issue、讨论和 PR,专注于自己想要的愿景。他说:“你可以在天空中建造一座完美的城市,但回到地面会发现恐怖和苦难,所以有时需要清理现实。”

关键要点

  • Hashimoto 离开 HashiCorp 后重新聚焦技术:GPU 编程、桌面/单节点系统、Zig 语言。
  • Ghostty 最初只是一个学习终端原理的实验项目,因其快速、功能丰富、原生跨平台而得到实际使用。
  • 他认为终端不应被极端化为通用应用平台,而应保留文本应用的独特优势:快速实现、易于组合、安全模型清晰。
  • PTY 的带内信令是根本问题,需要改进,例如使用结构化数据(参考 PowerShell)。
  • 他提出了两个新协议:
    • 多屏协议(n-screen):支持无限个后台屏幕、独立网格尺寸、可渲染为独立窗口。
    • 按钮协议:在历史回滚中也能响应点击,类似 OSC 8 超链接的扩展。
  • 曾考虑用 Wayland 完全替换 PTY,但最终放弃。
  • 终端生态缺乏标准制定者,现状是“遵循流行实现”的混乱演进。
  • 开源维护者应对用户没有法律义务,但他个人努力在“愿景推进”与“现实问题修复”之间动态切换。

意义与影响

Mitchell Hashimoto 的思考反映了终端生态面临的根本性挑战:三十多年来的兼容性负担与僵化协议限制着创新。Ghostty 作为一个新兴终端模拟器,其 n-screen 和按钮协议愿景可能为现代终端应用带来全新的交互范式——例如将 TUI 组件与原生窗口系统融合,或让滚动历史中的交互变为可能。这与 Web 早期从静态文档到动态应用的演进相似。同时,Hashimoto 强调借鉴现有桌面平台(如 Apple、Windows、Linux)的成熟框架,而非凭空发明,这为终端协议的设计提供了更务实的路径。他对 Zig 语言的实践也展示了这一新兴系统编程语言在构建高性能桌面应用中的潜力。整体上,这次访谈不仅是对 Ghostty 方向的澄清,更是对整个终端社区未来标准化和 API 设计的一次深刻反思。

查看原文 →alexalejandre.com