Implementation interoperability means that various implementations can work with each other, use each other's keys, or verify each other's signatures. This would mean, for example, that for the same algorithms, a key generated by one provider would be usable by another, and a signature generated by one provider would be verifiable by another. Algorithm extensibility means that new algorithms that fit in one of the supported engine classes can be added easily. Java users and clients may install specific provider packages according to their taste and preference. Each JDK installation has one or more provider packages installed.
Users can call methods to query which providers are installed.
Applications may simply request a particular type of object, such as a DSA object, and get an implementation from one of the installed providers. If desired, a client may instead request an implementation from a specific provider. When clients configure their system with different providers, they specify a preference order for each. The preference order is the order in which providers are searched for requested algorithms when no specific provider is requested. This preference order is configurable.