ROS 2 Learning Path  ยท  Reference Appendix

Appendix B: ROS 2 Distributions and Lyrical Luth

Understanding ROS 2 releases, choosing one for a real robot, and working day-to-day with ROS 2 Lyrical Luth
Audience: anyone installing, upgrading, or maintaining a ROS 2 system
Prerequisites: Chapter 1 (Architecture) and Chapter 2 (Development Environment)
Focus distribution: ROS 2 Lyrical Luth
Reading time: 45โ€“60 minutes
โš ๏ธ A note on how to read this appendix

ROS 2 releases a new distribution every year, and support windows, package availability, and tooling change with every release. Everything version-specific below (release dates, EOL dates, Ubuntu pairings, Gazebo pairings) was checked against Open Robotics' own release documentation and announcements at the time this book was written. A few narrower technical details โ€” most notably the exact default RMW implementation and the precise C++/Python baseline shipped with Lyrical โ€” could not be confirmed against a primary, directly-fetchable source at writing time and are marked "not confirmed here โ€” check docs.ros.org" instead of being guessed. Before you build a production system on any fact in this appendix, re-check it against docs.ros.org for your exact distribution, since this information ages the moment a new release ships.

What's in this appendix B.1What is a ROS 2 distribution, and why do they exist? B.2ROS 2 distribution timeline B.3LTS versus non-LTS releases B.4Rolling Ridley B.5Humble vs. Jazzy vs. Kilted vs. Lyrical B.6Introducing ROS 2 Lyrical Luth B.7Ubuntu and platform compatibility B.8Installing ROS 2 Lyrical B.9Environment setup and sourcing B.10Verifying the installation B.11Essential ROS 2 CLI commands B.12Workspaces, colcon, and rosdep B.13Creating your first package B.14DDS, RMW, ROS_DOMAIN_ID, and QoS B.15Debugging the ROS graph and rosbag2 B.16Nav2, ros2_control, Gazebo, and MoveIt 2 on Lyrical B.17Migrating from Humble, Jazzy, or Kilted B.18Jetson, Raspberry Pi, and Docker B.19How to choose a ROS 2 distribution B.20Common mistakes and a cheat sheet

B.1What is a ROS 2 distribution, and why do they exist?

A ROS 2 distribution (or "distro") is a versioned, tested collection of compatible ROS 2 packages โ€” rclcpp, rclpy, colcon, rviz2, tf2, rosbag2, and thousands of community packages โ€” that are all built, released, and supported together against a specific set of operating systems, compilers, and dependency versions.

ROS 2
โ”‚
โ”œโ”€โ”€ Humble Hawksbill  (LTS)
โ”œโ”€โ”€ Jazzy Jalisco     (LTS)
โ”œโ”€โ”€ Kilted Kaiju      (non-LTS)
โ”œโ”€โ”€ Lyrical Luth      (LTS)
โ””โ”€โ”€ Rolling Ridley    (continuous development)

ROS 2 itself is not an operating system โ€” it runs on top of one (mainly Linux, with Tier 1 or Tier 2 support for Windows and, on some releases, macOS). A distribution exists for the same reason a Linux distribution exists: dozens of interdependent packages need to be built, tested, and shipped together against one specific set of library versions, or nothing is guaranteed to work with anything else.

Distributions solve five concrete engineering problems:

๐Ÿ’ก Simple idea

Think of a ROS 2 distribution the same way you think of an Ubuntu release: not a single program, but a coordinated, tested snapshot of an entire ecosystem, frozen at a point in time and supported for a known window.

B.2ROS 2 distribution timeline

Every ROS 2 distribution is codenamed alphabetically, and (since Foxy) released once a year in May.

DistributionReleasedLTS?Support endsUbuntuRecommended today?
Ardent ApaloneDec 2017NoDec 201816.04โŒ EOL
Bouncy BolsonJun 2018NoJun 201918.04โŒ EOL
Crystal ClemmysDec 2018NoDec 201918.04โŒ EOL
Dashing DiademataMay 2019YesMay 202118.04โŒ EOL
Eloquent ElusorNov 2019NoNov 202018.04โŒ EOL
Foxy FitzroyMay 2020YesMay 202320.04โŒ EOL
Galactic GeocheloneMay 2021NoNov 202220.04โŒ EOL
Humble HawksbillMay 2022YesMay 202722.04โš ๏ธ Legacy-compatible only
Iron IrwiniMay 2023NoNov 202422.04โŒ EOL
Jazzy JaliscoMay 2024YesMay 202924.04โœ… Still fully supported
Kilted KaijuMay 2025NoNov 202624.04โš ๏ธ Near end of support
Lyrical LuthMay 2026YesMay 203126.04โœ… Recommended for new work
Rolling RidleyContinuousN/AOngoingtracks newest UbuntuDev/maintainers only
โš ๏ธ Legacy warning

Do not start a new production system on an EOL distribution (anything above Iron in this table) unless you have a specific legacy dependency you cannot yet move off of. EOL means no security patches, no bug fixes, and packages that will progressively stop building against current Ubuntu images.

B.3LTS versus non-LTS releases

LTS (Long Term Support) distributions โ€” Humble, Jazzy, and Lyrical โ€” get roughly five years of patches and security fixes. Non-LTS distributions like Iron and Kilted get about a year and a half, and exist mainly to ship new capabilities faster between LTS releases.

Humble  โ†’ LTS  (5 years)
Jazzy   โ†’ LTS  (5 years)
Kilted  โ†’ non-LTS (~18 months)
Lyrical โ†’ LTS  (5 years)

Robotics teams care about LTS releases specifically because of:

๐Ÿ”ง Engineering decision

A production robot shipped on Jazzy in 2025 does not need to move to Lyrical the day it releases. Jazzy is supported until May 2029 โ€” the right question is not "is there a newer LTS?" but "does staying on Jazzy still meet my hardware, driver, and security requirements?"

B.4Rolling Ridley

Rolling Ridley is structurally different from every other entry in the table above: it is not a fixed, dated release โ€” it is a continuously updated development line that tracks the newest Ubuntu and the latest package versions as maintainers merge them.

Stable distribution (Jazzy, Lyrical, ...)
        โ†“
fixed release, fixed lifecycle
        โ†“
predictable, frozen APIs

Rolling Ridley
        โ†“
continuously updated
        โ†“
newest features, but breaking changes can land at any time

Rolling exists for package maintainers and Open Robotics itself: every future stable release (the next Lyrical-successor) is branched from Rolling at release time. It is where new features land first and get shaken out before being frozen into a named distribution.

๐Ÿ’ก When to use Rolling

Use it if you maintain a package and need to keep it building against upcoming ROS 2 changes, or you need a feature that hasn't shipped in a stable distro yet and you accept the risk.

Don't use it for a production robot, a classroom, or any project where "it worked yesterday" needs to still be true tomorrow.

B.5Humble vs. Jazzy vs. Kilted vs. Lyrical

Rather than a vague "newer is better," here is what actually changed release to release, limited to points that are officially documented:

AreaHumbleJazzyKiltedLyrical
Ubuntu22.0424.0424.0426.04
LTSYesYesNoYes
Paired GazeboGazebo Classic / FortressGazebo HarmonicGazebo IonicGazebo Jetty
Middleware optionsFast DDS, Cyclone DDS, ConnextFast DDS, Cyclone DDS, Connext+ Eclipse Zenoh (Tier 1)Fast DDS, Cyclone DDS, Connext, Zenoh
Python executor perf.baselinebaselineC++ Events Executor ported to rclpyNew EventsCBGExecutor (callback-group events)
Async Python supportโ€”โ€”โ€”rclpy AsyncNode (native asyncio)
rosbag2baselinebaselinemulti-bag simultaneous playback, interactive progress barremote recording control via services
โš ๏ธ What this appendix will not claim

Distro-by-distro changes to QoS defaults, the launch system's internals, and colcon/ament internals were not confirmed against a primary source while writing this appendix, so they are deliberately left out here rather than guessed. Check the "Migration" page of each release on docs.ros.org for the authoritative, exhaustive list before relying on a specific behavioral change.

B.6Introducing ROS 2 Lyrical Luth

Lyrical Luth is the 12th official ROS 2 distribution, released in May 2026, and is an LTS release supported until roughly May 2031. It follows Kilted Kaiju (non-LTS) and, like Jazzy before it, pairs with the current Ubuntu LTS โ€” Ubuntu 26.04.

๐Ÿ“– Lyrical Luth at a glance

Release: May 2026  ยท  LTS: Yes, until ~May 2031

Tier 1 platform: Ubuntu 26.04 (amd64, arm64), Windows 11 / VS2022 (amd64)

Tier 2: RHEL 10 (amd64)

Tier 3: Ubuntu 24.04 (Noble), Debian Trixie, macOS, OpenEmbedded

Default RMW / default Python-C++ baseline: not confirmed here โ€” verify against docs.ros.org/en/lyrical for your build before depending on it.

Changes that are specifically attributable to Lyrical (not inherited from Kilted or earlier):

โš ๏ธ Don't over-attribute

Features that already existed in Kilted (the ported C++ Events Executor for Python, Zenoh as Tier 1 middleware, multi-bag rosbag2 playback) are not Lyrical-specific โ€” Lyrical inherits them. Only the items listed above are new in Lyrical itself.

For most robotics teams, Lyrical's practical significance is simpler than any single feature: it is the first LTS after Jazzy, meaning it is the release you plan a five-year deployment lifecycle around if you're starting a new robot today and Jazzy's Ubuntu 24.04 base doesn't already fit your hardware constraints.

B.7Ubuntu and platform compatibility

Ubuntu
โ”‚
โ”œโ”€โ”€ 20.04 โ†’ ROS 2 Foxy       (EOL)
โ”œโ”€โ”€ 22.04 โ†’ ROS 2 Humble     (LTS, supported)
โ”œโ”€โ”€ 24.04 โ†’ ROS 2 Jazzy / Kilted
โ””โ”€โ”€ 26.04 โ†’ ROS 2 Lyrical    (LTS, current)

Each ROS 2 distro binds to one primary Ubuntu LTS because the ROS packages are built against that Ubuntu release's exact GCC, CMake, Python, and system-library versions. Installing "the wrong" ROS distro's .deb packages on a mismatched Ubuntu version will fail to resolve dependencies โ€” it is not a supported combination even where it might technically be coerced to work with a source build.

Support tierMeaning
Tier 1Official binary packages, full CI testing, guaranteed to work
Tier 2Built and tested, but with a narrower guarantee (e.g. fewer supported package combinations)
Tier 3Community-maintained or best-effort; may require building from source
UnsupportedTechnically possible (source build, container tricks) but not validated by upstream

Ubuntu compatibility cascades into everything downstream: the Python interpreter version, the GCC/CMake toolchain, system libraries like Boost and OpenSSL, the DDS implementation packages, and โ€” critically for robotics โ€” which Gazebo release is packaged and tested against your ROS distro.

B.8Installing ROS 2 Lyrical

Check your system first

lsb_release -a
uname -a

Confirm you are on the Tier 1 platform (Ubuntu 26.04, amd64 or arm64) before proceeding โ€” installing on a mismatched Ubuntu version is the single most common source of broken ROS 2 installs.

Locale

locale  # check for UTF-8

sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

Enable the ROS 2 apt repository

sudo apt install software-properties-common
sudo add-apt-repository universe

sudo apt update && sudo apt install curl -y
export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F\" '{print $4}')
curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo $VERSION_CODENAME)_all.deb"
sudo apt install /tmp/ros2-apt-source.deb

This is the current (post-Humble) way ROS 2 registers its apt source โ€” it replaced the older manual apt-key + sources.list.d steps you may see in outdated tutorials.

Install

sudo apt update
sudo apt upgrade

sudo apt install ros-lyrical-desktop
Desktop vs. ROS-Base

ros-lyrical-desktop includes RViz2, demos, and simulation-adjacent tooling on top of the core libraries โ€” good for a development machine. ros-lyrical-ros-base installs only the core communication libraries and CLI tools, no GUI tooling โ€” the right choice for a robot's onboard computer, a headless server, or a Docker image where every extra megabyte and dependency matters.

sudo apt install ros-lyrical-ros-base

B.9Environment setup and sourcing

source /opt/ros/lyrical/setup.bash

Sourcing this script sets the environment variables and shell functions ROS 2 needs to find packages, executables, and message definitions. Without it, commands like ros2 won't exist in your shell at all.

echo "source /opt/ros/lyrical/setup.bash" >> ~/.bashrc
source ~/.bashrc

Check what got set:

printenv | grep ROS
ROS_DISTRO=lyrical
ROS_VERSION=2
ROS_DOMAIN_ID=0
ROS_LOCALHOST_ONLY=0
๐Ÿ“– Underlay vs. overlay

Underlay โ€” /opt/ros/lyrical, the base ROS 2 install. Overlay โ€” your own workspace's install/setup.bash, sourced after the underlay, which layers your custom packages on top without touching the base install.

B.10Verifying the installation

Terminal 1:

ros2 run demo_nodes_cpp talker

Terminal 2:

ros2 run demo_nodes_py listener
Talker Node
     โ”‚
     โ”‚ /chatter
     โ–ผ
Listener Node

The talker publishes an incrementing string on /chatter; the listener subscribes and prints what it receives. If both terminals show matching output, your install, your DDS discovery, and your ROS_DOMAIN_ID are all working correctly together.

B.11Essential ROS 2 CLI commands

Command
ros2 doctor

Meaning: Checks your ROS 2 environment, network configuration, and installation for common problems. When to use: First thing you run when "something is wrong" and you don't know what yet.

CommandPurpose
ros2 node list / ros2 node info <node>See which nodes are running, and what each one publishes/subscribes/serves
ros2 topic list / echo / info / hzInspect topics, watch live data, check publish rate
ros2 topic pubManually publish a message for testing
ros2 service list / type / callInspect and call ROS 2 services
ros2 action list / info / send_goalInspect and trigger long-running actions
ros2 param list / get / setRead and change node parameters at runtime
ros2 interface list / showList and inspect message/service/action definitions
ros2 pkg list / executablesList installed packages and their runnable executables
ros2 run <pkg> <exe>Run a single node executable
ros2 launch <pkg> <file>Start a whole system of nodes together

B.12Workspaces, colcon, and rosdep

ros2_ws/
โ”‚
โ”œโ”€โ”€ src/       โ† your source packages
โ”œโ”€โ”€ build/     โ† intermediate build artifacts
โ”œโ”€โ”€ install/   โ† what you actually source
โ””โ”€โ”€ log/       โ† build/test logs
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
source install/setup.bash
CommandWhen to use it
colcon buildBuild every package in src/
colcon build --symlink-installSymlink Python/launch/config files instead of copying โ€” edit-and-rerun without rebuilding, essential during Python development
colcon build --packages-select <pkg>Build just one package
colcon build --packages-up-to <pkg>Build a package and everything it depends on
colcon test / colcon test-resultRun and inspect a package's tests
๐Ÿ“– apt vs. pip vs. rosdep vs. colcon

apt installs system packages. pip installs Python packages. rosdep doesn't install anything itself โ€” it reads each package's package.xml and figures out which apt/pip commands to run to satisfy its dependencies. colcon builds your workspace's source packages, it does not manage dependencies at all.

sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -r -y

B.13Creating your first package

# Python package
ros2 pkg create --build-type ament_python my_robot_pkg

# C++ package
ros2 pkg create --build-type ament_cmake my_robot_cpp

ament_python packages are built with setup.py/setup.cfg and pure Python; ament_cmake packages use CMakeLists.txt and compile C++ sources. A package can also mix both when it needs C++ performance-critical nodes alongside Python tooling.

B.14DDS, RMW, ROS_DOMAIN_ID, and QoS

ROS 2 API
    โ”‚
rclcpp / rclpy
    โ”‚
   rcl
    โ”‚
   RMW  (ROS middleware interface)
    โ”‚
DDS implementation (Fast DDS / Cyclone DDS / Zenoh / ...)
    โ”‚
 Network

The RMW layer lets ROS 2 swap DDS/middleware implementations without changing application code. Check the active one with:

echo $RMW_IMPLEMENTATION

Only change the middleware implementation for a concrete engineering reason โ€” e.g. Zenoh for constrained or lossy links, or a specific vendor's Connext for a certified deployment โ€” never as a default habit.

export ROS_DOMAIN_ID=10
Robot A, ROS_DOMAIN_ID=10 โ”€โ”
                            โ”œโ”€ can discover each other
Robot B, ROS_DOMAIN_ID=10 โ”€โ”˜

Robot C, ROS_DOMAIN_ID=20  โ”€ isolated
โš ๏ธ Domain ID is not security

ROS_DOMAIN_ID only partitions discovery on a shared network. It provides no authentication or encryption โ€” anyone on the same physical/logical network segment and domain can see and inject traffic. Real security requires DDS Security (authentication, access control, encryption) explicitly configured.

QoS (Quality of Service) exists because one policy doesn't fit every topic:

B.15Debugging the ROS graph and rosbag2

Practical workflow for "the motors aren't moving":

1. Is the navigation node alive?      โ†’ ros2 node list
2. Does /cmd_vel exist?               โ†’ ros2 topic list
3. Is /cmd_vel actually publishing?   โ†’ ros2 topic hz /cmd_vel
4. What does it contain?              โ†’ ros2 topic echo /cmd_vel
5. Is the controller subscribed?      โ†’ ros2 topic info /cmd_vel
6. Are message types compatible?      โ†’ ros2 topic info /cmd_vel --verbose
7. Are QoS profiles compatible?       โ†’ ros2 topic info /cmd_vel --verbose

Record and replay real robot data for offline debugging:

ros2 bag record /scan /odom /cmd_vel
ros2 bag play my_bag
ros2 bag info my_bag

B.16Nav2, ros2_control, Gazebo, and MoveIt 2 on Lyrical

Sensors โ†’ Localization โ†’ Global Planner โ†’ Local Planner/Controller โ†’ /cmd_vel โ†’ Robot

Nav2 and ros2_control are both released per-distro alongside ROS 2 core and follow the same Ubuntu/ROS pairing โ€” install them as ros-lyrical-navigation2 and ros-lyrical-ros2-control once your apt source is configured.

Controller Manager
      โ”‚
      โ”œโ”€โ”€ Joint State Broadcaster
      โ”œโ”€โ”€ Diff Drive Controller
      โ””โ”€โ”€ Other Controllers
              โ”‚
              โ–ผ
       Hardware Interface
              โ”‚
              โ–ผ
        Motor Drivers

Gazebo pairing follows the table in section B.5: Lyrical is packaged against Gazebo Jetty. Do not follow Gazebo Classic tutorials (gazebo_ros_pkgs) on Lyrical โ€” that lineage is discontinued; the current integration path is the ros_gz bridge packages.

Robot Arm โ†’ MoveIt 2 โ†’ Motion Planning โ†’ ros2_control โ†’ Joint Controllers

You need MoveIt 2 when you're planning collision-aware motion for a manipulator; you don't need it for a mobile base that only needs Nav2's 2D planning.

B.17Migrating from Humble, Jazzy, or Kilted

๐Ÿ“– Keep these categories separate

Breaking change โ€” old code stops compiling or running. Deprecation โ€” old code still works but warns, and will break in a future release. Behavioral change โ€” same API, different runtime behavior. New capability โ€” nothing to migrate, purely additive.

Before moving a package from an older distro to Lyrical:

โš ๏ธ A package working on Humble does not imply it works unchanged on Lyrical

Four years and several Ubuntu LTS releases separate them. API evolution, dependency version drift, compiler changes, and whether the maintainer even still builds for the new distro all affect this โ€” always check package compatibility before committing to a distro for a new project.

B.18Jetson, Raspberry Pi, and Docker

NVIDIA Jetson boards ship a specific JetPack/Ubuntu/CUDA combination determined by NVIDIA, which is frequently a version or more behind the newest desktop Ubuntu LTS. Before targeting Lyrical (Ubuntu 26.04) on Jetson hardware, verify NVIDIA's current JetPack base OS โ€” if it hasn't caught up yet, your practical choices are a containerized ROS 2 install (a Lyrical container on an older JetPack host OS), a source build, or staying on the ROS distro that matches your JetPack's actual Ubuntu base.

Native supported install   โ†’ JetPack's Ubuntu base matches a released ROS distro
Containerized ROS          โ†’ run a newer distro's container on an older host OS
Source build               โ†’ build ROS 2 from source against your exact JetPack image
Unsupported workaround     โ†’ forcing package installs across mismatched versions

Raspberry Pi (4/5) with a 64-bit Ubuntu Server or Desktop image gets Tier 1/Tier 3 ARM64 binaries depending on the distro โ€” prefer 64-bit over 32-bit for any current ROS 2 work, since 32-bit support has been dropped across the ecosystem.

Ubuntu Host
โ”‚
โ”œโ”€โ”€ ROS Container
โ”‚    โ”œโ”€โ”€ Nav2
โ”‚    โ”œโ”€โ”€ Perception
โ”‚    โ””โ”€โ”€ Application nodes
โ”‚
โ””โ”€โ”€ Hardware / drivers

Docker gives reproducible dependency isolation and easy deployment, at the cost of extra complexity around DDS discovery across container network boundaries and GPU passthrough for perception workloads.

B.19How to choose a ROS 2 distribution

Starting a new robot?
        โ”‚
        โ–ผ
Need long-term production support?
        โ”‚
        โ”œโ”€โ”€ Yes โ†’ newest LTS compatible with your hardware/OS/driver stack
        โ”‚
        โ””โ”€โ”€ No
             โ”‚
             โ–ผ
     Need newest ROS capabilities?
             โ”‚
             โ”œโ”€โ”€ Stable non-LTS release for early access with real support
             โ””โ”€โ”€ Rolling only if you're a maintainer or doing pure research
ScenarioPreferred strategyReason
Learning ROS 2 todayCurrent supported LTS (Lyrical, or Jazzy)Best documentation coverage and longevity
New production robotNewest LTS compatible with your sensors/Jetson/vendor SDKsFive-year support window
Existing Ubuntu 22.04 fleetStay on Humble until a real reason to moveRe-validation cost of an OS jump is high
Research on newest APIsLatest stable, Rolling only for direct package contributionNew capabilities without maintainer-only instability
Package maintainerTarget Rolling + the active LTS distrosForward and backward compatibility
๐Ÿ”ง Engineering decision

Don't choose a ROS distribution by release date alone. First check your OS, GPU/AI stack (JetPack, CUDA), sensor and LiDAR driver support, Gazebo pairing, Nav2/ros2_control/MoveIt 2 availability, vendor SDKs, and your fleet's real maintenance lifecycle. "Newest ROS" and "best ROS for this robot" are frequently different answers.

B.20Common mistakes and a cheat sheet

SymptomCauseFix
ros2: command not foundForgot to source ROSsource /opt/ros/lyrical/setup.bash
Package not found after buildForgot to source the workspace overlaysource install/setup.bash
apt can't find ros-lyrical-* packagesMixed distro name in package name, or wrong Ubuntu versionMatch the package prefix to your actual installed ROS_DISTRO
Two nodes with the same name conflictDuplicate node names on the graphRename or namespace one of them
Robots on the same LAN can't see each otherDifferent ROS_DOMAIN_IDAlign the domain ID, or intentionally isolate it
Nodes see each other but topics won't connectIncompatible QoS profilesCheck ros2 topic info --verbose and align reliability/durability
Following an old blog post breaks the buildBlog was written for ROS 1, Foxy, Humble, or Gazebo ClassicCross-check every command against docs.ros.org/en/lyrical

Cheat sheet

# Environment
source /opt/ros/lyrical/setup.bash
printenv | grep ROS

# Nodes / Topics / Services / Actions
ros2 node list
ros2 topic list  |  echo  |  info  |  hz
ros2 service list  |  call
ros2 action list  |  send_goal

# Parameters
ros2 param list  |  get  |  set

# Packages & build
ros2 pkg create --build-type ament_python 
colcon build --symlink-install
source install/setup.bash

# Dependencies
rosdep update
rosdep install --from-paths src --ignore-src -r -y

# Diagnostics & recording
ros2 doctor
ros2 bag record / play / info

๐Ÿ“–Glossary

Distribution / distro
A versioned, tested set of compatible ROS 2 packages tied to a specific OS/toolchain.
LTS
Long Term Support โ€” roughly five years of patches, versus about eighteen months for a non-LTS release.
Rolling Ridley
The continuously updated development line every future stable distro branches from.
RMW
ROS Middleware interface โ€” the abstraction layer that lets ROS 2 swap DDS implementations.
DDS
Data Distribution Service โ€” the pub/sub networking standard ROS 2's default transport is built on.
QoS
Quality of Service โ€” per-topic policies (reliability, durability, history) tuned to what that data actually needs.
Overlay / underlay
Underlay = the base ROS install; overlay = your workspace, sourced on top of it.
Tier 1/2/3 support
Open Robotics' guarantee levels for a given OS/architecture combination, from fully tested down to best-effort.