开发者生态
morning
Libghostty 1.0
摘要
libghostty-vt 1.0 is here. libghostty is a portable, high-performance C library for terminal emulation, extracted directly from the core of Ghostty. The 1.0 release means both the library itself and t...
the
libghostty
and
terminal
that
year
has
Ghostty
release
are
2026-11-07
1 阅读
约7分钟阅读
mfiguiere
字号:
libghostty-vt 1.0 就在这里。 libghostty 是一个用于终端仿真的可移植、高性能 C 库,直接从 Ghostty 核心提取。 1.0 版本意味着库本身和 C ABI 现在都很稳定。一年多前,我写过 libghostty 即将到来。当时,Zig 模块刚刚被合并,C API 还不存在,除了 Ghostty 之外没有人是消费者。如今,C API 是一个完整的终端仿真器,它在数百种免费和商业产品中为数百万人运行在生产环境中,并且它具有真正的、强制执行的 ABI 稳定性策略。这篇文章是关于我们如何走到这一步以及 1.0 的实际含义的。 1 谁已经在使用它 自从 2022 年启动 Ghostty 项目以来,我被问到的最常见的问题是“为什么?”。我已经在 libghostty 即将发布的帖子中回答了这个问题,所以如果您愿意,请随意阅读。今天,我宁愿通过展示 libghostty 已经产生的广泛行业影响来回答这个问题。我相信这有力地证实了它的存在。一年前,我使用 JediTerm (JetBrains IDE 中的终端仿真器)中的一个错误作为示例来说明为什么终端仿真很难正确执行。一年后,JetBrains IDE 中的终端现在在 libghostty 上运行。每个 IntelliJ、PyCharm、GoLand 等用户现在都有一个由 libghostty 驱动的终端。根据 JetBrains 的报告,活跃用户超过 1250 万。 Neovim 有一个已批准的拉取请求,用 libghostty-vt 替换 libvterm 。除此之外,它还解决了一个长达 10 年的关于调整大小时回流滚动的问题。维护者正在等待合并之前的标记版本,以便发行版可以单独打包依赖项,今天的版本应该可以实现这一点。 KDE 开发人员正在尝试基于其构建的 Konsole 替代品。 Vercel 的 Turborepo 使用它在 TUI 中渲染任务输出。 devenv 使用它来驱动 shell。 Antithesis 使用它来模糊 TUI 程序,并在 btop 和其他程序中发现了真正的错误。 Ghostel 将其引入 Emacs。 Ghostty-web 是具有 Xterm.js 兼容 API 的 WASM 构建。 OrbStack 等商业产品嵌入了它。一系列新的终端和“代理”编码工具(例如 herdr 和 cmux)都是在其上构建的,而不是编写另一个模拟器。有 Rust、Go、JavaScript、Swift、Python、.NET、Elixir、Dart、Java 等社区绑定,awesome-libghostty 列表跟踪了一百多个项目。如今,使用由 libghostty 提供支持的终端的人数比使用 Ghostty 应用程序的人数要多得多。 libghostty 的影响远大于“只是”一个终端仿真器。 2 ABI 稳定性 1.0 意味着 libghostty-vt 遵循语义版本控制并具有严格的 ABI 兼容性承诺,以便跨发行版和操作系统的打包者可以放心地打包 libghostty-vt,并且程序开发人员可以放心地动态链接它。除了提供有用的功能之外,我相信高质量和持久的 C 库的标志是 ABI 稳定性。因此,从一开始,我就从我喜欢使用的 C 库中汲取灵感,并设计了 API,使其具有强大、稳定的 ABI,以便将来进行添加。每个对象都是一个不透明的句柄。您可能读取或写入的数百个值会通过一小组枚举键控的 getter 和 setter,因此我们可以轻松添加新值,而无需引入新符号。具有与较旧的 libghostty 链接的较新标头的程序将获得 GHOSTTY_UNSUPPORTED 结果,而不是崩溃或未定义的行为。我们拥有的少数非不透明结构体带有它们的大小,以便以后可以附加字段,或包含保留的填充。在 C 标准允许的范围内,枚举在每个编译器上都固定为 int。我们的 CI 执行我们的 ABI 政策。每项更改都会使用 libabigail 对照 Linux 上提交的基线以及 macOS 和 WebAssembly 上的黄金类型清单进行检查。在 ELF 平台上,每个导出的符号也都有版本控制,因此动态加载器拒绝按名称加载不匹配的库,而不是稍后以某种神秘的方式失败。打包 除了 ABI 稳定性之外,1.0 版本还带来了适当的构建工具、tarball、依赖项许可清单、文档等,使每个主要操作系统和发行版都能够通过标准官方工具打包 libghostty-vt。 Libghostty 有自己的发布周期,与 Ghostty 应用程序分开。它有自己的 tarball,仅包含 libghostty 所需的文件和依赖项,从而导致更小的尺寸和更简单的许可验证和兼容性。每个版本都会发布一个签名的源 tarball 以及一个配套依赖项 tarball,其中包含 Zig 自己的缓存布局中的每个 Zig 包,因此发行版可以完全离线构建库。该构建使用正确的 SONAME、标头、pkg-config 文件和 CMake 包配置来安装共享库和静态库,并支持 --prefix 、 DESTDIR 和 lib64 。调试信息由 d 保存
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱