Zig has a very small "core" idea. Explicit allocator, basic C semantics, clear UB, errors and comptime. All other features implemented in stdlib in zig itself.
Odin fills like go with "special" runtime. For example dynamic arrays are implemented as compiler component in C++.
Odin's '"special" runtime' as you call it is extremely minimal and is still easy to swap out with your own, and also only gets used if you use those features.
Zig has a runtime of its own now since it has added coroutines (async/await) as a core feature, but that is still extremely minimal aw well.
Odin fills like go with "special" runtime. For example dynamic arrays are implemented as compiler component in C++.