It's not just about portability, but also things like dynamic loading and runtime modification of code, which modern systems rely on quite a lot under the hood.
People often aren't aware of this because the actual mechanisms tend to be hidden inside libraries or tools they depend on.