Published on

macOS中的扩展

Authors
  • Name
    Twitter

在 macOS 里,“扩展”并不是单一概念。
从历史上看,Apple 一直在把高权限、容易影响系统稳定性的能力,逐步从内核空间迁移到更安全的用户空间。

如果只看这条演进主线,大致可以分成三个阶段。

1. Kext:早期的内核扩展

早期 macOS 广泛使用 Kext(Kernel Extension,内核扩展)。
它运行在内核空间,能力很强,但代价也很明显:

  • 崩溃时更容易影响整个系统
  • 调试和维护成本高
  • 安全风险更大

后来 Apple 持续收紧了 Kext 的使用条件,例如要求签名,并借助 SIP(System Integrity Protection)限制系统关键目录的修改。

2. DriverKit:把驱动移到用户空间

macOS 10.15 Catalina 开始,Apple 引入了 DriverKit
它允许开发者把一部分原本需要写在内核里的驱动,迁移到用户空间执行。

这样做的主要好处是:

  • 降低内核崩溃风险
  • 提升系统整体安全性
  • 更符合 Apple 后续的平台收敛方向

这也是 macOS 扩展体系从“高权限直连内核”走向“更受控扩展模型”的关键一步。

3. System Extensions:更现代的扩展方式

在新一代 macOS 中,更常见的是 System Extensions
它不是单指某一种功能,而是一类更现代、受系统管理的扩展机制。

常见类型包括:

  • Driver Extensions 用于部分硬件驱动能力
  • Network Extensions 常见于 VPN、流量过滤、内容过滤
  • Endpoint Security 常见于安全审计、终端防护、行为监控
  • File Provider 常见于云盘与文件同步类应用

这类扩展通常由系统统一管理,权限模型也比传统 Kext 更严格。

为什么 Apple 要这样演进

核心原因可以概括成三点:

  • 安全性
  • 稳定性
  • 可控性

Kext 太强,也太危险。
System Extensions 和 DriverKit 的目标,不是让开发者“什么都做不了”,而是把高风险能力放进更可控的边界内。

对普通开发者意味着什么

如果你只是开发普通的 macOS 应用,大多数场景并不需要自己去写系统扩展。
但如果你的应用涉及下面这些能力,就经常会接触到扩展体系:

  • VPN
  • 网络抓包或流量过滤
  • 安全软件
  • 云盘同步
  • 特定硬件驱动

这时你就需要先判断:
当前需求属于 App Sandbox、普通系统权限、Network ExtensionDriverKit,还是更少见的系统级扩展能力。

小结

可以把 macOS 扩展体系简单理解为:

  • 早期主要依赖 Kext
  • 中间阶段开始引入 DriverKit
  • 现代方案更强调 System Extensions

这背后反映的是 Apple 一贯的方向:尽量减少第三方代码直接进入内核,把能力收敛到更安全、更稳定的系统接口里。