It's my understanding that the reason that external identifiers in portable C programs had (still have?) to be unique in the first six characters is that six 6-bit characters¹ fill a 36-bit machine word on a target architecture, and that a single machine word was used to represent the identifier in object files.
I guess this applies to other languages too, if they use the same object-file format and linker.
Is my understanding correct? If so, which platform had such influence?
¹ Conveniently, and probably not coincidentally, 52 letters, 10 digits, underscore and null add up to 64 possibilities, neatly filling 6 bits.