There’s a quote I love from Ian Lance Taylor’s series on linkers about the complexity that creeps into them.
As we’ve seen, what linkers do is basically quite simple, but the details can get complicated. The complexity is because smart programmers can see small optimizations to speed up their programs a little bit, and somtimes the only place those optimizations can be implemented is the linker. Each such optimizations makes the linker a little more complicated. At the same time, of course, the linker has to run as fast as possible, since nobody wants to sit around waiting for it to finish. Today I’ll talk about a classic small optimization implemented by the linker.
This is one of the best definitions I’ve seen of a flavor of “System Software” that’s quite common.
The original goal as stated is simple: “It just fans out RPCs and aggregates responses” or “It just links object files together”. But from this comes a never ending stream of optimizations and the need to manage all the complexity they inevitably impose.
It’s comforting that this seems to be a common theme; the way that it’s comforting to see someone else failing to solve the same problem. But at least it’s nice when you can put your finger on something that’s previously only been a nebulous inkling in your mind.