So much right in that. In the old days we had compilers linkers and loaders. They all did the wrong thing. Compilers did text translation to semantics and generated code. The linker combined code from several sources and produced a loadable image. The loader checked for compatibility and relocated an instance to an address. Instead, the compiler should have stopped at semantics. The linker should combine semantic mod…
(physically connecting logical graph nodes having been exactly why the linker/loader were messing with offset relocation on single machines)