> Our could we hack some update code in congregation with NI?
You don't have to hack.
Suppose Alpha.vi calls Beta.vi. When Alpha.vi saves, it writes down the path to Beta.vi in its save image. When you load Alpha.vi, it tries to load Beta.vi at that path. If it doesn't find Beta.vi, it searches disk.
Now, modify Beta.vi to be inside Yoda.lvlib. Now load Alpha.vi. What happens this time is Alpha.vi goes to the location it recorded, and it finds a file named Beta.vi. It loads it, and discovers that the file is actually Yoda.lvlib:Beta.vi. That's ok. Normally on load we require that qualified names match exactly, but we make an exemption for "caller last saved looking for an qualified name with no library at all and caller now found -- at *exactly* the same path (no searching) -- a VI of the right file name but different library name, so count that as a match." Now, if Alpha.vi is saved looking for Yoda.lvlib:Beta.vi and you then move Beta.vi out of Yoda.lvlib and into Yolanda.lvlib, now when you load Alpha.vi, it finds Beta.vi at the right path, but the qname doesn't match, so it considers the subVI to be missing, and searches accordingly.
This is why upgrading from no library to library is easy. It is why upgrading to a different library ownership requires the same machinations as renaming the VI file itself.
> ...though I do now appreciate having the smaller libraries, as loading any one
> VI from a .lvlib loads the whole library. (If any does know how to do this,
> please tell me -- I'll feel silly for 5 minutes, then really appreciate it!).
There are five library types: lvlib, xctl, lvclass, lvsc and xnode (the last of these being somewhat mythical). Lvlib and lvsc do NOT load all of their member VIs. The others do. They do list all their VIs in the project tree, but the VIs are not loaded into memory. All of them do load their nested libraries into memory.
> I wouldn't want the polymorphic VIs to be public and
> make the specific instances private, main reason is that
> Real-time cannot cope with variants, and you couldn't bypass
> the public polymorphic VI by calling directly into the specific
> instance you need.
Um, yes, that's the whole point. You couldn't bypass the poly VI. Under what conditions is that undesirable?