Standalone mode will require WASI if it does things like logging. Wasm by itself doesn't have an API for that, so we need *something*, and we try to use standard APIs as much as possible (see
https://v8.dev/blog/emscripten-standalone-wasm#let's-unify-as-much-as-possible).
That is, if you see "fd_write" being required, that means logging is done in the wasm module, so to run in wasm-interp we'd need an API to do that, and WASI is the most standard API for that, so we use it.
If a program does *not* do any logging, then no fd_write will be imported. So WASI is not a general requirement when in standalone mode.
There's nothing special about WASI here. Standalone mode tries not to use external APIs as much as possible - it does what it can inside the wasm. When it does need to use an API, it will import it. That can in theory be any API emscripten supports, not just WASI, it depends on the APIs your code needs - for example if you use a GL method like glBufferData it will import that (and a custom runtime can then decide to add support for that API, say in a game engine that wants GL-doing plugins).