There's a lot of complexity in using WebAssembly, but I thought this article did a good job of focusing on one specific point of confusion: why there are multiple compile targets, and what the difference between emscripten and WASI are.
clang --target=wasm32
That's it, you target WASMPeople somewhere decided that it was too easy and went ahead to bloat everything with Emscripten, WASI and the like
Here is all you need to know to target WASM: https://schellcode.github.io/webassembly-without-emscripten
The only target for WASM is the browser, everything else is just bloat and a waste of energy