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.