Data distribution service
The Data Distribution Service for Real-Time Systems (DDS) is an Object Management Group (OMG) Publish/Subscribe (P/S) standard that aims to enable scalable, real-time, dependable, high performance and interoperable data exchanges between publishers and subscribers. DDS is designed to address the needs of mission- and business-critical applications like financial trading, air traffic control, smart grid management, and other big data applications. A goal of DDS is to set itself apart from messaging technologies and standards by defining a set of functional and non-functional requirements.
A few proprietary DDS solutions had been available for several years. Starting in 2001, two major DDS vendors, the American group Real-Time Innovations and the French Thales Group teamed up to create the DDS specification which was subsequently approved by the Object Management Group resulting in Version 1.0 in 2003.
The DDS specification describes two levels of interfaces:
- A lower DCPS (Data-centric publish-subscribe) level that is targeted towards the efficient delivery of the proper information to the proper recipients.
- An optional higher DLRL (data local reconstruction layer) level, which allows for a simple integration of DDS into the application layer.
DDS architecture 
DDS entities 
- DomainParticipantFactory: A singleton factory that is the main entry point to DDS.
- DomainParticipant: Entry point for the communication in a specific domain; it represents the participation of an application in one DDS Domain. Furthermore, it acts as a factory for the creation of DDS Publishers, Subscribers, Topics, MultiTopics and ContentFilteredTopics.
- TopicDescription: Abstract base class for Topic, ContentFilteredTopic and MultiTopic.
- Topic: A specialization of TopicDescription that is the most basic description of the data to be published and subscribed.
- ContentFilteredTopic: A specialized TopicDescription like the Topic that additionally allows content-based subscriptions.
- MultiTopic: A specialization of TopicDescription like the Topic that additionally allows subscriptions to combine/filter/rearrange data coming from several topics.
- Publisher: A Publisher is the object responsible for the actual dissemination of publications.
- DataWriter: Allows the application to set the value of the data to be published under a given Topic.
- Subscriber: A Subscriber is the object responsible for the actual reception of the data resulting from its subscriptions.
- DataReader: A DataReader allows the application to declare the data it wishes to receive (by making a subscription using a Topic, ContentFilteredTopic or MultiTopic) and to access the data received by the attached Subscriber.
DDS model 
DDS is networking middleware that simplifies complex network programming. It implements a publish/subscribe model for sending and receiving data, events, and commands among the nodes. Nodes that are producing information (publishers) create "topics" (e.g., temperature, location, pressure) and publish "samples." DDS takes care of delivering the sample to all subscribers that declare an interest in that topic.
DDS handles all the transfer chores: message addressing, data marshalling and demarshalling (so subscribers can be on different platforms than the publisher), delivery, flow control, retries, etc. Any node can be a publisher, subscriber, or both simultaneously.
The DDS publish-subscribe model virtually eliminates complex network programming for distributed applications.
DDS supports mechanisms that go beyond the basic publish-subscribe model. The key benefit is that applications that use DDS for their communications are entirely decoupled. Very little design time has to be spent on how to handle their mutual interactions. In particular, the applications never need information about the other participating applications, including their existence or locations. DDS automatically handles all aspects of message delivery, without requiring any intervention from the user applications, including:
- determining who should receive the messages
- where recipients are located
- what happens if messages cannot be delivered
This is made possible by the fact that DDS allows the user to specify Quality of Service (QoS) parameters as a way to configure automatic-discovery mechanisms and specify the behavior used when sending and receiving messages. The mechanisms are configured up-front and require no further effort on the user's part. By exchanging messages in a completely anonymous manner, DDS greatly simplifies distributed application design and encourages modular, well-structured programs.
DDS also automatically handles hot-swapping redundant publishers if the primary fails. Subscribers always get the sample with the highest priority whose data is still valid (that is, whose publisher-specified validity period has not expired). It automatically switches back to the primary when it recovers, too.
Various DDS vendors participate in an Interoperability demonstration each spring at the Object Management Group (OMG) Spring Technical Meeting. During the demo, each vendor publishes and subscribes to each others topics using a test suite called the Shapes Demo. For example, one vendor publishes information about a shape and the other vendors can subscribe to the topic and display the results on their own Shapes Display. Each vendor takes turns publishing the information and the other subscribe.
There are two things that make the demo possible:
- Data Distribution Service (DDS) Interoperability Spec sometimes referred to as DDS-I or the Real-Time Publish Subscribe (RTPS) protocol
- The agreement to use a common such as the Shapes Data Model
Family of Specifications 
- Data Distribution Service for Real-time Systems (DDS) - This is the main Object Management Group (OMG) specification
- The Real-time Publish-Subscribe Wire Protocol DDS Interoperability Wire Protocol Specification - This specification defines an interoperability protocol sometimes referred to as the wire protocol. It ensures that information published on a topic using one vendor's DDS implementation is consumable by one or more subscribers using the same or different vendor's DDS implementations. Although the specification is targeted at the DDS community, its use is not limited.
- DDS for Lightweight CCM (dds4ccm) - This specification offers an architectural pattern that separates the business logic from the non-functional properties. A recent extension adds support for streams.
- DDS-Java: Java 5 Language PSM for DDS - This specification defines Java 5 language binding, referred to as a Platform Specific Model (PSM) for DDS. It specifies only the Data-Centric Publish-Subscribe (DCPS) portion of the DDS specification; Additionally, it encompasses the DDS APIs introduced by DDS-XTypes and DDS-CCM.
- DDS-PSM-Cxx: ISO/IEC C++ 2003 Language DDS PSM - This specification defines the ISO/IEC C++ PSM language binding, referred to as a Platform Specific Model (PSM) for DDS DDS. It provides a new C++ API for programming DDS that is more natural to a C++ programmer. This specification does not impact the DDSI.
. The specification provides mappings for:
- The Application Programming Interface (API) specified in DDS-XTypes
- Accessing Quality of Service (QoS) profiles specified in DDS-CCM
- Extensible and Dynamic Topic Types for DDS (DDS-XTypes) - This specification provides support for data-centric publish-subscribe communication where topics are defined with specific data structures. To be extensible, DDS topics use data types defined before compile time and used throughout the DDS global data space. This model is desirable when static type checking is useful.
- UML Profile for Data Distribution - This specification provides a Unified Modeling Language (UML) Profile. It allows for DDS Domains and Topics to be part of the analysis and design modeling efforts of object-oriented systems.
This specification also defines how to publish and subscribe objects without first describing the types in another language, such as XML or OMG IDL.
Note: Until March 2012, the Interface Definition Language (IDL) specification was part of the Common Object Request Broker Architecture (CORBA) specification Chapter 3. Although this specification is still part of CORBA, a new standalone version of IDL was released to allow IDL to evolve indepently from CORBA. See Interface Definition Language (IDL) 3.5.
List of Vendors 
- Real-Time Innovations, Inc. (RTI) - Provides RTI Data-Distribution Service, a COTS and open community source implementation of DDS, consulting and Training Services.
- PrismTech - Provides OpenSplice DDS a COTS and Open Source implementation of the full OMG DDS specification (DCPS and DLRL), consulting and training services.
- Object Computing Inc. (OCI) - Provides OpenDDS, an Open Source C++ implementation of DDS that uses ACE/TAO. OCI also provides consulting and Training services.
- MilSOFT - MilSOFT DDS Provides a COTS implementation of DDS.
- OCERA ORTE - Open Real Time Ethernet provides an Open Source implementation of RTPS 1.0.
- Twin Oaks Computing, Inc. - Provides CoreDX, a COTS implementation of the DDS specification and related services.
- Kongsberg Gallium - Provides InterCOM DDS, an implementation of the DDS minimum profile.
- Remedy IT - Provides consulting for DDS
- icoup - technology and management consulting - Provides consulting for DDS and MicroDDS, a tailored implementation of DDS for small devices, micro-controllers and embedded systems.
- Electronics and Telecommunications Research Institute - Provides ETRI DDS, a core implementation of the DDS specification and related services.
- IBM - DDS ]
- BEE-DDS - A Java implementation of the OMG DDS standard provided by SSI.
See also 
- Open architecture computing environment
- Object Management Group (OMG) (the standards body that developed the DDS specification)
- Catalog of DDS Specifications
- Data Distribution Service (DDS), Version 1.2, January 2007, http://www.omg.org/spec/DDS/1.2
- Data Distribution Service (DDS), Version 1.1, December 2005, http://www.omg.org/spec/DDS/1.1
- Data Distribution Service (DDS) , Version 1.0, December 2004, http://www.omg.org/spec/DDS/1.0
- Data Distribution Service for Real-time Systems (DDS), Version 1.2, formal/2007-01-01, January 2007, http://www.omg.org/spec/DDS/1.2
- The Real-time Publish-Subscribe Wire Protocol DDS Interoperability Wire Protocol Specification, Version 2.1, January 2009, OMG:formal/2009-01-05, http://www.omg.org/spec/DDSI/2.1
- DDS for Lightweight CCM (dds4ccm), Version 1.0,formal/2011-06-01, June 2011, http://www.omg.org/spec/dds4ccm/1.0/PDF/
- Programming languages — C++, 15 October 2003, ISO/IEC 14882, http://www.iso.org/iso/catalogue_detail.htm?csnumber=38110
- DDS-PSM-Cxx: ISO/IEC C++ 2003 Language DDS PSM, Version ptc/2011-01-02, January 2011, http://www.omg.org/spec/DDS-PSM-Cxx/1.0/Beta1/PDF
- Extensible and Dynamic Topic Types for DDS (DDS-XTypes), 1.0, formal/2012-11-10, November 2012, http://www.omg.org/spec/DDS-XTypes/1.0/PDF
- UML Profile for Data Distribution, version: 1.0, formal/08-04-07, April 2008, http://www.omg.org/spec/CCCMP/1.0/PDF
- DDS-Java: Java 5 Language PSM for DDSVersion 1.0, ptc/2012-12-01, March 2013 http://www.omg.org/spec/DDS-Java/1.0/Beta3/PDF
- Common Object Request Broker Architecture (CORBA), Version 3.3, formal/2012-11-12, formal/2012-11-14, formal/2012-11-16, November 2012, http://www.omg.org/spec/CORBA/3.3
- Interface Definition Language (IDL), Version 3.5, Beta 1, February 2013, http://www.omg.org/spec/IDL35/Beta1/