ROS2 packaging tools need better dev/runtime separation, argues engineer
A self-taught C++ programmer critiques ROS2's bloated packaging workflow.
In a forum post, Stewart, a self-taught C++ programmer and ROS user, critiques the ROS2 ecosystem's packaging tools, citing that 'real' developers often call ROS 'bloated.' He identifies specific issues: ament makes cmake install calls without tagging items for dev or runtime; rosdep can point to both types but doesn't link them; bloom seems designed to only ship -dev packages. He proposes that package.xml already allows detailed specification but lacks tooling support. He suggests ament should use 'component' tags for install calls, rosdep should track dev/non-dev pairs, and bloom should be updated. Stewart personally uses cpack and custom CMake macros to generate runtime and development debs, wishing the built-in tools handled this. He notes these tools may be holdovers from ROS1 and calls for an upgraded packaging mechanism for ROS2. The post resonated with others, linking to previous discussions on generating dev and runtime artifacts.
Stewart's critique highlights a real pain point for teams shipping ROS2 applications: the lack of clean separation between development headers/binaries and runtime dependencies leads to bloated deployments and confusion. His proposed fixes—component tagging, extended rosdep, and bloom changes—could streamline CI/CD pipelines and reduce package sizes. This is especially relevant as ROS2 gains adoption in production environments where package management and minimal footprints are critical. The discussion shows community interest, with links to earlier threads on similar topics. For professional developers, addressing these packaging issues could lower the barrier for 'real' software engineers to adopt ROS2 without custom workarounds.
- ament doesn't differentiate between dev and runtime artifacts when calling cmake install.
- rosdep lacks a mechanism to associate -dev and non-dev packages under a single key.
- Bloom intentionally ships only -dev packages, forcing engineers to use cpack or custom macros for proper separation.
Why It Matters
Better ROS2 packaging reduces bloat, simplifies CI/CD, and makes ROS more acceptable to production developers.