No version constraints in package dependencies

Disclaimer: I only tested ROS noetic and with DPKG on Ubuntu, but I assume it’s not different on other systems and ROS distributions.

I feel like there is a lack of love for the dependency version constraints in the debian packages (i.e. something like Depends: my-msgs (>= 0.42.1)): a lot of packages don’t specify those relation. For example, roscpp doesn’t specify its needed version of std_msgs, moveit_ros_planning don’t specify the version of moveit_core despite linking against it, etc…

This is not that bad, considering that those packages are all deployed together in a distribution by the build farm. However, what bother me is the lack of way to allow one to declare a version constraint on its dependence using the standard dpkg tools like shlibs and symbol files, for example (see the staling issues on MoveIt and bloom).

For instance, today I was due to install our package on the robot. Our package uses moveit_ros_move_group, I have created a script to populate the Depends with something like ros-noetic-moveit-ros-move-group (>= 1.1.10), noetic-moveit-ros-move-group (<< 1.1.11) so I cannot install an incompatible of our project with MoveIt.

However, I had a surprise: the new version of noetic-moveit-ros-move-group, 1.1.10-1focal.20221124.054756, uses moveit_msgs 0.11.4 instead of 0.11.3, which broke the API compatibility between our project and the move_group, while the semantic version of move_group remains the same.

A fix would be to declare a strict version dependence between our packages and the msgs packages we use, but I’m surprise this has not already be tackled.

Another solution would be to have our package on the main ROS build farm, but we don’t want that, so another solution would be to sync our package repository releases with a ROS snapshot repository.

Here are a few questions :

  • What is the status of ROS on this? Is this considered a bug, a wontfix?
  • What is your experience on deployment outside of the main ROS buildfarm?
  • Am I a fool to try to create a parallel repository?
  • Do you have any recommendations?

Thank your for your time.


Regarding those questions, check out Mike Purvis’ talk on bundling.

We (at Relay Robotics) use a similar, home-grown approach, specifying all versions in a rosdistro file and compiling the whole stack from scratch using those versions.

Hope that helps!