Can two versions coexist under the same name?
A module name can force a choice between versions. Identifying content by its hash gives each version a separate address.
Read on through a shared source
When does an implementation detail become a promise? →Callers can depend on observable behavior that was never documented. Changing an interpreter or a library then becomes a compatibility decision.When does an implementation detail become a promise? →Interpreter behavior, hash tables and public APIs illustrate how callers come to rely on what they can observe. Observable behavior need not have been formally guaranteed.Can libraries grow a language? →If libraries can express new abstractions in ordinary code, the core language can grow through its users. Compare the facilities needed to make those extensions feel native.
Compare the passages
we would have to make S modules also have a version identifierthen it would be perfectly fine to allow as many different versions of the same library in our code base