摘要

  • IESG 于 2026 年 8 月 18 日宣布批准 draft-ietf-netmod-yang-semver-28 以 Proposed Standard 发布。文件为 YANG 模块定义语义版本标识,并允许 YANG Library 公布相应版本信息。
  • 版本号表达维护者对两个模块制品关系的分类。它不能证明目标服务器拥有一致的模块集、已启用所需功能、没有冲突偏差、实现了预期行为,更不能自动授予生产变更权。准入还必须核对目标的完整模式语境与运行证据。

一个正确比较为何会产生错误准入

开篇是假设场景,不是任何厂商或运营网络的真实事故。问题来自把依赖提示升级成了生产许可。

recommended-min-version 让使用者说明自己偏好的最早兼容版本。比较只看三个数字,不看兼容性修饰符,也不看预发布和构建元数据。因此,更高的主版本会满足下限,带 _non_compatible 的版本也可能满足。

如果找不到合适版本,文件建议编译器发出警告,然后继续按普通 YANG 导入规则解析。这个设计保留松耦合:建议是选择线索,不是硬锁。自动化若把“数字达到下限”直接写成“目标可以变更”,就替字段虚构了它从未拥有的权力。

获批文件让模块谱系可被机器读取

第 28 版 “YANG Semantic Versioning” 已获 IESG 批准,目前仍在 RFC Editor 队列中,所以还是 Internet-Draft。它是 NETMOD 工作组成果;批准公告记录了总体共识、少量分歧以及仍在发展的工具支持。

ysv:version 采用 X.Y.Z_COMPAT,还可附加预发布与构建信息。通常,主版本增加表示不向后兼容,次版本增加表示兼容扩展,补丁版本增加表示兼容的编辑性变化。

模块名与语义版本共同指向一个具体修订和内容。对依赖管理而言,这比只靠日期更容易表达祖先关系。YANG Library 也可以公布服务器声称实现的版本。

这些能力解决“指的是哪个制品、它在什么谱系位置”。它们没有直接回答“这台设备启用了什么、编译后的树是什么、真实执行会怎样”。

兼容性首先是维护者对制品变化的判断

版本由模块作者或维护者赋予。规则约束其含义,却允许采用比最低要求更大的增量,也允许跳过版本。因此,它不是目标设备独立测量出来的结果。

文件明确提醒:版本号不保证描述的变化确实发生,也不保证某个使用者一定受到影响。实际差异要靠模式比较确认;具体工作流与设备行为要靠实例验证和实现测试确认。

孤立模块的兼容并不等于整个目标模式兼容。另一个模块可能通过 augmentation 加入必填节点;目标可能关闭可选 feature;deviation 可能删除、替换或收紧节点。原模块的版本仍然准确,但控制器看到的有效树已经不同。

所以“兼容”必须带范围:它是维护者依据规则对一条制品谱系作出的声明,不是对所有设备、配置和变更目标的担保。

不兼容分支会留下不能擦除的痕迹

_compatible 与 _non_compatible 用于表达有限的中间分支。一旦同一主版本和次版本分支出现 _non_compatible,该分支后续版本不能删掉这一标记,也不能重新称为兼容。

这个黏性规则保存历史,防止后续编辑把已经跨过的兼容边界清洗掉。证据系统因此必须保留完整标识,不能只保存三个数字。

而建议下限恰好只比较数字。这符合“偏好”的定位,却不足以成为准入结论。组织若要拒绝某类修饰符,需要在解析出具体制品后执行自己的规则集并记录原因,不能假装下限字段已经替它决定。

设备公布的是一个组合环境

YANG Library 描述模块集:模块与修订、只导入模块、子模块、启用功能、偏差和位置。语义版本可以补充其中的版本信息,但无法代替整份清单。

草案也把构建一致模块集的责任排除在扩展范围之外,并指向 YANG packages 等相邻工作。两台设备即使公布同一核心模块版本,也可能因为周边模块、功能和偏差不同而形成不同的有效模式。

RFC 7950 规定导入、扩展、功能与偏差如何组合模型;RFC 8525 让客户端发现目标清单;RFC 9907 改善修订标签。它们逐层减少不确定性,却没有替目标运行软件、校验现有数据或执行变更。

准入真正需要比较的是目标软件与配置类别下编译出的完整模式,而不是某个模块旁边的一串数字。

准入链要保留每一项证据的职责

可靠控制器应记录请求的约束、解析出的制品和哈希、完整语义版本、目标 YANG Library 快照、有效模式哈希、前后模式差异、实例校验结果、实现测试、目标软件与配置类别,以及有权接受剩余风险的责任人。

不同失败要分别处置:下限不满足是依赖选择问题;不兼容修饰符是谱系规则问题;功能缺失或偏差冲突是目标模式问题;运行回归是实现问题;没有批准则是治理问题。

若统称“版本错误”,操作者只会得到一个诱人的强制覆盖按钮。分别记录,才能选择其他制品、修正模块组合、扩大实验测试、限制金丝雀范围或交由服务所有者判断。

版本号应当位于准入链的前端,负责缩小候选范围。最终关口必须留给目标证据和承担后果的人。

来源