I just re-ran all my tests (all possible pairs from [foxy, galactic, humble, rolling] with demo_nodes_cpp[listener, talker], demo_nodes_cpp[add_two_ints_{client, server}] and action_tutorials_cpp[fibonacci_action_{client, server}] across all pairs) and everything still works for me.
yes, all tests were container<->container.
I’ve only tested Fast-RTPS / Fast-DDS.
That needs some care: if using --net=host, it will assume the SHM transport can be used. Adding --ipc=host can work, but sometimes errors. It will then fallback to non-SHM I believe (and will actually still work). I disable SHM for testing purposes (I was more interested in binary message compatibility than performance) using something like this and then things work with or without --net=host.
I’ll see if I can make the test scripts available (it’s just a set of Bash scripts using the standard ros Docker images).
In most cases this is true. Between Foxy and Galactic however, at least control_msgs changed and that’s definitely incompatible and will lead to problems (as in: inability to communicate, no exploding robots or anything like that).
I believe this is or will be a very common use-case rather sooner than later, as I’ve already come across packages / nodes which don’t work with one RMW, but do with another (well, behaviour is better). If a vendor for instance only supports using Cyclone (because that’s what they’ve developed against and that’s what they’ve tested), using Fast-DDS is not an option.
Another example (which is one of the contexts in which I ran into ros2/rmw_cyclonedds#184) would be micro-ROS: it’s essentially only compatible with Fast-DDS, which, if we’re not supposed to mix-and-match RMWs within a single ROS 2 application / node graph, would require the entire application to be run with Fast-DDS.
In principle I would agree, but it’s naive.
In real-world scenarios it’s really difficult to completely control every package and every node (or at least incurs significant development/maintenance overhead). For organisations with legacy for example (and I’ve encountered companies still on Dashing fi), you can’t just say: “well .. akshually, you’re not supposed to do that, so tough luck for you and your anti-pattern”.
And as I wrote above, there are situations where external factors prevent you from controlling which RMW gets used by a certain node or set of nodes.
The same goes for which ROS 2 version is supported by certain packages. Especially if that package is not available OSS.
that’s a bit dramatic I feel. I would not be comfortable doing it in general, but for certain use-cases and with (extensive) testing, it should be OK. Same as in ROS 1.