It's probably not entirely clear in the spec, but it is already the
intent that version numbers work as API designators as well as module
designators. Certainly, as you speculate, if different authors want
to share an API, they can give it an "API" author that knows how to
delegate to one of the authors.
For the most part, however, I think people will use v1.2 as the API
and v1.2.3 as one particular module implementating the v1.2 API.
That was more or less why three part version numbers were invented,
after all. You'll note that we've been careful to define our matching
so that v1.2 requires an *exact* match on the specified part, so v1.2
does not match v1.3. It does, however, match any of v1.2.0, v1.2.1,
v1.2.3, up to v1.2.18446744073709551615 or so, plus any subversions
Plus there's all the pattern matching, which lets you say (v1.2...)
if you really want that. Plus the fact that a v1.3 module is allowed
to advertise that it knows how to pretend to be the v1.2 interface,
though admittedly the syntax for that part isn't specced yet. In
any event, the module aliasing mechanism is expected to paper over
all those differences to the extent possible. I can say
and within the rest of the *lexical* scope it aliases the short
name Penguin to whatever full name we really used, and that might
be actually be cobol:Dinosaur::Factory-42.5188.8.131.52.0-DARWIN
or some such...
That probably covers most of your concerns. Improvements to the spec