macFUSE 是如何工作的?
更新时间
macFUSE 是给 macOS 添加 FUSE 文件系统支持的软件包。它的核心工作方式是:拦截 macOS 上的文件系统操作,把这些操作转发给一个运行在用户空间的 FUSE 文件系统进程,由该进程返回数据或执行动作。这个进程可以是应用、后台服务,或任何用户空间进程。理解这一点,就能理解 macFUSE 为什么比传统内核文件系统更容易开发、更安全,也更容易调试。
拦截与转发:macFUSE 的核心机制
传统文件系统运行在内核空间,开发和调试门槛高,出错可能影响整个系统。macFUSE 把文件系统逻辑移到用户空间,内核侧只负责把文件操作交给对应的 FUSE 进程。
一次典型的读取过程可以这样理解:
- 某个应用对挂载点发起文件读取。
- macFUSE 拦截该操作,并转发给负责这个文件系统的用户空间进程。
- 该进程从自己的数据源取回内容——可以是本地存储、网络资源、内存,或几者的组合。
- 数据沿原路返回给发起读取的应用。
对上层应用来说,它只是在访问一个普通路径;对开发者来说,文件系统逻辑就是一个普通用户空间程序,可以用平时开发 macOS 应用的工具、调试器和库来处理。
开发者可用的 API
macFUSE 提供多套 API,覆盖不同开发习惯:
| API | 用途与特点 |
|---|---|
| libfuse2 / libfuse3 | Linux FUSE 接口的参考实现,让大量现有 FUSE 文件系统可以直接在 macOS 上使用;libfuse 还包含支持 macOS 特有功能的可选扩展 |
| macFUSE.framework | 面向对象的文件系统 API,用于以 macOS 编程方式开发文件系统 |
由于 FUSE API 在 macOS、Linux、Windows(通过第三方实现)上都有,文件系统代码可以跨平台复用,改动很少甚至无需改动。第三方语言绑定或封装还允许用 Python、Java、C#、JavaScript、Go、Rust 等语言开发。
FSKit 后端:不再依赖内核扩展
macFUSE 正在走出对内核扩展的依赖。借助新的 FSKit 后端,受支持的文件系统可以在 macOS 26 上完全运行于用户空间。对安装者来说,这意味着不再需要重启进入恢复模式来启用 macFUSE 内核扩展支持,安装更快,设置过程也更连贯。
需要注意适用条件:这一变化针对“受支持的文件系统”和 macOS 26;其他系统版本或未适配的文件系统,仍需按原有方式处理内核扩展相关设置。
终端用户与开发者分别得到什么
- 终端用户:安装 macFUSE 软件包后,就能使用第三方 FUSE 文件系统。但 FUSE 文件系统本身需要单独安装,macFUSE 只提供运行支持。
- 开发者:使用上述 API 构建文件系统,内容来源不受限制;相比内核文件系统,开发更快、运行更安全,调试手段也与普通应用一致。
常见卡点
- 以为装了 macFUSE 就有可用文件系统——实际上具体文件系统要另行安装。
- 在 macOS 26 上仍按旧流程寻找内核扩展启用步骤——受支持的文件系统已可通过 FSKit 后端在用户空间运行。
- 跨平台复用代码时忽略 macOS 特有扩展——libfuse 的 macOS 扩展是可选的,按需启用即可。