法布里斯·贝拉(Fabrice Bellard)是编程世界的一位传奇人物。他的名字或许不为大众熟知,但其作品却构成了现代互联网基础设施的重要部分:从能够模拟各种硬件的 QEMU(云计算的基础之一),到被广泛使用的 FFmpeg 多媒体框架,再到曾经惊艳业界的 QuickJS JavaScript 引擎。
如今,他带着一个新的项目回归——MicroQuickJS。这个项目的目标不是创造,而是精简。它旨在从本已非常小巧的 QuickJS 引擎上,切除一切非核心的“赘肉”,打造一个能在资源极其有限的嵌入式设备上流畅运行的 JavaScript 运行时。
从“迷你”到“微观”:体积的维度碾压
QuickJS 在2019年发布时,以其仅数百KB的独立可执行文件却近乎完整支持 ES2020 标准而闻名。但 Bellard 认为这还不够。于是,MicroQuickJS 诞生了。
它的体积有多小?开发者 Simon Willison 做了一个直观对比:他搭建的 QuickJS 在线演示页面需要加载约 2.28MB 数据,而换用 MicroQuickJS 后,加载数据量骤降至 120KB。从“MB”级直接压缩到“百KB”级,这是数量级上的优势。它小到可以轻松嵌入物联网设备的芯片,或作为一个轻量级、低风险的代码沙箱快速启动。
一个迟来的“如果”:Redis 脚本语言的本可能选择
MicroQuickJS 的出现,在社区引发了关于技术选型的深度思考。Redis 创始人 antirez (Salvatore Sanfilippo) 看到该项目后感慨道:“如果2010年就有它,Redis 的脚本语言将是 JavaScript,而不是 Lua。”
这是一个重要的历史假设。当年选择 Lua,纯粹是基于技术现实:需要一个用 ANSI C 编写、小巧且快速的脚本引擎。当时的 JavaScript 引擎要么过于笨重,要么功能不全。antirez 也坦言自己并不喜欢 Lua 的语法,认为它给新手带来了不必要的学习摩擦。MicroQuickJS 的出现,仿佛为那个平行时空里的技术决策提供了一个完美的备选方案——一个兼具 JavaScript 生态普及性与嵌入式严苛要求的引擎。
限制创造“愉悦”:为特定场景而生的设计哲学
MicroQuickJS 的精髓不仅在于“小”,更在于“限”。前 JavaScriptCore(Safari 的 JS 引擎)工程师指出,MicroQuickJS 以他当年梦寐以求的方式限制了 JavaScript。在 Web 领域,为了兼容性,无法对语言进行如此大刀阔斧的简化。但在嵌入式等特定领域,甩掉历史包袱,施加合理的限制,反而能创造出更高效、更可控、更“令人愉悦”的运行时环境。这种设计哲学使其特别适合对安全性、确定性和资源消耗有严苛要求的场景。
潜在应用场景:安全沙箱与轻量级工具
社区对 MicroQuickJS 的快速探索,揭示了其潜在的应用方向:
- 安全代码沙箱:开发者立即尝试用它来构建运行不受信任代码(例如用户提交或大语言模型生成的代码)的安全沙箱。其极小的攻击面和可控性,使其成为动态代码安全执行方案的优秀候选。
- 轻量化爬虫解决方案:在 yt-dlp 等工具社区,有人探讨是否能用 MicroQuickJS 来解决 YouTube 等网站复杂的 JavaScript 反爬挑战。它有望为爬虫和自动化工具提供一把比完整 QuickJS 或 Node.js 更轻便、更快速的“钥匙”。
印证“定律”:JavaScript 的边界再次拓展
MicroQuickJS 的出现,再次印证了“阿特伍德定律”的蔓延趋势:“任何能够用 JavaScript 编写的应用,最终都会用 JavaScript 编写。”这条定律正从浏览器、服务器扩展到最后的边疆——嵌入式与极度受限的环境。MicroQuickJS 就像是为这场“殖民”打造的最小登陆艇,让“万物皆可 JS”的设想在硬件底层更进一步。
结语:纯粹与精简的力量
法布里斯·贝拉持续在他人认为的极限处探索。从模拟整个系统,到编写完整的 JavaScript引擎,再到将引擎精简至极致,他不断挑战着个人工程能力的巅峰。MicroQuickJS 不仅是一个技术产品,更是一个象征:在技术堆叠日益复杂的时代,纯粹、精简与本质的力量从未过时。它被种入嵌入式与边缘计算的土壤,其未来将生长出何种应用,值得整个技术社区期待。
|