Releasing a new ROS 2 Distribution
Yadunund Vijay - Iron ROS Boss
Chris Lalancette - ROS 2 Technical Lead
Marco Gutierrez - Jazzy ROS Boss
October 19, 2023

Who are we?

Outline● What is ROS?
● What is a ROS distribution?
● Release infrastructure● Release processWhat is ROS?

What is ROS?
Over 1000 pkgs in
the ROSecosystem

Core ROS
packages

HTTPS://XKCD.COM/2347/

https://www.ros.org/reps/rep-2000.html

Variants, Releases, and Target Platforms
Over 1000 pkgs inthe ROS
ecosystem

Core ROS
packages

HTTPS://XKCD.COM/2347/

REP 2000:● Release frequency: 12 months alternating
between LTS and non-LTS supports.
● Support durations:○ LTS: 5 years○ Non-LTS: 1.5 years● Support levels:○ Tier 1: Continuously tested withprioritized bug fixes.
○ Tier 2: Periodically tested.
○ Tier 3: Rely on community for testing
and bug fixes.
● Target platforms:○ Support level for combinations of CPU
architectures and Operating systems.

https://www.ros.org/reps/rep-2001.html

Variants, Releases, and Target Platforms
Over 1000 pkgs inthe ROS
ecosystem

Core ROS
packages

HTTPS://XKCD.COM/2347/

REP 2001:● core: ament, launch, rclcpp, rclpy, ros2cli,default rmw implementation● base: core + geometry2, kdl_parser,robot_state_publisher, rosbag2, urdf
● desktop: base + rviz, examples, demos● perception: base + image_common,
vision_opencv, PCL, …
● simulation: base + ros_gz_bridge +ros_gz_interfaces● desktop_full: desktop + perception,simulation, ros_gz_demoshttps://www.ros.org/reps/rep-2001.html

Variants, Releases, and Target Platforms
Over 1000 pkgs inthe ROS
ecosystemCore ROS
packages

HTTPS://XKCD.COM/2347/

REP 2001:● core: ament, launch, rclcpp, rclpy, default rmw
implementation● base: core + geometry2, kdl_parser,
robot_state_publisher, rosbag2, urdf
● desktop: core + rviz + examples + demos +introspection tooling● perception: base + image_common,vision_opencv…
● simulation: base + ros_gz_bridge +On releaseros_gz_interfaces
day,desktopthe● desktop_full:+ perception,
desktopsimulation, ros_gz_demos
variant isavailable

New distro creation
NewDistroreleasedNew Distrobranch createdfor desktop
pkgs“main”ROS 2 ROLLING RIDLEY

●Once released, the API/ABI for core ROS
packages will not change throughout thelife of the distribution.
○ The Major and Minor version
numbers will remain constant while
Patch number can be incremented
for bug fixes.

●All feature development will target rolling.

●New distros give maintainers theopportunity to make improvements thatnecessitate API/ABI breaks.

●

Community maintained packages do notneed to follow such guarantees althoughencouraged.

23.0.
021.0.
3rclcpp

But why?

16.0.
5

Types of release●Source release○ Tagged version of the ros2.repos file

●Binary release○ Generated by binary jobs on theBuildfarm■ Debians for Ubuntu■ RPM for RHEL

●Archive release (pre-built binaries)○ Generated by “packaging” job on CI■ For Tier 1 and Tier 2 supportedplatforms● Ubuntu● RHEL● Windows

https://github.com/ros2/ros2/releases

Release infrastructure

For detailed talk on how packaging works, watch “The ROS build farm and you: How ROS packages
you release become binary packages”

https://github.com/ros2/ros2

Release infrastructure- ros2.repos●<distro>/ros2.repos: A repos file that clones in all
desktop variant packages for a given ROS distrowith the correct “source” branch for each repo
○ 106 repos for iron
■ 358 packages●<distro>-release/ros2.repos: Clones in latest
release version of each repository●

release-<distro>-YYYYMMDD/ros2.repos: Tagged
ros2.repos file with package versions at specified
date. Corresponds to a patch release.

https://wiki.ros.org/bloom

Release infrastructure- bloom●A python tool to automate release branching andthe generation of platform specific source
packages, like debian’s src-debs.

●The buildfarm pulls source code from each target
branch and builds each package independently.

ros2/rclcpp

ros2-gbp/rclcpp-releasehttps://github.com/ros/rosdistro

Release infrastructure- rosdistro●

Each distro has a distribution.yaml file with entities
for each repository released via the ROS Buildfarm(core and community maintained).
○ Source of truth / database●Specifies○ Packages released from this repository○ Source branch for document generation○ Latest version of package released via theBuildfarm○ URL of release repository○ URL of source repository and branch●

Updated via PRs opened automatically when themaintainer blooms a new release.

●Changes to the distribution.yaml are automaticallypolled to trigger binary jobs on the Buildfarm.

https://build.ros2.org/
https://github.com/ros2/ros_buildfarm_config

Release infrastructure- Buildfarmhttps://build.ros2.org/

Release infrastructure- Communication

discourse.ros.org
Announcements to thecommunity before,
during and after releaseindex.ros.org
Distro specificinformation on package
versions, documentation

Release timeline,
changelogs, setup
instructions, tutorials,
guides and more

docs.ros.org

The release processhttps://github.com/orgs/ros2/projects/49

Release Process Board

Rough release steps
1.
2.
3.
4.
5.
6.
7.

PrepareFreezeUpdate Rolling core package binaries
BranchTest
Release!
Post-release!

Prepare: Name release
●
●
●
●
●

●
●
●

Starts in April of previous year
Follows alphabet order in the form of “<adjective> <turtle species>”○ e.g. Iron Irwini, Jazzy Jalisco, K-turtle
Ideas are gathered from the community through a thread on discourse
List of names are compiled by the ROS Boss
Names are eliminated:○ Anything copyrighted (no Ninja Turtles)○ Offensive○ Unsuitable○ Too long (generally longer than 8 characters)
ROS 2 core team votes on the names
ROS Boss makes the final selection
Name is announced on the previous release announcement post on discourse.

Prepare: Develop Release timeline

https://docs.ros.org/en/rolling/Releases/Releas
e-Jazzy-Jalisco.html#release-timelinePrepare: Migrate Rolling onto next Ubuntu
●

●

●
●

In even years, migrate to the next
Ubuntu (e.g. for 2024, migrate toUbuntu 24.04)
When Ubuntu 24.04 alpha packages
are available, do the migration(~December/January)
Now Rolling binary packages will beavailable targeting next Ubuntu
CI (https://ci.ros2.org) also targets next
Ubuntu?

Ubuntu24.04

Prepare: Commission logo/turtle icon
●
●
●
●
●
●
●

~January
Contact the artist (Joshua Ellingson)
Give artist the release name and someideas for logo
Artist comes up with a few sketches
ROS 2 core team votes on options
Artist does final artwork
Adapt artwork to turtlesim icon●●●Announced on discourse
Typically happens one week before overall freeze(Jazzy: April 8, 2024)
After RMW freeze, no new features or APIs to the rmw
layer or below○ Includes the DDS implementations (e.g. Fast-DDS,CycloneDDS, etc)
○ Includes the rmw implementations (e.g.
rmw_fastrtps, rmw_cyclonedds, etc)
○ Includes the rmw API●●●

6 weeks before release (Jazzy: April 15, 2024)
After freeze, no more API changes or featuresin core packages
Bug fixes are still allowedUpdate Rolling core package binaries●●Release all changes that made it into Rolling before the freezes○ Bump and tag source version on rolling○ Bloom changes
Ensures all binary packages are up-to-date with the sourcesBranch: sources for core repositories
●

●
●
●

Branch core sources off of Rolling○ each core repository (eg. rclcpp) will now
have a <distro> branchThis opens Rolling back up for API/ABI breaking
changes
But keeps <distro> stable for testing and release
Create a new <distro> ros2.repos file
○ Sources reference the branches createdabove○ CI jobs will now use this ros2.repos filejazzy

Branch: create new distro binaries●Run a script which “migrates” Rolling to the new distribution○ Creates a new rosdistro/distribution.yaml file○ Creates new release track in the ros2-gbp repositories○ Creates binaries for the new distribution●This is why all releases in Rolling must use https://github.com/ros2-gbp for
release repository; easiest way to ensure we have permissions to do thisbranchingTest: interim tarballs●●●Tarballs are built at https://ci.ros2.org/view/packaging/
Can be downloaded and run without installing anything additional
Available for all Tier-1 and Tier-2 platforms:○ Ubuntu Linux amd64○ Ubuntu Linux arm64○ RHEL Linux amd64○ Windows amd64

Test: announce branch and beta●
●Announced on discourse
Also call for testing during thetutorial party

Build & test: tutorial party●●●Core devs and community test out
the code
List of test cases is generated athttps://github.com/osrf/ros2_test_cases/
Make ﬁxes to the core based ontesting○ Bump patch versions and bloomreleases

Release!
●●●●

Mark distribution as active on○ rosdistro○ index.ros.org○ ros.org○ docs.ros.org
Run “sync” job on buildfarm to move packages from ros2testing into main.
Create tagged source release on ros2/ros2 and upload
tarballs.
Make the announcement post on discourse

Post release!
●●●●

Reflect on release with ROS 2 working group team andgarner feedback.
Ensure docker image is available for new distribution.
Prepare for Patch release 1 if any fixes are needed rightafter release.
Periodically sync packages and fix bugs that may arise
along the lifetime of the release.

Conclusion