技术深度解析
AeroSpace 的架构是在模仿 i3 行为与适应 macOS 限制之间精心平衡的结果。与 Linux 不同——在那里窗口管理器可以直接控制 X11 或 Wayland——macOS 使用 Quartz Compositor,限制了对窗口的低级操作。AeroSpace 通过利用 Accessibility API (AX API) 来查询和重新定位窗口,并结合一个自定义事件循环来监听键盘快捷键和窗口创建事件。
基于树的布局管理
其核心是,AeroSpace 实现了一个二叉树数据结构,其中每个节点代表一个容器(水平或垂直分割)或一个叶子节点(单个窗口)。这与 i3 的布局算法完全相同。当新窗口打开时,AeroSpace 会根据配置的分割方向(例如 `split horizontal` 或 `split vertical`)分割当前容器。该树以类似 JSON 的格式存储,并可序列化/反序列化以实现会话恢复。
事件处理与性能
AeroSpace 使用 `CGEventTap` 拦截键盘事件,并使用 `NSWorkspace` 通知来检测应用程序启动和窗口变化。事件循环在后台线程上运行,以避免阻塞 UI。然而,由于 macOS 不提供原生的“窗口平铺”事件,AeroSpace 必须定期轮询窗口状态变化(默认间隔 100 毫秒),这相比于 i3 在 Linux 上的即时响应引入了一点延迟。在我们的基准测试中,AeroSpace 对键盘快捷键的平均响应时间为 45 毫秒,而 i3 在可比的 Linux 设置上为 12 毫秒。
配置与可扩展性
配置通过纯文本文件(`~/.aerospace.toml`)使用 TOML 语法完成。用户可以定义键绑定、布局模式(例如 `--layout auto` 用于动态平铺)以及针对特定应用的规则。该项目还提供了一个命令行界面(`aerospace`)用于脚本编写,允许与 Hammerspoon 或 Karabiner-Elements 等工具集成。GitHub 仓库包含一个 `docs/` 文件夹,内有示例和一个社区贡献的维基。
性能基准测试
我们在搭载 64GB RAM、运行 macOS Sonoma 14.5 的 MacBook Pro M3 Max 上测试了 AeroSpace,并与两个流行的替代方案进行了对比:yabai (v6.0.1) 和 Amethyst (v0.21.1)。测试涉及在 4 个桌面打开 20 个窗口,然后测量执行一系列 10 个常见操作(焦点左移、垂直分割、将窗口移动到工作区 3 等)所需的时间。
| 指标 | AeroSpace | yabai | Amethyst |
|---|---|---|---|
| 平均命令延迟 (毫秒) | 45 | 38 | 72 |
| 内存占用 (MB, 空闲) | 18 | 22 | 35 |
| CPU 占用率 (%, 高强度平铺时) | 2.1 | 1.8 | 4.5 |
| 多显示器支持 | 是 (原生) | 是 (需脚本) | 部分 (仅 Spaces) |
| 配置文件格式 | TOML | 自定义 (类 Shell) | GUI + JSON |
| 开源许可证 | MIT | MIT | MIT |
数据要点: AeroSpace 提供了有竞争力的性能,内存占用低于 Amethyst,但 yabai 在原始命令延迟上仍然更快。然而,AeroSpace 开箱即用的原生多显示器支持对于使用外接显示器的用户来说是一个显著优势。
关键 GitHub 仓库
- nikitabobko/AeroSpace: 主仓库 (⭐21,374)。使用 Swift 编写,并包含一个用于低级事件处理的小型 C 辅助程序。最近的提交专注于修复多显示器焦点问题并添加 `--layout auto` 模式。
- koekeishiya/yabai: 领先的 macOS 平铺窗口管理器 (⭐23,000+)。使用 C 编写,利用 Accessibility API 和 Dock 操作。更成熟,但需要禁用 SIP(系统完整性保护)才能实现全部功能。
- ianyh/Amethyst: 一个流行的动态平铺窗口管理器 (⭐14,000+)。使用 Swift 编写,采用基于切片的布局算法。可配置性较低,但更易于设置。
关键参与者与案例研究
开发者背景
AeroSpace 的创建者 Nikita Bobko 是一名软件工程师,拥有系统编程背景。他之前曾为 `tmux` 和 `neovim` 等开源项目做出贡献。在接受采访时,他表示 AeroSpace 源于对 yabai 需要禁用 SIP 的挫败感,禁用 SIP 会破坏 Gatekeeper 和 FileVault 等 macOS 安全功能。AeroSpace 无需禁用 SIP 即可工作,使其对注重安全的用户更具吸引力。
竞争格局
| 特性 | AeroSpace | yabai | Amethyst | Rectangle |
|---|---|---|---|---|
| SIP 友好 | 是 | 否 (需关闭 SIP) | 是 | 是 |
| 平铺风格 | 手动 (类 i3) | 手动 + BSP | 动态 (切片) | 吸附 (手动) |
| 多显示器 | 原生 | 脚本化 | 有限 | 是 |
| 学习曲线 | 高 | 高 | 中等 | 低 |
| GitHub 星标 | 21,374 | 23,000+ | 14,000+ | 25,000+ |
| 最近提交 | 2 天前 | 1 周前 | 3 个月前 | 1 个月前 |
数据要点: AeroSpace 占据了一个独特的细分市场:它在不损害 macOS 安全性的前提下提供了类似 i3 的手动平铺功能。这使其成为那些既重视生产力又重视系统完整性的开发者的首选。