[具身智能-665]:ROS2 Humble / Jazzy 为什么不能合并为单一分支统一演进
先给出核心结论Humble、Jazzy 是两套独立 ROS2 发行版Distribution不是同一个代码主干上的不同 tag底层操作系统基线、ABI 冻结策略、迭代规则、维护目标完全隔离。强行合并在工程上不可行同时违背 ROS2 官方发布规范REP-2000/REP-2001。下面从五层由浅入深完整拆解同时结合你关注的TogetheROS.Bot/RDK 开发场景补充工程推论。一、基础概念澄清ROS2 Distribution ≠ Git Tag很多人会误解能不能像普通软件一样一个 main 分支打不同 tag 区分 Humble/Jazzy共用一套代码ROS2 体系定义Distribution发行版 一套锁定版本的完整软件包集合包含rclcpp、rmw、Nav2、RViz2、消息接口、第三方包、Deb 二进制包。 每一个发行版拥有独立源码分支、独立构建流水线Buildfarm、独立软件源。Rolling开发主干允许破坏性 API 变更Humble从 Rolling 某一时间点切出分支冻结 API/ABIJazzy两年后再次从 Rolling 切出新分支再次冻结 API/ABI一旦分支切分完成两个 LTS 分支只能单向 Backport修复类补丁不能双向合并新特性。二、第一层硬性约束底层操作系统基线完全不同最不可逾越表格版本绑定系统编译器Python系统 glibc / 底层库HumbleUbuntu 22.04 JammyGCC11Python3.10glibc 2.35Qt5JazzyUbuntu 24.04 NobleGCC13Python3.12glibc 2.39Qt6关键后果系统库 ABI 不兼容glibc、Boost、OpenCV、Qt、Python 大版本之间存在二进制断层一套源码无法同时兼容两套系统环境。编译条件、头文件、语法校验标准不同GCC13 启用更多新 C 标准、更多严格警告Qt5 与 Qt6 API 大量断裂RViz2 最大痛点。ROS 官方规范 REP-2000 明确一个 ROS 发行版仅能 Tier1 完整支持单一 Ubuntu LTS。 维护两套系统基线的编译、CI、二进制包构建成本极高官方不会让一个分支同时兼容 22.0424.04。类比理解你无法用同一套源码同时编译适配 Windows10 和 Windows11 的大型软件底层依赖链差异过大。三、第二层核心规则发布后 API/ABI 冻结策略最关键架构约束ROS2 核心铁律✅任何已经发布的 LTS 发行版内部禁止引入破坏性 API/ABI 变更只允许合并 Bug 修复、安全补丁非破坏性修改。❌重大架构重构、接口调整、新特性只能在 Rolling 主干开发等待下一个新发行版分支切分时纳入。推演如果 Humble 和 Jazzy 合并到一条分支会发生什么Jazzy 要加入新特性执行器重构、跨进程 LoanMessage、TypeDescription 改进必然修改 rclcpp 内部接口一旦修改接口直接破坏 Humble 的 ABI 稳定性所有基于 Humble 编译的机器人产品、第三方包会编译失败 / 运行崩溃工业机器人厂商投入大量资金开发的产品依赖 “LTS 版本 5 年内 ABI 稳定” 作为长期质保基础。新功能 ≠ 可以向下兼容很多底层优化执行器调度、DDS 消息序列化、零拷贝接口无法做到兼容实现只能打破接口。 因此官方设计破坏性改动必须等待新发行版窗口直接切出新分支。四、第三层通信层中间件RMW/DDS存在序列化断层Humble 默认 CycloneDDS 0.9.xJazzy 升级 CycloneDDSFastDDS 版本跨度更大2.6 → 2.14。自 Iron 开始引入REP-2011 Type HashRIHS01 类型哈希消息序列化元数据发生变化。 Humble 节点无法直接和 Jazzy 节点原生互通消息收发会匹配失败。如果代码合并在同一分支必须维护两套 RMW 适配逻辑分支内充斥大量#ifdef ROS_DISTRO_JAZZY条件编译代码急剧腐化维护成本爆炸。五、第四层构建、打包、CI 流水线架构天然隔离ROS 官方依靠Buildfarm 构建农场自动生成 apt 二进制 deb 包Humble 软件源ros-humble-xxx为 Ubuntu22.04 编译Jazzy 软件源ros-jazzy-xxx为 Ubuntu24.04 编译两套流水线独立 CI 任务、独立测试矩阵、独立 rosdistro 软件清单。 若合并为单一代码分支每次提交必须同时在 22.04/24.04 双环境全量测试CI 耗时翻倍无法区分补丁应当发布到哪个发行版第三方包维护者必须同时维护两套分支社区负担巨大。六、第五层产品生命周期与商业诉求分层行业存在两类大量并行存在的机器人项目存量成熟产品基于 Humble生命周期到 2027追求绝对稳定拒绝任何底层改动全新下一代项目基于 Jazzy想要新执行器、新零拷贝、更长支持周期至 2029。如果强行合并为一条主线存量产品被迫接收底层架构改动引入未知风险新项目被旧版本兼容性枷锁限制无法引入现代化优化。独立分支本质是 “风险隔离”老项目稳定维护新项目自由演进。七、澄清一个常见误区能不能通过条件编译一套代码兼容两个版本技术上理论可行但工程上极度不推荐官方拒绝采用代码充斥大量发行版判断宏可读性、可维护性暴跌任意修改都要双版本验证BUG 引入概率大幅上升无法保证 ABI 稳定违背 LTS 设计初衷第三方开发者、硬件厂商如地平线 TROS.B需要维护两套适配没有简化任何工作量。地平线 TogetheROS.Bot 现状正是这套逻辑的体现锁定 Humble 分支开发不会尝试同时兼容 HumbleJazzy避免两套底层系统、两套 ROS 接口带来的适配灾难。八、整体演进流程极简梳理看懂分支流转Rollingmain 开发分支所有新特性、架构修改、破坏性改动全部在这里开发发行时间点偶数年 5 月从 Rolling切出新 LTS 分支例如 2022 切 Humble2024 切 Jazzy新分支切出后Rolling 继续自由迭代不受约束Humble/Jazzy 各自冻结 API仅接纳不破坏接口的 Bug 修复修复补丁流程补丁先合入 Rolling确认稳定后选择性 Backport到 Humble/Jazzy单向搬运不反向合并功能plaintextRolling(main) ───────┬──────持续开发新特性、破坏性修改 │ ┌──────────▼──────────┐ │ Humble2022切出 │ 仅bug修复无新功能 └─────────────────────┘ │ ┌──────────▼──────────┐ │ Jazzy2024切出 │ 仅bug修复无新功能 └─────────────────────┘九、落地层面总结结合 RDKTROS.Bot 场景不要幻想 “一套代码同时兼容 HumbleJazzy” 做产品底层系统、DDS、Qt、rclcpp 多重断层TROS.B 选择 Humble 作为基线本质也是顺应这套 ROS 版本策略锁定单一发行版集中力量做软硬协同优化技术选型决策存量设备、RDK 项目坚守 Humble避免跨版本迁移成本全新无硬件绑定、长期规划项目评估 Jazzy但要接受第三方驱动、硬件 SDK 适配滞后问题。