作者回复: 对的,应用在与wasi-libc编译时便会被替换成WASI的系统调用。然后虚拟机在解释执行Wasm字节码时就会使用虚拟机上的实现。
作者回复: 是的,这个是一种情况。但实际上对 WASI 接口的调用需要进行怎样的权限管理要依据不同的情况来看。比如最简单的用虚拟机执行一个 WASI 应用,一般可能只要在运行虚拟机时指定所需要的“权限”接可。还有一种场景就是在云上使用 WASI。这个时候可以把 WASI 应用比作 Actor,每个 Actor 都需要显式指出自己需要使用的系统权限(WASI 接口)。如果使用了没有声明的注册的权限,一般会被直接注销或者shutdown。因为这里的 Actor 更像是注册一个 service。原生应用就又是另外一种形式了。
作者回复: 主要还是提供了 WASI 这样的系统接口标准,以及像“基于能力的安全”这类安全模型。两个加起来在云原生领域的应用就会很广泛了,比如实现更轻量级的容器替代等等,比如:https://github.com/krustlet/krustlet。
作者回复: 有的,有很多开源的优秀 Wasm 运行时可以使用,它们大部分也都支持 WASI。这个我会在后面的文章中介绍哈。
作者回复: Node 好像已经部分支持 WASI 了,可以看看这里:http://nodejs.cn/api/wasi.html
作者回复: fopen 这种函数的功能实际上已经超过了“指令集”中单个指令的功能范畴。你可以对比一下,比如 x86 中可以用 mov 指令来移动数据,这是很“原子”(不考虑 micro-ops),很小的一个操作;而打开文件这种功能一般是由 OS 通过系统调用实现的,它是基于前面的 mov 等一系列指令的基础之上实现的。
作者回复: 没错!这两种都算抽象。
作者回复: 嗯是的,可以这么理解。