Binary compatibility


We will not worry about maintaining binary compatibility with the client APIs between different versions of OW, since it is trivial to solve the problem by installing 2 or more different versions of the client libraries. This is just an issue for package developers to provide some way for multiple versions of the client libraries to be installed simultaneously.  Note that we do try hard to maintain source compatibility for client applications, if at all possible we mark interfaces as deprecated when a replacement has been created. They are deprecated for at least one release and then removed after client applications have had a chance to migrate.

Likewise, we will not worry about internal server components (such as Services, provider interfaces, request handlers, etc) since these are mostly provided with OW and there aren't a lot of people developing them (the one exception being Jason Long's owperl provider interface.)

What we do need to worry about are providers, since there can only be one version of the cimom running and listening on port 5988. Granted, you could run multiple cimoms as long as they are not trying to listen on the same port or use the same repository, but that is a waste or resources and they are essentially invisible to the external world.  The goal is to allow multiple sets of providers (possibly from different sources or products) to all coexist in the "official" system cimom, and to ensure that all future installed versions of the cimom can be installed and correctly use the providers. Note that we will only support this for providers which follow the rules we establish. If a provider doesn't follow the rules, there will be no guarantee.

The purpose of this document is to explore various ways to achieve the goal of allowing multiple sets of providers (some build against older versions of OW) to coexist.

Out of process

Use the remote provider interface and provider agent (or similar items) to talk to providers that are out of the cimom's process.

Advantages:

Disadvantages:    

Maintain binary compatibility for all OW code

To do this we will have to adopt a strict set of rules about what we can change in the code.  To allow for a bit more flexibility (e.g. adding a new data member) all classes will need to be converted to use the pimpl idiom.

Advantages:
Disadvantages:

Maintain binary compatibility only for a new provider interface

The idea behind this is to create a new C++ provider interface which will provide all the functionality a provider needs. Providers that only use symbols from the provider interface will work with any future version of OW.  A provider should not use any classes/functions outside of the provider interface. The strict binary compatibility rules will be applied only to the provider interface.

Advantages:
Disadvantages:

CMPI

CMPI is a C provider API invented by IBM that is being standardized by the OpenGroup. The API should be stable and maintain backward compatibility.

Advantages:
Disadvantages: