- Published on
macOS中的扩展
- Authors
- Name
在 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 Extension、DriverKit,还是更少见的系统级扩展能力。
小结
可以把 macOS 扩展体系简单理解为:
- 早期主要依赖
Kext - 中间阶段开始引入
DriverKit - 现代方案更强调
System Extensions
这背后反映的是 Apple 一贯的方向:尽量减少第三方代码直接进入内核,把能力收敛到更安全、更稳定的系统接口里。