My name is Felipe, I’m a mechatronics engineering student and I’m writing an article about ROS 2 messaging performance and in the process I spent some time to understand the evolution steps that brought us to where we are. It may be called “The DDS Wars” or “DDS Cambrian Explosion”, I personally prefer “The DDS Race” as it moves us forward as the Space Race but with no nuclear threat, the truth is a lot already happend and one may get lost on the way.
I’m trying to build a timeline of events and would love to hear from you if I’m missing something. To the best of my knowledge, this recolection of events wasn’t done before, so I believe it is a small contribution to the community.
As stated in the ROS 2 design docs one of the objectives of creating the ROS Middleware Interface (RMW) is to seamslly support different DDS implementations. At the time of ROS 2 Ardent release, 3 different DDS implementations where supported, as shown in REP-2000: Fast-RTPS, Connext DDS and OpenSplice, being Fast-RTPS the default one. The support for 3 different DDS providers in the first ROS 2 release arguably shows that the intentions of RMW creation where successful.
The major change in this scenario came in the end of 2019 with the introduction of Cyclone DDS and the subsequent announcement that OpenSplice Community development efforts would migrate to the Cyclone DDS project. As REP-2000 shows again, from ROS 2 Bouncy until Eloquent, 4 DDS providers were supported, the same 3 from Ardent plus the young Cyclone DDS. Fast-RTPS and Connext DDS received Tier 1 support and OpenSplice and Cyclone DDS received Tier 2 support
In the first ROS 2 LTS release, Foxy, things start to be more interesting. Fast-RTPS changed its name to Fast DDS, the support for OpenSplice was officialy dropped and a new DDS provider emerged with Tier 3 support, the commercial solution GurumDDS. As Cyclone DDS support was upgraded from Tier 2 to 1, the TSC announced that would re-evaluate the default ROS middleware layer that ships with each ROS 2 distro along the available free and open source DDS solutions with permissive licenses and Tier 1 support.
For the upcomming release, Galactic, a technical report was prepared with benchmarking tests and community feedback in order to evaluate both options and the TSC decided to change the default DDS provider from Fast DDS to Cyclone DDS.
For the second ROS 2 LTS release, Humble, the same technical report was prepared with benchmarks and a community survey and the TSC chose Fast DDS as default middleware for the new release in a very close decision in a 2-round vote with final stand of 10 votes against 9.
And this is where we stand today, from Ardent to Humble, eProsima’s solution is the default RMW provider, with the exception being the Galactic release, where Cyclone DDS was the chosen one.
It is important to remark that the TSC decision of default RMW provider has limited impact in the community, as stated before:
It will definetelly affect first-time users of ROS 2, but any intermediate user is capable of switching between RMW implementations. Said that, I would argue that the TSC tech report is far more important than its decision on the default RMW, as the report provide a techninal review of the available options and is a valuable tool on the decision of which RMW to use. By the end of the day, the best source of information always is on-site testing, as it can account for all specificities of each use case. The good old nullius in verba still applies.
As we are approaching the time of the year that the survey is made, some suggestions may be made to improve the process as a whole. The main motivation of this post was the struggle to piece together all the information, as it was scattered all over ROS discourse, so I would suggest to use the same set of category/tags so it is easier to find this same-related topics.
For instance, at time of writing, community feedback request for Galactic has “ros2”, “dds” and “galactic” tags while community feedback request for Humble has “ros2”, “rmw” and “humble” tags. Even though both address the same subject, the only shared tag is “ros2”, which is present in almost every post nowadays. In the same way, the Galactic announcement and Humble announcement only share the “ros2” tag. Maybe an umbrella tag “dds-evaluation” can solve this an put everyone together?
Another important remark is the disclosure of the voting result from TSC in the Humble announcement, as it is a significant step towards transparency of the process. It would be nice to see it again in the next editions of this decision. It would be even better if a press release was made (or something like that) so it would become a bibtex reference nicer than a google presentation, but I may be overstepping here
At last, but not least, a nice meme to summarize the topic
I apologize if I missed some important event in the timeline or wrongly reported some of episodes, I would love to hear some feedback from you