The Object Management Group, the same folks who gave us UML, CORBA, and SysML, created DDS (Data Distribution Service) as a standard for interoperable middleware. DDS is designed to be used for both high level systems integration, like ROS, and real-time applications on embedded devices. It is architecture-independent, scalable, asynchronous, and uses a publish-subscribe communication pattern.
It can be implemented in several languages using a thin, language idiomatic C API. The XML and IDL specifications are also language agnostic. This allows the DDS application, including Domain Participants and data samples, to be defined in a programming language of choice without requiring a common software interface. This approach has led to a wide variety of low-level implementations, but DDS applications are still interoperable because they are defined in a common specification.
What is a DDS? Understanding Your Dentist’s Qualifications
Another feature of DDS is that it provides control over the reliability of data transfer. This can be tuned to be essentially TCP for soft real-time applications or made more robust with guaranteed latency and dropout tolerance.
DDS has a history of being used in aerospace and defense, which may explain its more closed ethos. It is also relatively old and has a very different community to that of modern projects like ZeroMQ. However, the LGPL options from RTI and OpenSplice are encouraging, and research into ros_dds has shown that a feature-complete, DDS-specification compatible C API can be wrapped in other languages with reasonable effort.