Build lab
A build lab (or simply a lab) commonly refers to a Microsoft Windows source code branch. By extension, it can also refer to the team that works on this branch.
Historically, the build lab was a physical room populated with machines that periodically produced mainline builds of Windows NT. At first, there was a single build lab for the entire project that all developers submitted their changes to. As the number of developers grew, the concept of virtual build labs was introduced, where each team developing a subset of the feature set works on its own separate branch and has one or more machines compiling periodic builds of that branch. Each developer first submits their changes to their team's branch, and are merged to the mainline development branch only after meeting a required subset of acceptance criteria. Other teams can then pull the changes from the mainline branch into their development branches.
Builds that were not built by the build lab machines, but are rather compiled by individual Microsoft employees, are called private builds. They are identified by having the VS_FF_PRIVATEBUILD
file flag set in the executable's version information and by including the account name of the individual or service that initiated the build in the branch part of the build tag.[a][b]
Labs[edit | edit source]
Microsoft has used several branching systems since the start of Windows XP development, which differ in the hierarchy of labs as well as in the naming scheme. However, there are some specifics common to most schemes, such as the presence of a top-most main branch, or the use of special branches for important development milestones.
Whistler and pre-reset Longhorn[edit | edit source]
The top-most branch was called main
, which integrated changes from all labs. Under it were several numbered labs,[c] each of which was working on a separate part of Windows, such as:
Lab01
: Kernel,Lab02
: Networking,Lab03
: Server,[d]Lab04
: Terminal Services,[1]Lab06
: Shell, User Interface,Lab07
: Internet Information Services/COM+,
More labs, up to Lab15
,[2] might have existed but their purpose is currently unknown.
All labs had a subbranch with the _N
suffix, which served as a buffer between main
and the actual branch. For example, during forward integration, changes from the main branch would first get integrated into Lab06_N
before later being integrated into Lab06
in a process called forward integration. The same applied for reverse integration, where the lab would first integrate changes into the buffer branch before integrating them into the main branch. Some labs also had other subbranches, such as Lab01_N-vc
, Lab03_client
or Lab03_dev
.
There were also idx
(internal development workstation/server) labs, builds from which are usually recompilations intended for TAP/OEM partners. These builds don't differ much from upstream builds, except of post-build completion differences. Despite true meaning of these builds, they were also occasionally released for public testing, e.g. Windows Longhorn build 4074 or Windows XP build 2257.
Before the release of Windows XP, the main branch was forked into the xpclient
branch while the main branch moved on to track Windows Server 2003 development. After the final version was shipped, new branches were created for updates, hotfixes and Service Pack development. Similarly, the dnsrv
branch (short for Dot NET Server, i.e. Windows .NET Server) was forked from the main branch before the release of Windows Server 2003.
Since Longhorn reset[edit | edit source]
The lab hierarchy was overhauled after the development reset of Longhorn to address the flaws that plagued most of the pre-reset period. Instead of having a small amount of general virtual build labs each focusing on a different general scope of Windows functionality, a new hierarchical model with considerably more feature branches was introduced, which helped reduce the amount of code to reverse integrate for branch. Microsoft also set stricter criteria for reverse integrating changes from the labs into the main branch, which was renamed to winmain
since Windows Vista development reset.
The main branch was later renamed to rsmain
at some point after the release of Windows 10, and then to rsmaster
after the Windows source repository's conversion to Git, likely to comply with the Git convention of calling the top-most branch the master
branch. At some point after February 2021,[3] the branch was renamed back to main
. This was likely done in order to follow suit with other Microsoft projects after the master/slave terminology became a subject of controversy in 2020 due to slavery connotations.[4][5]
Feature branch prefixes[edit | edit source]
Microsoft has used multiple prefixes to refer to feature branches over time:
vbl
(Virtual build lab) – Windows Vista,fbl
(Feature branch level) – Windows 7 up to Windows 10 (original release),rs
(Redstone) – since Windows 10 Creators Update; named after the Minecraft mineral of the same name,fs
(Firesteel) – Windows 11 (original release)․[e]
Some versions used prefixes of their branches, as incremental updates of existing versions, for example ` Windows 10 November Update and Windows 10 Anniversary Update, which used th2
and rs1
prefixes, respectively.
Release branch prefixes[edit | edit source]
Similarly to the previous system, the main branch is forked off before release to contain update development. The following is the list of known prefixes:
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 (original release),th2
– Windows 10 November Update,rs1
– Windows 10 Anniversary Update, Windows Server 2016,rs2
– Windows 10 Creators Update,rs3
– Windows 10 Fall Creators Update,rs4
– Windows 10 April 2018 Update,rs5
– Windows 10 October 2018 Update, Windows Server 2019,19h1
– Windows 10 May 2019 Update, Windows 10 November 2019 Update,vb
(Vibranium) – Windows 10 May 2020 Update and later cumulative updates,mn
(Manganese),fe
(Iron) – Windows Server 2022,co
(Cobalt) – Windows 11 (original release),ni
(Nickel) – Windows 11 2022 Update, Windows 11 2023 Update,zn
(Zinc) – Windows Server, version 23H2,ge
(Germanium) – Windows 11 2024 Update, Windows Server 2025.
Branch prefixes used by other teams[edit | edit source]
Some teams that use the Windows codebase but are formally separate from Windows releases also use their own branch prefixes:
See also[edit | edit source]
Notes[edit | edit source]
- ↑ For example, build
6.0.4067.private/lddm_dev_tech(davidmo).040212-1646
is a private build initiated by thedavidmo
user. - ↑ Some builds such as
6.0.4002.Lab06_N(ntvbl06).030108-1926
and6.1.6469.fbl_find_dev(wexbuild).071002-1531
are compiled as private builds but were built by an official build lab machine account. - ↑ There are build machines defined for labs 01 to 10 in
tools\buildmachines.txt
in the leaked Windows XP Service Pack 1 source tree, while thetools\changelab.pl
scripts knows labs up to number 15. - ↑ This lab still compiled client builds even though it worked on server components as the build process does not distinguish between client and server SKUs.
- ↑
fs
branches were used in parallel withrs
branches.
References[edit | edit source]
- ↑ Chen, Raymond. The importance of having a review panel of twelve-year-old boys, episode 2, The Old New Thing. 11 April 2013.
- ↑
tools\changelab.pl
, line 103 in Windows Server 2003 source code tree - ↑ Windows 10 build 21298 (rsmaster)
- ↑ Brown, Shelby. Microsoft's GitHub is removing coding terms like "master" and "slave", CNET. 27 July 2020.
- ↑ Regarding Git and Branch Naming, Software Freedom Conservancy. 23 June 2020.