[WinStory #6]一個(gè)完整的 Windows 版本號(hào)有多長(zhǎng)?Windows 版本標(biāo)簽的命名規(guī)則
知乎:https://zhuanlan.zhihu.com/p/616955624
簡(jiǎn)述
版本標(biāo)簽(build tag)是 Windows 編譯的唯一標(biāo)識(shí)符,包括版本號(hào)、架構(gòu)、構(gòu)建分支、編譯時(shí)間戳等。
構(gòu)建標(biāo)記首次引入是在 Windows 2000 開發(fā)的末期,但直到 Windows XP 開發(fā)的早期它們才進(jìn)入到 Windows 構(gòu)建中。此后,構(gòu)建標(biāo)簽作為版本信息的一部分顯示在winver中。它也是大多數(shù) Windows 預(yù)發(fā)布版本的水印的重要部分。

格式
現(xiàn)在的 Windows 版本標(biāo)簽格式通常是:
version.arch.lab.timestamp
(version:版本號(hào);arch:架構(gòu);lab:構(gòu)建分支/構(gòu)建實(shí)驗(yàn)室名稱;timestamp:時(shí)間戳)
如下圖,這是 Windows 11 最新預(yù)覽版的版本號(hào):Build 25324.1011
它的完整形式是:10.0.25324.1011.amd64fre.rs_prerelease.230317-1418


某些 Windows 版本的標(biāo)簽可能具有如下格式:
version (lab.timestamp)
version built by: lab at: timestamp
version built by: lab
那么,它們具體都是些什么,又遵循什么樣的命名規(guī)則?
版本
格式為主版本號(hào).次版本號(hào).構(gòu)建版本號(hào).增量更新號(hào)(UBR),如?10.0.25324.1011
(主要和次要版本或增量更新號(hào)經(jīng)常被省略)
架構(gòu)
即該版本針對(duì)的目標(biāo)架構(gòu)+構(gòu)建類型(fre
對(duì)于免費(fèi)/零售構(gòu)建,chk
對(duì)于檢查/調(diào)試構(gòu)建)(可省略)
已知的目標(biāo)平臺(tái)標(biāo)識(shí)符如下:
x86?
用于 32 位x64
,amd64?
用于 64 位ia64?
用于安騰架構(gòu)woa
,arm?
用于 ARM32arm64?
用于 ARM64
分支/構(gòu)建實(shí)驗(yàn)室/私有構(gòu)建
分支與構(gòu)建實(shí)驗(yàn)室(build lab):構(gòu)建實(shí)驗(yàn)室或 VBL (虛擬構(gòu)建實(shí)驗(yàn)室)通常是指負(fù)責(zé)開發(fā)一部分 Windows 的團(tuán)隊(duì),或團(tuán)隊(duì)處理的源代碼分支。
自 Windows XP 開發(fā)開始以來(lái),微軟使用了多個(gè)分支系統(tǒng),它們?cè)趯?shí)驗(yàn)室層次結(jié)構(gòu)和命名方案上有所不同。然而,大多數(shù)方案都有一些共同的細(xì)節(jié),例如最頂層主分支的存在,或者使用特殊分支來(lái)實(shí)現(xiàn)重要的開發(fā)里程碑。
Whistler 和重置前的 Longhorn
main 和 Lab 分支:最頂層的分支稱為?main,它集成了所有實(shí)驗(yàn)室的更改。在它下面是幾個(gè)編號(hào)的實(shí)驗(yàn)室,每個(gè)實(shí)驗(yàn)室都在 Windows 的一個(gè)單獨(dú)部分上工作,例如:
Lab01:內(nèi)核
Lab02:網(wǎng)絡(luò)
Lab03:服務(wù)器
Lab04:終端服務(wù)
Lab06:用戶界面
Lab07:互聯(lián)網(wǎng)信息服務(wù)/COM+
這些實(shí)驗(yàn)室還有一個(gè)“_N”分支,用作主分支和實(shí)際分支之間的緩沖區(qū)。例如,來(lái)自 main 的更改將首先集成到 Lab06_N 中,然后再通過(guò)稱為前向集成的過(guò)程集成到 Lab06 中。這同樣適用于反向集成,實(shí)驗(yàn)室首先將更改集成到其 N 分支中,然后再將它們集成到主分支中。
如:Build 6.0.3683.Lab06_N.020923-1821,Build 6.0.4040.Lab04_N.030828-1910 等
idx(內(nèi)部開發(fā)工作站/服務(wù)器)分支:這一分支通常是針對(duì) TAP/OEM 合作伙伴的重新編譯。但是,它們偶爾也會(huì)發(fā)布用于公開測(cè)試,例如 Build 6.0.4074.idx02.040425-1535。
其他:在 Windows XP 發(fā)布之前,Windows XP 從主干中分離,分叉到了?xpclient?分支,而主分支繼續(xù)跟蹤 Windows Server 2003 的開發(fā)。最終版本發(fā)布后,為更新、修補(bǔ)程序和服務(wù)包開發(fā)創(chuàng)建了新的分支(如?xpsp1)。同樣,dnsrv?是由主干分叉出來(lái)的 Windows Server 2003 的分支。


不同分叉(簡(jiǎn)圖)
重置后
在Longhorn的開發(fā)重置后,實(shí)驗(yàn)室的層次結(jié)構(gòu)進(jìn)行了徹底改革,以解決困擾大部分重置前時(shí)期的缺陷。引入了具有更多功能分支的新分層模型,而不是擁有少量的通用虛擬構(gòu)建實(shí)驗(yàn)室,每個(gè)實(shí)驗(yàn)室都專注于 Windows 功能的不同一般范圍,這有助于減少分支反向集成的代碼量。將來(lái)自實(shí)驗(yàn)室的修改反向集成到主干的標(biāo)準(zhǔn)更為嚴(yán)格,主干現(xiàn)在更名為?winmain。
功能分支前綴
隨著時(shí)間的推移,微軟使用了多個(gè)前綴來(lái)指代功能分支:
vbl(虛擬構(gòu)建實(shí)驗(yàn)室)- Windows Vista Beta(如?6.0.5284.0.vbl_media_ehome.051218-1800)
fbl(功能分支級(jí)別)- Windows 7 至 Windows 10 版本 1507
rs (Redstone) :Windows 10 版本 1703 至今
fs (Firesteel) - Windows 11(原始版本)
注:
目前,fs 分支與 rs 分支并行使用;
Windows 10 版本 1511 和 1607 分別使用其各自的發(fā)布分支前綴指代功能分支 -?th2?和?rs1。
發(fā)布分支前綴
與之前的系統(tǒng)類似,主分支在發(fā)布前被分叉出來(lái)以包含更新開發(fā)。以下是已知前綴的列表:
vista , longhorn , lh - Windows Vista 及其服務(wù)包 , 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 創(chuàng)意者更新
rs3 - Windows 10 秋季創(chuàng)意者更新
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 更新
其他團(tuán)隊(duì)使用的分支前綴
一些使用 Windows 代碼庫(kù)但正式獨(dú)立于 Windows 版本的團(tuán)隊(duì)擁有自己的分支前綴:
rd(red dog 紅狗)- Azure
oc -OneCore
xb - Xbox
私有構(gòu)建:不是由構(gòu)建實(shí)驗(yàn)室機(jī)器構(gòu)建,而是由個(gè)別 Microsoft 員工編譯的構(gòu)建稱為私有構(gòu)建。這可以通過(guò)?在可執(zhí)行文件的版本信息中設(shè)置的文件標(biāo)簽 VS_FF_PRIVATEBUILD,或構(gòu)建標(biāo)簽的分支部分所包含的發(fā)起構(gòu)建的人員或服務(wù)的帳戶名來(lái)識(shí)別。
私人構(gòu)建,在分支字符串末尾,括號(hào)中發(fā)起構(gòu)建的帳戶的用戶名;這有時(shí)可以是官方構(gòu)建服務(wù)帳戶,例如 wincbld(Windows Central Build Account)或 wmbla(Windows Main Build Lab Account)。
例如,Build 6.0.4067.private/lddm_dev_tech(davidmo).040212-1646 是由用戶?davidmo?編譯的私有構(gòu)建。
時(shí)間戳
即編譯時(shí)間,格式為?YYMMDD-hhmm
。
注:版本標(biāo)簽后面可能跟有來(lái)自注冊(cè)表的激活數(shù)據(jù)的散列,盡管它不被認(rèn)為是版本標(biāo)簽本身的一部分。
位置
目前的 Windows 版本標(biāo)簽位于注冊(cè)表下 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion 的 BuildLab(縮略標(biāo)簽) 和 BuildLabEx(完整標(biāo)簽)兩個(gè)鍵值中。 但是,它可能不一定與某些 Windows 10 更新中 winver 中報(bào)告的標(biāo)簽相匹配,例如 Windows 10 版本 1909 和 2004+,因?yàn)閮?nèi)部版本號(hào)是通過(guò)單獨(dú)的機(jī)制人為增加的,以便區(qū)分更新。
從 Windows Server 2022 開始,版本標(biāo)簽也可以在 HKEY_LOCAL_MACHINE\SYSTEM\Software\Microsoft\BuildLayers 中的 OSClient 和 ShellCommon 子項(xiàng)下找到。
在舊版本的 Windows 中,版本標(biāo)簽被插入到系統(tǒng)文件的文件版本信息中。 由于在 Windows 10 版本 1703 的開發(fā)過(guò)程中實(shí)施了可重現(xiàn)的構(gòu)建,大多數(shù)文件現(xiàn)在只包含一個(gè)帶有完整版本號(hào)的偽構(gòu)建標(biāo)簽,但同時(shí)還包含一個(gè)實(shí)驗(yàn)室和時(shí)間戳占位符組件,即 (WinBuild.160101.0800),因?yàn)榘瑯?gòu)建時(shí)間戳這一行為打破了“編譯相同的源代碼無(wú)論如何都會(huì)產(chǎn)生完全相同的二進(jìn)制代碼”這一確定性前提。

至于第二張圖的版本號(hào)上方的“23H1”的具體命名規(guī)則,我們將會(huì)在下期進(jìn)行討論。
參考資料
https://betawiki.net/wiki/Build_tag
https://betawiki.net/wiki/Build_lab