隔离运行云工适配
此适配以 Cloudflare Dynamic Worker Loader 实公约之[隔离运行](../../../豫言操作系统接口/隔离运行/规范.文言.md)。诸术悉以豫言书于 云工宿主句柄桥之上,宿主惟增二通用原语:豫言_云工_隔离运行客按号取(同旧之 云工动态按号取,惟子工之模块易为文件式程序之入口)及其安全之式 豫言_云工_隔离运行客按号取安全(宿主之败归于值,不使 JS 之异越 Wasm 之界;适配惟用安全之式),并 豫言_云工_解Base64安全(atob)。
- 参与摘:豫言先验运行器名、范围(一至一百二十八字节、无控制之字)、摘要之式、程之 Base64 文与入之大,以宿主之
云工解Base64安全解程,复以云工密码摘要重算其 SHA-256 而较传入之摘,不符则抛「运行产物摘要不匹配」,Base64 非法或解后逾限则抛「运行产物无效」。 - 隔离体:
LOADER.get(范围:摘要, …):同范围同摘之运,共已编之子工;异范围永不共。子工由构建器书入动态资源.mjs之二模块成之:隔离运行客.mjs(入口)与编译宿主.mjs(浏览器编器宿主之内存文件系与执行模块),并程序 Wasm 与值桥 Wasm。无外发之网、无绑定、算时一千毫秒、子请求为零。旧构建器之产物缺此二模块者,取器败而转「隔离运行失败:缺少动态 Worker 模块源码:…」。取器之败(运行器名未授、绑定不存在、限额无效)一律经安全之式转为可捕之豫言异「隔离运行失败:…」,不中止当前之事。 - 调:入之 UTF-8 字节经
云工字节成句柄为 Request 之体(不经 JSON 转义),POST 于子工入口;子入口析而验args与files,运程序,惟收/数据/与/响应/之文(严格 UTF-8,至多二百五十六件、合一 MiB),返{ok,stdout,stderr,exitCode,files}。状态二百则豫言原样返其文;四百(入无效)与他状态转为豫言异「隔离运行输入无效」「隔离运行失败」;子工自抛异(如平台之算时限触发)、读响应败,亦转「隔离运行失败」。用毕悉释宿主句柄(成败二途皆释,一事之内连运数千次不竭句柄表)。 - 算时:算时之限一千毫秒,平台执之;宿主执行器之五秒墙钟察,惟程序回调宿主之检点时方行,今文件式之程无检点。本地 workerd 不执算时之限,死循环之程恒占算力,本地验测不得运之(云端由平台止之)。
- 所不为:不编、不存状、不供网;久存之数,客置于入之
files,复自出之files取之。
验:一致性验证/ 于真本地 workerd(Miniflare 之 workerLoaders)以豫言所编之文件式探针程序与云端项目核心 Wasm 运行十二项:返与文之筛、径之规整、程序自败乃返值、文之件数与字节数与 UTF-8 之限、诸参违规与摘要不符、未授之运行器、入违规与非 Wasm、Base64 之宽容、一事之内连运千次不竭句柄、跨范围相隔、第二真程序,并以假加载器核隔离体之标识、模块、限额与请求体。云仓之公开站点验收(应用/豫言云工作台/验收/公开站点豫言验收.mjs)另于真 workerd 以同一接口运站点之程序。