天文馆
在浏览器和Node.js运行未修改的x86-64 Linux命令行程序, 没有启动内核。 家具包装 陈列馆,一个用户模式 x86-64 Linux 仿真器编译到 WebAssembly (一个 Rust 的对应器) 罐/链接),并给出一个小 JavaScript API: 给它一个静态的 Linux 可执行文件 和一些文件, 运行它, 并拿回去 退出代码,输出和它所撰写的文件. 目标是让一个 CLI 错误 复制在网页上以-s形式运行.
- 试试看: 页:1 显示网站 有终端可以安装和运行 aube, bitchfork, Biome,纳米,jj 和 在您的 浏览器.
- 软件包 :
@aletheia-works/formicarium时间npm. - 联合国 页:1 站点 拥有指南(包括安装和命令API)和开发 节(运行时架构,设计决定),英文和日文.
状态
缩略语是年轻的(0.x),其API可能仍然会改变. 检查了什么 每一个变化 :
- Rust探测器(线,定时器,
UnixStream::pair, Rayon, 穆特克斯/ 康德瓦尔, 硬链接,符号链接,flock)通过Node.js,chromium,Firefox和WebKit. - Aube和pitchfork的多步骤会话输出与本地输出相同 x86-64 Linux (英语).
- 分布式JavaScript的行覆盖率保持在80%或以上.
它运行一个翻译器( 还没有 JIT), 因此重度程序比 当地人 CI 运行浏览器探测器、安装和命令检查 在 macOS 上以真实的 Safari 显示接受和显示网站接受; 其他浏览器套件使用 剧作家WebKit取而代之. 浏览器探测器以及安装和命令 在iOS 26 模拟器中还用 Safari 进行 iOS 的检查(尚未使用 iOS 27 safaridriver不能驱动;一个真正的iPhone没有测试.
安装
npm install @aletheia-works/formicarium
需要节点.js 24或后.
快速启动 (Node.js)
import { createSession } from '@aletheia-works/formicarium/node';
import { decodeUtf8 } from '@aletheia-works/formicarium';
// guestBytes: a static ELF64 little-endian x86-64 Linux executable (Uint8Array).
const session = await createSession({ cwd: '/work', home: '/home/guest' });
try {
const result = await session.run({ guest: guestBytes, args: ['--version'] });
console.log(result.exitCode, decodeUtf8(result.stdout));
} finally {
await session.dispose();
}
客人不包括在内。 将它们建为静态 musl 可执行文件, 或安装 它们来自安装 API (下方) 的目录 .
在浏览器中
导入 createSession 从 @aletheia-works/formicarium/browser。页面必须
能够使用 SharedArrayBuffer数字 :
- 服务页面
Cross-Origin-Opener-Policy: same-origin财务报告和审定财务报表Cross-Origin-Embedder-Policy: require-corp(或使用服务人员,例如: 固定主机服务员). - 服务于软件包
runtime/web/package-worker.bundle.js)和核心点 下级assets/paludarium/从您的页面来源. - 允许在
例如,内容安全政策
script-src 'self' 'wasm-unsafe-eval'; worker-src 'self'; connect-src 'self'。 。 。 .blob:无需.
这个 嵌入引导 有个完整的例子.
API会做什么
- 会议. A 类
Session在运行之间持有虚拟文件系统。 只有 工作目录和主目录持续存在;文件共享inodeId保持硬链接,同义链接保持链接,并保留模式。 运行使用之间listEntries, (中文(简体) ),readFile, (中文(简体) ),remove, (中文(简体) ),setCwd财务报告和审定财务报表reset· ;dispose关闭 永远的会面. - 运行. 每跑一跑就开工一回和一回新核心. 会话运行一
时事
BUSY(否则) 非零宾客通常会解决 带有退出代码和原始 stdout/stderr 字节;onOutput流出它们 顺序。 主机,核心,超时(默认为600 000 ms,timeoutMs(改为) 和取消(AbortSignal(b) 以下列方式拒绝失败:ExecutionError携带马厩code(所有代码均列于ERROR_CODES报告 错误代码 和部分产出。 当内部运行失败时 工人,他们cause链条名称原出错; 它保留 javaScript 引擎、 Web Assembly 或核心所撰写的信件, 仅限 其他错误的名称,因此,像 env 值这样的调用数据不包括在内。 A 类 失败或取消运行 离开文件系统原样。 作为互动嘉宾,stdin溪流 其标准输入和terminal: { columns, rows }制定标准 流出一个终端; 运行stdin没有默认超时。 在一个 浏览器, 在一个页面上运行所有会话, 以一个开始其核心 时间(每个人等到跑步开始之前, 开始它的客人,结束,或 开始 10 s), 等待数timeoutMs宾客 仍然同时运行. - 腾讯网. 客人没有网络 除非跑道经过
network: { allow: ['github.com:443'] }。然后可以打开 TCP 连接 仅用于所列目的地,仅用于解决所列名称 其它失败ENETUNREACH(一个没有来宾听众的回回地址) 与ECONNREFUSED),嘉宾可以自行回转服务. TLS在客人里面运行,所以给它CA 证书。 浏览器没有 TCP 套接字, 因此浏览器运行也需要network.relay: { url, protocols? },例如@aletheia-works/paludarium-wasm/relay服务; 没有它失败UNSUPPORTED_ENV. Node.js在给出时使用中继器. - 核心资产. 在核心开始之前, 被钉住的帕鲁达姆版本和
每个核心文件的SHA-256都经过核对
assets/paludarium/build-info.json(单位:千美元)ASSET_LOAD如果丢失或更改,CORE_INIT如果核心无法启动). 节点.js 装入已检查的字节 一个私人目录。 浏览器在检查后从它的 URL 中加载核心, 所以 服务来自你信任的来源的资产. - 来宾与目录.
validateGuest检查客人的字节并构建 资料,createInstaller从固定目录中安装工具 检查的ELF或tar.gz下载,registerValidatedGuest登记a 已检查的来宾( e)runValidatedGuest运行它一次,fixtureToFsEntries检查会话开始的文件,以及createCommandSession运行一个命令行( e)ls, (中文(简体) ),cat, (中文(简体) ),cd, (中文(简体) ),rm -rf, (中文(简体) ),cp, (中文(简体) ),mv, (中文(简体) ),install <tool>,或已安装的工具,在NAME=value环境任务)无外壳. A 类 在命令会话中以名称运行的已注册工具, 每个来宾都会找到 它作为/usr/bin/<tool>。安装createInstaller写入不输出, 因此一个页面可以在工具齐备之前 用户任意类型 。 见 安装 API 财务报告和审定财务报表 命令 API。 。 。 .
限制
- 来宾必须是静态的x86-64 Linux ELF可执行文件.
validateGuest财务报告和审定财务报表 安装还拒绝超过128个米B的来宾. - 来宾只作为被允许目的地的TCP客户进入网络, 通过浏览器中的继电器。 客人也可以服务于TCP和交换UDP ; 其他 UDP 仅访问名称.
- 核心的内存被封为1GB.
- 每次运行都从新文件系统开始;只有工作目录和 家目录结转.
如何运作
运行时间分为公共API,每个运行的工人,来宾输入/输出
和一个单元, runtime/core.ts,它知道模拟器的核心。 核心内容
本身就是 @aletheia-works/paludarium-wasm npm 包, 钉入精确
版本并运入 assets/paludarium/见
运行时架构
编辑 结构决定。 。 。 .
捐款
见 捐款额 建立、测试和拉动请求,并跟踪 行为守则。 。 。 . 如本报告所述,私下报告脆弱性 安全政策。 。 。 .
许可证
阿帕奇许可证2.0. 捆绑的帕鲁迪尔核也是Apache-2.0;见
THIRD_PARTY_NOTICES.md 编辑
核心许可证。 。 。 .