什么是 Ruffle:2026 年 Flash 的开放替代方案
先回答一个问题:Flash 真的死了吗?
Adobe 官方在 2020 年底停止了 Flash Player 的支持,同时 Chrome、Edge、Firefox、Safari 全部移除了 NPAPI 插件接口。但这只意味着旧的闭源插件不能用了——Flash 的内容(.swf 文件)本身并没有消失,过去 20 年里全球有成千上万的 Flash 小游戏、动画、互动站点存档可查。
Ruffle 就是在这个时间点上出现的:用现代技术栈,从头重写了一个能理解 .swf 格式的运行时。
它和旧 Flash Player 有什么关系?
没有任何二进制或代码上的继承关系。 Ruffle 团队没有反编译 Adobe Flash Player,也没有剽窃任何闭源实现。它是一群对 Flash 格式非常熟悉的开发者,参照公开规范(以及大量逆向 .swf 的工作),在 Rust 里重新实现了 Flash Player 的核心逻辑。
这一点很重要——因为旧 Flash Player 是出了名的安全漏洞大户,过去十年里几乎每周都有新的零日漏洞被发现。Ruffle 选择 Rust 这门语言就是为了从底层避免 C/C++ 时代那种内存安全问题:
「Using the guarantees of Rust and WASM, we avoid the security pitfalls Flash was known for.」
——官方主页
为什么用 Rust?
Rust 的所有权系统保证了编译期就能拦住空指针、野指针、缓冲区溢出这类 Bug。这些恰恰是旧 Flash Player 里出现最多、危害最大的漏洞类型。Ruffle 团队的定位很清晰:一个 Flash Player 模拟器,不只是能跑,还要在现代浏览器里安全地跑。
编译产物有两个主要分支:
- 桌面版:编译成本地原生可执行文件,用 wgpu-rs 直接调显卡,性能最好
- Web 版:编译成 WebAssembly,塞进一个 JavaScript 壳,任何支持 WASM 的现代浏览器都能跑
- 浏览器扩展版:在 Web 版基础上增加一层 DOM 拦截,自动把页面上旧的
<object>/<embed>Flash 标签替换成 Ruffle
四种用法一图看懂
| 你的场景 | 选这种 |
|---|---|
| 本地下载了一堆 .swf 想直接打开 | 桌面独立版 |
| 想在老 Flash 网站里继续玩(自己不改网站) | 浏览器扩展 |
| 自己有网站,想让访客自动获得 Flash 能力 | 网站嵌入一行 CDN |
| 自动化跑、想在服务器里批处理 | Headless / Exporter / Scanner |
它不是万能的
Ruffle 是模拟器,不是 100% 完整的替代品。兼容性分两大块:
- AVM 1(AS1 / AS2,Flash Player 9 之前的内容):绝大多数能直接跑,官方文档里给出的数字是语言 99%、API 82%
- AVM 2(AS3,2006 年以后的内容):还在快速完善中,官方给出的数字是语言 90%、API 82%
你手里如果有某个具体的 .swf 跑不起来,可以对照「已知不支持特性」那一节先自查,或者在 GitHub Issue Tracker 里报 bug。