Interoperability is probably one of the most misused terms in the IT industry in these days. In a former job, I was confronted with actually defining Interoperability or finding an established definition for it. If you search for definitions for Interoperability (e.g. in Google, you will probably run into the IEEE definition). While this definition is useful as a starter, it certainly does not take you all the way of capturing what Interoperability really is.
A better and more complete definition of Interoperability can be found in the NATO Handbook and the U.S. Federal Standard 1037C. In these definitions (which are the same), there are essentially four levels of interoperability, namely:
compatibility: 1.Capability of two or more items or components of equipment or material to exist or function in the same system or environment without mutual interference. [JP1] (188) 2. In computing, the ability to execute a given program on different types of computers without modification of the program or the computers. 3. The capability that allows the substitution of one subsystem (storage facility), or of one functional unit (e.g. , hardware , software), for the originally designated system or functional unit in a relatively transparent manner, without loss of information and without the introduction of errors.
interoperability: 1. The ability of systems, units, or forces to provide services to and accept services from other systems, units or forces and to use the services so exchanged to enable them to operate effectively together. [JP1] 2. The condition achieved among communications-electronics systems or items of communications-electronics equipment when information or services can be exchanged directly and satisfactorily between them and/or their users. The degree of interoperability should be defined when referring to specific cases. [JP1] (188)
- interchangeability: A condition which exists when two or more items possess such functional and physical characteristics as to be equivalent in performance and durability, and are capable of being exchanged one for the other without alteration of the items themselves, or of adjoining items, except for adjustment, and without selection for fit and performance. [JP1]
commonality: 1. A quality that applies to materiel or systems: (a) possessing like and interchangeable characteristics enabling each to be utilized, or operated and maintained by personnel trained on the others without additional specialized training; (b) having interchangeable repair parts and/or components; (c) applying to consumable items interchangeably equivalent without adjustment. 2. Pertaining to equipment or systems that have the quality of one entity possessing like and interchangeable parts with another equipment or system entity. (188) 3. Pertaining to system design in which a given part can be used in more than one place in the system, i.e., subsystems and components have parts in common. Note: Examples of commonality include the use of a firing pin that fits in many different weapons and the use of a light source that fits in many different types of fiber optic transmitters.
Now, on different layers in the network and application stack there are typically different levels of Interoperability:
- Ethernet has – by now, for all practical purposes - achieved commonality.
- The TCP/UDP/IP stack is – at the least - highly interchangable, if not better.
- Application protocols, such as NFS or HTTP, are at the least highly interoperable, if not interchangeable.
- HTML is probably mostly interoperable, but there are definitively areas where we do not get past compatibility.
There is a tendency to achieve lower levels of interoperability the higher you go up in the network and application stack. The question of why this general rule applies is quite interesting. I personally think that creating a two-dimensional matrix of levels of interoperability and layers in the network stack are quite helpful when trying to improve interoperability at higher levels.
When looking at higher level protocols, one has to recognize that they typically carry a lot more semantics than lower level ones. Protocols – as they are currently created – are quite capable of capturing syntax, but not quite so much semantics. E.g., there is virtually no semantics in the header of an Ethernet or even an IP packet, but there is a lot of semantics in how to interpret HTML tags. There is however a tendency that – eventually – the level of interoperability on a given level increases, as time passes by the different implementation of a syntax-centric protocol converge.
It would be quite interesting to develop an approach that would allow to speed up the settling on semantic terms.