Last validated: March 7, 2026
This document records direct colcon vs roc comparisons for both workspace build and test flows.
Validation environment:
- host: local development machine
- ROS distribution: Jazzy Jalisco
colcon:/usr/bin/colconros2:/opt/ros/jazzy/bin/ros2roc: local debug binary from this repository
Repeatable validators:
Validated against ignored end-to-end comparisons:
- isolated
ament_cmake - isolated
ament_python - merged install
- underlay/overlay chaining
- failed-build resume with
--continue-on-errorand--packages-select-build-failed
Observed result:
roc work buildnow matches the validatedcolcon buildbehaviors closely enough for normal ROS package discovery and sourcing flowsros2 pkg prefixworks in the validated minimalament_cmakeandament_pythoncases- merged-install metadata and overlay sourcing behave the same in the validated fixture matrix
Real upstream workspace pressure tests previously run in /tmp:
/tmp/roc_ros2_examples- full
ros2/examplesbuild succeeded withroc
- full
/tmp/roc_demos_wspendulum_msgs+pendulum_controlsucceeded with bothcolconandroc
/tmp/roc_ros2_demos- failing packages matched
colconfailures in the local environment rather than exposing builder-specific breakage
- failing packages matched
Validated roc functionality:
roc work testroc work test-result
Current test-flow behavior:
roc work testrunsctestfor CMake packages andpython3 -m pytestfor Python packages- per-package logs,
status.txt,test_summary.log, andcolcon_test.rcare written into the build/log trees roc work test-resultreads:Testing/.../Test.xmlpytest.xml- package xUnit files under
test_results/... colcon_test.rcas a fallback when no XML results exist
- verbose output now includes testcase-level failure blocks similar to
colcon test-result --verbose - delete semantics now use
--deleteand--delete-yes, matchingcolcon’s CLI surface
Real upstream workspace validation now exists as ignored integration tests for:
/tmp/roc_ros2_examples- compare
colcon build/testvsroc work build/teston selected example packages
- compare
/tmp/roc_ros2_demos- compare
colcon build/test/test-resultvsroc work build/test/test-resulton selected demo packages
- compare
Observed result from the current direct checks:
roc work testfails and succeeds on the same selected upstream packages thatcolcon testdoes in this environmentroc work test-result --all --verbosenow matchescolcon test-resultmuch more closely on:- result discovery
- aggregate totals
- testcase-level failure detail presence
roc now has high practical parity with colcon for the validated Linux/Jazzy scope across:
work buildwork testwork test-result
This is still not an unconditional blanket replacement claim.
What remains weaker than the build parity story:
- the newest
work testandwork test-resultreal-workspace validations are present as ignored tests, but they have not yet been promoted into the same routinely-run release gate as the build matrix - some output formatting still differs from
colcon, even where the underlying results match
- Turn the current ignored real-workspace test-flow checks into part of an explicit release gate.
- Re-run the full build+test validation matrix after any parity-sensitive change.
- Keep docs scoped to the validated Linux/Jazzy environment unless wider validation is added.