What is a Windows build string and how to locate it?

What is a Windows build string?

It's a set of characters that uniquely identifies a Windows build.

What's a build?...

A build refers to building a solution. That is: compiling source code into object code and linking object code into executable machine code. It's the end-product to the analysis, design and programming effort. However, it may not be the final product, because it may be revised several times before that happens. When it does, it's known as the final release, gold release, or in case of Microsoft software: RTM (release to manufacturing).

Ultimately, a build is the solution to a problem that can be solved in software! It is therefore better known simply as software. In this case it's the Windows system software — the operating system that very likely runs on your computer right now and makes it useful. Today's kids call it all "apps", originally a short form of "applications" or "application software", but it has taken on other meanings now as well. Grups simply call it "programs". To reuse a Swedish proverb, "a beloved child has many names."

It's also the name of the annual Microsoft developer conference.

How can the build string be read in Windows?

The build string is stored internally as a string value in the Windows registry. There are two kinds of build strings to be aware of. One is just called a build string and includes only the build number, so it's only numeric. The other one is sometimes called a full build string, because it also includes the branch name and compile time, or rather build time-stamp.

The following key in Windows registry holds the full build string of the running system.

HKLM\Software\Microsoft\Windows NT\CurrentVersion

There are two variables of interest here:

BuildLab:   10240.th1.150729-1800
BuildLabEx: 10240.16412.amd64fre.th1.150729-1800

What is the meaning of the build string?

In general, a build string contains the following segments: major version, minor version, build number, branch name, build date, build time.

In general, the scheme looks something like this:

[major].[minor].[build].[branch].[date]-[time]

I will examine a few examples now.

  • 6.4.9879.fbl_release.141103-1722

Here, the major version is 6, minor version is 4, build number is 9879. The name of the branch is fbl_release. It was built on 3 November 2014, at 17:22 local time.

  • 10.0.10014.winmain_prs.150205-1859

Major version here is 10, minor version is 0, build number is 10014. This is one of the first Windows builds that got the major version number 10. Microsoft flipped the major version number from 6 to 10 only one build earlier (build 10009). This is what gave Windows 10 its name. The branch name is winmain_prs and this is considered to be the main branch. It was build on 5 February 2015, at 18:59 local time.

  • 10.0.10240.16384.th1.150709-1700

Here we have major version 10, minor version 0 and build number 10240. I'm not quite sure what 16384 represents. This number appears in build strings of both Windows 8.1, Windows 8, Windows 7, as well as Windows Vista when it's an RTM build or nearly RTM. I call it the "magic number". But I guess it's some kind of "micro build" or build subversion. This one was built on 9 July 2015, 20 days before the general availability of Windows 10. It was pushed to Windows Insider testers on 15 July, and it started rolling out on 29 July to those who reserved a free upgrade copy of Windows 10.

  • BuildLab: 10240.th1.150729-1800
  • BuildLabEx: 10240.16412.amd64fre.th1.150729-1800

This is the one I am currently using to type this answer. This is also an RTM build, because it's build 10240. But as you can see from the build date, this one is actually more so than the previous one that was pushed out on 15 July to testers. Look at the date! It says 29 July 2015. That's the release date of Windows 10! And look at the magic number! It's 16412! Compare that to 16384. So by this I know this is a later release.

The BuildLabEx value includes slightly more information than the examples before it. It includes the magic number or build subversion, and name of processor architecture. So in this case, it's AMD64, a.k.a. EM64T or Intel 64, that is: a 64-bit processor. The "fre" likely stands for "free", that is: production kernel, as opposed to "checked" development kernel.

So the expanded scheme looks something like this:

[major].[minor].[build].[subversion].[architecture].[branch].[date]-[time]

But what is the meaning of the branch names?...

  • winmain_prs
  • fbl_impressive
  • fbl_awesome
  • fbl_release
  • th1

The winmain_prs is the "Windows main" branch. This is the main, stable and ready for release branch that all past and future Windows versions are developed from (at least in case of Windows NT family). The "prs" might stand for partners, or production ready and stable. I am really just guessing! There is not much information about this on the web.

I am pretty sure that "fbl" stands for "future build". These are work in progress, unstable branches. They go under cute names like "impressive", "awesome" and "release" (the last one not so cute). I think that "impressive" and "awesome" are used to add new features, while "release" is used to debug and stabilize before it's reverse integrated to the main branch.

The "th1" branch is new. I'm not sure what it means. But I do know that it's only the RTM build that hangs on this branch. So it may be some sort of indication of the change in Windows release model. I'm referring to the shift towards Windows as a service.

Update: Build 10525 has recently been released on "th2" branch. The "th" is apparently a short for "threshold" which is the codename for Windows 10. The "th1" appears to be the general public release, while "th2" is the insider preview release branch.

Why are build strings useful?

They allow for exact identification of Windows builds, down to the branch and compile time. This makes tracking down small changes very easy, because each change to the code, however small, that gets compiled, linked, built and released also gets a new build string that identifies it. Build strings are mostly useful to Beta testers. Because small and frequent changes to the code are made during the testing phase of the development cycle.

Once the final released has been made, the full build strings becomes of little interest. Instead, the main thing of interest is the major, minor and build number. This helps identify the "version" of the running Windows system. This is what third-party Windows apps are using to identify the version of Windows they are being installed on or run on. This is different from the Windows marketing name, such as "Windows XP" or "Windows Vista".


The meaning of the

fbl_release

and similar shows from which branch that build was released. For example if you are Microsoft partner that develops apps (ISV) you were getting builds from the Impressive branch you show in your post. Other branches were used for OEM partners and the winmain is usually the main branch where everythign gets merged at some point before shipping RTM.

For more details on branching see MSDN

Some of the other names are future release builds, since I have NDA, I can't share the details.

You will not see the branch, detail info in product that is RTM - it is used for dev purposes only. If you would continue to get the beta builds, the information is on there