[WinStory #6]一个完整的 Windows 版本号有多长?Windows 版本标签的命名规则
知乎:https://zhuanlan.zhihu.com/p/616955624
简述
版本标签(build tag)是 Windows 编译的唯一标识符,包括版本号、架构、构建分支、编译时间戳等。
构建标记首次引入是在 Windows 2000 开发的末期,但直到 Windows XP 开发的早期它们才进入到 Windows 构建中。此后,构建标签作为版本信息的一部分显示在winver中。它也是大多数 Windows 预发布版本的水印的重要部分。

格式
现在的 Windows 版本标签格式通常是:
version.arch.lab.timestamp
(version:版本号;arch:架构;lab:构建分支/构建实验室名称;timestamp:时间戳)
如下图,这是 Windows 11 最新预览版的版本号:Build 25324.1011
它的完整形式是:10.0.25324.1011.amd64fre.rs_prerelease.230317-1418


某些 Windows 版本的标签可能具有如下格式:
version (lab.timestamp)
version built by: lab at: timestamp
version built by: lab
那么,它们具体都是些什么,又遵循什么样的命名规则?
版本
格式为主版本号.次版本号.构建版本号.增量更新号(UBR),如 10.0.25324.1011
(主要和次要版本或增量更新号经常被省略)
架构
即该版本针对的目标架构+构建类型(fre
对于免费/零售构建,chk
对于检查/调试构建)(可省略)
已知的目标平台标识符如下:
x86
用于 32 位x64
,amd64
用于 64 位ia64
用于安腾架构woa
,arm
用于 ARM32arm64
用于 ARM64
分支/构建实验室/私有构建
分支与构建实验室(build lab):构建实验室或 VBL (虚拟构建实验室)通常是指负责开发一部分 Windows 的团队,或团队处理的源代码分支。
自 Windows XP 开发开始以来,微软使用了多个分支系统,它们在实验室层次结构和命名方案上有所不同。然而,大多数方案都有一些共同的细节,例如最顶层主分支的存在,或者使用特殊分支来实现重要的开发里程碑。
Whistler 和重置前的 Longhorn
main 和 Lab 分支:最顶层的分支称为 main,它集成了所有实验室的更改。在它下面是几个编号的实验室,每个实验室都在 Windows 的一个单独部分上工作,例如:
Lab01:内核
Lab02:网络
Lab03:服务器
Lab04:终端服务
Lab06:用户界面
Lab07:互联网信息服务/COM+
这些实验室还有一个“_N”分支,用作主分支和实际分支之间的缓冲区。例如,来自 main 的更改将首先集成到 Lab06_N 中,然后再通过称为前向集成的过程集成到 Lab06 中。这同样适用于反向集成,实验室首先将更改集成到其 N 分支中,然后再将它们集成到主分支中。
如:Build 6.0.3683.Lab06_N.020923-1821,Build 6.0.4040.Lab04_N.030828-1910 等
idx(内部开发工作站/服务器)分支:这一分支通常是针对 TAP/OEM 合作伙伴的重新编译。但是,它们偶尔也会发布用于公开测试,例如 Build 6.0.4074.idx02.040425-1535。
其他:在 Windows XP 发布之前,Windows XP 从主干中分离,分叉到了 xpclient 分支,而主分支继续跟踪 Windows Server 2003 的开发。最终版本发布后,为更新、修补程序和服务包开发创建了新的分支(如 xpsp1)。同样,dnsrv 是由主干分叉出来的 Windows Server 2003 的分支。


不同分叉(简图)
重置后
在Longhorn的开发重置后,实验室的层次结构进行了彻底改革,以解决困扰大部分重置前时期的缺陷。引入了具有更多功能分支的新分层模型,而不是拥有少量的通用虚拟构建实验室,每个实验室都专注于 Windows 功能的不同一般范围,这有助于减少分支反向集成的代码量。将来自实验室的修改反向集成到主干的标准更为严格,主干现在更名为 winmain。
功能分支前缀
随着时间的推移,微软使用了多个前缀来指代功能分支:
vbl(虚拟构建实验室)- Windows Vista Beta(如 6.0.5284.0.vbl_media_ehome.051218-1800)
fbl(功能分支级别)- Windows 7 至 Windows 10 版本 1507
rs (Redstone) :Windows 10 版本 1703 至今
fs (Firesteel) - Windows 11(原始版本)
注:
目前,fs 分支与 rs 分支并行使用;
Windows 10 版本 1511 和 1607 分别使用其各自的发布分支前缀指代功能分支 - th2 和 rs1。
发布分支前缀
与之前的系统类似,主分支在发布前被分叉出来以包含更新开发。以下是已知前缀的列表:
vista , longhorn , lh - Windows Vista 及其服务包 , Windows Server 2008
win7 - Windows 7 , Windows Server 2008 R2
win8 - Windows 8 , Windows Server 2012
winblue - Windows 8.1 , Windows Server 2012 R2
th1 - Windows 10(原始版本)
th2 - Windows 11 月 10 日更新
rs1 - Windows 10 周年更新,Windows Server 2016
rs2 - Windows 10 创意者更新
rs3 - Windows 10 秋季创意者更新
rs4 - Windows 2018 年 4 月 10 日更新
rs5 - Windows 10 版本 1809,Windows Server 2019
19h1 - Windows 版本 1903,Windows 2019 年 11 月 10 日更新
vb (Vibranium) - Windows 10 版本 2004 及以后的累积更新
mn (锰)
fe(铁)-Windows Server 2022
co(钴)-Windows 11(原始版本)
ni(镍)- Windows 11 2022 更新
其他团队使用的分支前缀
一些使用 Windows 代码库但正式独立于 Windows 版本的团队拥有自己的分支前缀:
rd(red dog 红狗)- Azure
oc -OneCore
xb - Xbox
私有构建:不是由构建实验室机器构建,而是由个别 Microsoft 员工编译的构建称为私有构建。这可以通过 在可执行文件的版本信息中设置的文件标签 VS_FF_PRIVATEBUILD,或构建标签的分支部分所包含的发起构建的人员或服务的帐户名来识别。
私人构建,在分支字符串末尾,括号中发起构建的帐户的用户名;这有时可以是官方构建服务帐户,例如 wincbld(Windows Central Build Account)或 wmbla(Windows Main Build Lab Account)。
例如,Build 6.0.4067.private/lddm_dev_tech(davidmo).040212-1646 是由用户 davidmo 编译的私有构建。
时间戳
即编译时间,格式为 YYMMDD-hhmm
。
注:版本标签后面可能跟有来自注册表的激活数据的散列,尽管它不被认为是版本标签本身的一部分。
位置
目前的 Windows 版本标签位于注册表下 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion 的 BuildLab(缩略标签) 和 BuildLabEx(完整标签)两个键值中。 但是,它可能不一定与某些 Windows 10 更新中 winver 中报告的标签相匹配,例如 Windows 10 版本 1909 和 2004+,因为内部版本号是通过单独的机制人为增加的,以便区分更新。
从 Windows Server 2022 开始,版本标签也可以在 HKEY_LOCAL_MACHINE\SYSTEM\Software\Microsoft\BuildLayers 中的 OSClient 和 ShellCommon 子项下找到。
在旧版本的 Windows 中,版本标签被插入到系统文件的文件版本信息中。 由于在 Windows 10 版本 1703 的开发过程中实施了可重现的构建,大多数文件现在只包含一个带有完整版本号的伪构建标签,但同时还包含一个实验室和时间戳占位符组件,即 (WinBuild.160101.0800),因为包含构建时间戳这一行为打破了“编译相同的源代码无论如何都会产生完全相同的二进制代码”这一确定性前提。

至于第二张图的版本号上方的“23H1”的具体命名规则,我们将会在下期进行讨论。
参考资料
https://betawiki.net/wiki/Build_tag
https://betawiki.net/wiki/Build_lab