package BoF: selection of alternate packages/implementations

Problem: Sometimes you don't want to require a particular package; you just need a particular interface, and maybe many packages provide it.

package require operates on packages not interfaces, so what's a good way to deal with alternative implementations of an interface? (for example, C-coded and Tcl-coded versions of the same commands, or perhaps implementations competing on other grounds?)

Main goal is to get complicated logic out of the user application. A single declarative command should be sufficient. I need version x of the foo interface

Option 1 - a wrapper knows about multiple candidates

Write a common wrapper package that knows what packages provide a common interface. Have it supply configuration command to control choosing. Then the user just requires the wrapper package.

Wrapper can also translate any difference in the interfaces -- DB front end?

Option 2 - alternatives know about each other

Index scripts / provide scripts of alternatives might be written to recgonize avilability of an alternative and less desirable one could refrain from calling package ifneeded. This is really a type of variant management, as it will be most effective if the two alternatives are variants of a single version of a single package.

Option 3 - Accrue knowledge of interface compatibility on-the-fly. Not hard-coded into any one package.

3a:: an extension that will accept registration of claims of support for named, versioned interface, with mechanisms for selecting between alternatives.

3b:: new subcommands of package instead of a separate extension.