# Wasm Runtime of IC

**URL:** <https://forum.dfinity.org/t/wasm-runtime-of-ic/14564>\
**Category:** Developers\
**Created:** [July 27, 2022, 2:41pm UTC](https://forum.dfinity.org/t/wasm-runtime-of-ic/14564 "2022-07-27T14:41:25Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![0xyu5](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/0xyu5/32/12795_2.png) [@0xyu5](https://forum.dfinity.org/u/0xyu5)\
**Post date:** [July 27, 2022, 2:41pm UTC](https://forum.dfinity.org/t/wasm-runtime-of-ic/14564/1 "2022-07-27T14:41:25Z")

</div>

I am learning about Wasm and have a question.

- Is IC’s WebAssembly runtime WASI or IC’s own original one?
- If IC uses WASI, which does it use Wasmer or Wasmi?
- What does the target wasm32-unknown-unknown mean, and why are there so many different wasm targets?

Thanks.

---

<div class="post-metadata">

**Author:** ![jzxchiang](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/jzxchiang/32/2592_2.png) [@jzxchiang](https://forum.dfinity.org/u/jzxchiang)\
**Post date:** [July 28, 2022, 5:08am UTC](https://forum.dfinity.org/t/wasm-runtime-of-ic/14564/2 "2022-07-28T05:08:56Z")

</div>

IC doesn’t use WASI, as canisters don’t have access to filesystems. Instead, they call the IC’s [System API](https://internetcomputer.org/docs/current/references/ic-interface-spec/#system-api).

The wasm runtime running on nodes is wasmtime.

---

<div class="post-metadata">

**Author:** ![AdamS](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/adams/32/5248_2.png) [@AdamS](https://forum.dfinity.org/u/AdamS)\
**Post date:** [August 2, 2022, 1:08pm UTC](https://forum.dfinity.org/t/wasm-runtime-of-ic/14564/3 "2022-08-02T13:08:56Z")

</div>

wasm32-unknown-unknown means ‘headless’ WASM - i.e. it does not know about any external APIs, and is thus limited to libcore and liballoc functionality. The only reason Rust exposes libstd in this context is because the synchronization primitives can all be used as zero-cost wrappers, since wasm has no threads. There are multiple wasm32 targets for the same reason there are multiple x86\_64 targets - multiple environments for libc backing for libstd (e.g. wasi), and multiple applicable linkers (e.g. emscripten). Target triples, in general, go arch-dist-os-abi.
