API = Applications Programming Interface
A set of interfaces for developers to use when creating own code.
If done right, an API can be programmed to in such a way that the application need not even be recompiled if the implementation of the API changes.
Here, I mean the API to be synonymous with a set of interfaces or base classes which are compiled. The implementation comes in the form of implementing the interfaces or subclasses the base classes. In this case, in order to use an implementation, the programmer of the application will still need to know the names of the subclasses which implement the functionality of the API in order to use them. Thus when the implementation of an API may need to be switched, all of the applications which use the API will need to be updated, recompiled, and reinstantiated. There are ways to get around this such that the application never needs to know the implementation which it is using and it is actually up to the API itself to choose its own implementation. Usually this can be done by the API checking either a Property or maybe consulting a registry of some kind. This is how I propose we architect everything from device drivers to system services.
I don't think we'd necessarily want to use CORBA for all situations of this type, but I believe it might provide a good model for what you propose.
I personally think that a key component of the operating system will be a registry. All OS API's should be interfaces only and there should be a way to obtain the "current implementation". In this way we allow vendors to replace parts of the JOSoperating system without having to modify our code. It also provides for a clean future migration path.
For more information on the registry API, see also RegistryPages. -- GilbertHerschberger (9 June 1999).