WebAssembly的二进制格式是被设计成可在不同操作系统与指令集上高效执行的,无论在Web或非Web环境中。
尽管执行环境是有条件的,本地的,不确定的,也不要向WebAssembly提供下述特性。有些情况下为了WebAssembly模块执行,也许不得不模拟一些宿主硬件或操作系统不提供的特性,让它们似乎被支持。这种情况将会导致糟糕的性能。
随着WebAssembly的标准化推进,我们期望将这些需求也能被固定下来。WebAssembly在设计之初就应该适配未来的平台。
WebAssembly可移植性假定执行环境提供下列特性:
WebAssembly没有指定任何API或系统调用,只有一个导入机制,需宿主环境定义一组可导入对象。Web环境中,方法通过由开放Web平台制定的Web APIs访问。非Web环境中可以执行一些基础的Web APIs,基础的非Web APIs(例如POSIX),或者自己发明一个。
C/C++级别的可移植性可用过面向一个基础API(例如POSIX)编码达成,也可以依赖编译时(通过#ifdef
)或运行时(通过 功能发现)和动态加载/链接)编译器和/或库向宿主环境的可用导入们提供的基础接口达成。