Lifo:在一个浏览器标签页里塞进一套"类 Linux"环境
阅读时间: 大约 6 分钟
Lifo:在一个浏览器标签页里塞进一套”类 Linux”环境

“打开网页就能跑代码”这件事,过去靠 WebContainers 这类把 Node 编译成 WASM 的重型方案——要下载几十 MB、等好几秒。Lifo 走了一条完全不同的路:不做 WASM、不做模拟器、不依赖任何原生二进制,而是用 TypeScript 干净室(clean-room)重写一套 POSIX/Node API。核心卖点是冷启动亚毫秒、体积 0.3MB。本文基于 lifo.sh 官网分析。
一、它是什么
官网标题写得很克制:“A tiny Linux-like OS in TypeScript”,并明确 disclaimer——“Not a Linux distro”。它不是真正的 Linux 发行版,也不是虚拟机:
- 面向浏览器、Node、serverless 函数;
- 自带 shell、coreutils、Node.js 兼容层、包管理器;
- 跑在虚拟文件系统与虚拟网络上,全部在一个标签页里;
- 一个 service worker 把 VM 内端口转成实时预览(live preview)。
npx lifo-sh定位场景:沙箱化 AI 生成的代码,或不经修改地跑 Vite、Expo、Supabase 的前端项目。
二、基准:冷启动与体积
官网给出的对比(与 StackBlitz WebContainers 同环境测量,越低越好):
| 形态 | 冷启动 | 体积 |
|---|---|---|
| Lifo(Node 进程内) | ~0.5 ms | 0.3 MB |
| Lifo(浏览器标签页) | ~27 ms | 0.3 MB |
| Lifo(独立二进制) | ~41 ms | 59 MB |
| WebContainers(浏览器) | ~6,600 ms | ~75–85 MB |
也就是说,浏览器内冷启动从约 6.6 秒压到约 27 毫秒——量级差了 200 多倍。
三、口径偏差:官网自己把话说得很明白
这是 Lifo 官网难得诚实的地方,值得整段引用式地转述:
- “这是适配度对比,不是跑分榜”:WebContainers 跑的是真实 Node 引擎的 WASM 构建(更全、更重);Lifo 是在 JS 里重写的兼容子集(更小)。所以它自己说 “read this as fit, not a scoreboard”。
- “像 Linux,但不是 Linux”:它是 POSIX 与 Node API 的 TypeScript 映射,能跑 shell、git、npm/pnpm、dev server、WASM 包(如 ffmpeg)、Agent 代码、CI,但跑不了原生 Linux 二进制。
- 隔离是 JS 级的,不是安全边界:官网原话 “its isolation is JS-level, not a security boundary”。这一点至关重要——它不能用来隔离不可信代码的恶意行为,只是一个运行环境。
四、架构
官网架构描述:Sandbox API 驱动一个类 Linux 内核——shell、coreutils、Node 兼容层、包管理器,架在虚拟文件系统与虚拟网络之上,全在一个标签页。sandbox.commands.run() 是入口,上面可挂 xterm 终端、你的应用或 AI Agent。所有 Linux/POSIX API 都映射到 JavaScript,无 WASM、无模拟器。
五、局限(结合官网与项目库点评)
- 不能跑原生二进制:这是硬伤——需要编译产物、需要系统级工具链的场景直接出局;
- JS 级隔离 ≠ 安全沙箱:不能当成虚拟机/容器替代品去跑恶意代码;
- 存储配额受限:浏览器虚拟文件系统(IndexedDB)有配额上限,项目库点评也点了这一点;
- Node 兼容是子集:不是完整 Node API,边缘行为可能与真实 Node 不一致;
- 对比图坐标轴是示意:官网自己说明冷启动与体积用了独立线性刻度、条形长度为示意,WebContainers 因 6.6 秒远超 ms 轴而”断尾”展示——看绝对值即可,别拿条形长度当比例。
六、适用 / 不适用
适合:
- 让 AI 生成的前端/脚本代码在浏览器里零延迟试跑、做预览;
- 教学、在线 demo、文档里可运行示例;
- 需要 serverless/边缘环境里毫秒级起一个类 Unix 运行时。
不适合:
- 需要运行原生二进制、系统工具链或长时间重任务;
- 把它当安全隔离来跑不可信/恶意代码;
- 需要完整 Node API 兼容、复杂原生 npm 依赖的生产构建。
七、它意味着什么
Lifo 的洞见很直接:浏览器本身已经是沙箱了,何必再套一层 VM? 用 TypeScript 重写一个够用的兼容层,换 200 倍的冷启动提升和 200 多倍的体积缩减。它不是要取代 Docker 或 WebContainers,而是切中了”AI 时代需要即时运行生成代码”这个新痛点——牺牲原生兼容性,换零延迟启动。能不能成,取决于兼容子集到底覆盖了多少真实前端工作流。