Welcoming Ghostty Subsystem Maintainers2 months agohttps://mitchellh.com/writing/ghostty-subsystem-maintainersGhostty项目新晋了八名子系统维护者,这是该项目自创建以来首次进行此类晋升。该项目采用子系统维护者模式,由专家负责特定领域,如终端仿真、Linux/GTK、字体、渲染和Shell集成。所有新维护者均参与过内部测试,并在数月或数年间做出了重大贡献。维护者有权自主制定路线图、分类问题以及合并其子系统内的拉取请求,无需强制审查或投入特定时间。为防止代码腐化,可能移除长期不活跃的维护者,强调信任与自愿参与原则。
Ghostty Devlog 0022 months agohttps://mitchellh.com/writing/ghostty-devlog-002Ghostty的非技术更新包括Mitchell Hashimoto的公开演讲以及社区为建立网站、Discord和测试候补名单所做的努力。Ghostty将是免费且开源的,很可能采用GPLv3许可证,测试版测试者将参与许可证的决策。macOS上的非原生全屏功能由Thorsten Ball实现,需要从SwiftUI切换到AppKit以管理窗口生命周期,从而改进了框架,为未来功能奠定了基础。Linux上的字体模糊和伪影问题被追溯到涉及浮点数转整数转换的填充计算错误,通过使用整数表示大小并对填充值进行向下取整来修复,确保像素完美渲染。这次错误修复引发了对代码库的审计,揭示了另一个舍入错误,并强调了使用适当的数据类型以防止抗锯齿问题。
Ghostty Devlog 0032 months agohttps://mitchellh.com/writing/ghostty-devlog-003Ghostty now has a public Discord server for community discussions and beta program expansion.A talk on Ghostty's implementation will be given at Zig Showtime on September 5th.Keyboard input handling is complex due to non-standard layouts, dead keys, and Unicode sequences; Ghostty now supports these cross-platform.Ghostty implements the Kitty Keyboard Protocol and xterm modified keys, enabling more keybindings in terminal programs.Linux/GTK improvements include single instance mode, primary clipboard support, automatic shell integration, and better keyboard layout handling.Ghostty is now a top-tier GTK Linux terminal, though still behind macOS, with thanks to beta testers for feedback.
Talk: Introducing Ghostty and Some Useful Zig Patterns2 months agohttps://mitchellh.com/writing/ghostty-and-useful-zig-patternsGhostty 是一个用 Zig 编写的新终端模拟器,旨在结合速度、丰富功能以及原生平台集成。本次演讲重点介绍了 Ghostty 中使用的 Zig 模式,包括编译时接口、数据表和类型生成,以实现零成本抽象。Ghostty 目前处于封闭测试阶段,可访问源代码,计划于 2024 年以 GPL(可能)许可免费开源发布。在 macOS 上,Ghostty 使用 Swift 实现原生 UI(AppKit、SwiftUI),而 Linux 使用 GTK,核心逻辑用 Zig 编写。主要特性:快速渲染(压力测试下 480-500 FPS)、多种字体样式、分屏、真彩色、Kitty 图形协议以及原生错误消息。未来工作包括 GUI 设置、iCloud 同步、性能改进、内存优化、模糊测试以及扩大测试版计划。该项目旨在创新超越传统模拟器的终端功能,例如进度条、拖放以及安全特性。
We Rewrote the Ghostty GTK Application2 months agohttps://mitchellh.com/writing/ghostty-gtk-rewriteGhostty的GTK应用被重写,完全从Zig融入GObject类型系统,从而实现了更丰富的功能、更高的稳定性和可维护性。此次重写通过将Zig拥有的Config结构包装在引用计数的GObject中,解决了内存管理错误,简化了配置重载和GUI更新。广泛使用Valgrind来验证每一项更改,识别内存泄漏和未定义访问,尤其是在C API边界处。Zig自身的代码库在C API边界处仅有一个泄漏和一个未定义访问,凸显了Zig的内存安全特性。重写使得能够使用现代GTK UI技术如Blueprint,从而更容易添加GUI功能,例如标题栏标签和动画铃铛边框。Valgrind捕获了微妙的问题,如不正确的GObject WeakRef清理,这可能导致罕见的崩溃,强调了跨C API时工具的必要性。新的GTK应用现在是源代码的默认构建,并将包含在Ghostty 1.2版本中。
Ghostty Is Now Non-Profit2 months agohttps://mitchellh.com/writing/ghostty-non-profitGhostty现在是一个非营利项目,由Hack Club(一家注册的501(c)(3)组织)提供财政赞助。财政赞助允许Ghostty在Hack Club的免税地位下运营,由Hack Club处理合规、捐赠、会计和治理事宜。非营利结构确保Ghostty保持免费和开源,防止‘抽地毯’(rug pull),并在法律上约束项目服务于公共利益。从技术上讲,Ghostty没有任何变化;MIT许可证和项目目标保持不变。Ghostty现在可以在美国接受可抵税捐赠,计划用于补偿贡献者、支持依赖项以及资助社区活动。所有财务交易通过Hack Club Bank上的公开账本透明化;适用的知识产权已转让给Hack Club。Mitchell Hashimoto仍担任项目负责人,不从捐赠中获取个人利益;所有资金用于项目和社区。Hack Club收取捐赠额的7%以覆盖行政成本,Mitchell的家人将直接向Hack Club捐赠15万美元。鼓励捐赠以支持Ghostty的可持续发展和开源使命。
Finding and Fixing Ghostty's Largest Memory Leak2 months agohttps://mitchellh.com/writing/ghostty-memory-leak-fixGhostty 存在严重的内存泄漏,运行10天后内存使用量高达37 GB。该泄漏是由滚动修剪优化引起的,该优化在重用非标准页面时没有调整底层内存分配的大小,导致内存从未被释放。修复方案是在修剪过程中不再重用非标准页面,而是正确销毁它们,并从内存池中分配一个新的标准尺寸页面。该泄漏由 Claude Code 的命令行界面触发,该界面产生大量多码位字素输出,迫使 Ghostty 频繁使用非标准页面。该漏洞是通过 macOS 上的虚拟内存标签识别的,这使得将泄漏与 PageList 结构关联起来变得容易。Ghostty 使用 PageList 数据结构,其中标准页面使用内存池,非标准页面使用 mmap;泄漏发生是因为元数据错误地将大页面标记为标准页面。已添加了一个测试来重现该泄漏并防止未来回归。
Ghostty Is Leaving GitHub2 months agohttps://mitchellh.com/writing/ghostty-leaving-githubMitchell Hashimoto,GitHub 长期用户(自 2008 年 2 月起),宣布 Ghostty 将离开 GitHub,因为频繁的宕机影响了工作,令人沮丧。他对 GitHub 有深厚的情感依恋,18 年来每天将其用于工作、爱好和热情,包括启动如 Vagrant 等项目,曾希望加入 GitHub。尽管热爱该平台,他记录了每日的宕机(例如 Actions 宕机)阻碍了生产力,使其“不再适合严肃的工作”。离开决定基于改进所需的实际结果,而非承诺;Ghostty 将逐步迁移到另一个提供商(商业或 FOSS),同时在 GitHub 上保留只读镜像。个人项目和其他工作暂时留在 GitHub;重点是由于基础设施依赖(如问题、PR 和 Actions)对 Ghostty 社区的影响。