A little story about feature build labs

After the reset of Longhorn, which became Windows Vista, Microsoft introduced virtual build labs (vbl) which were replaced by feature build labs (fbl) in Windows 7. Every team working on Windows has its own feature build lab (e.g. fbl_shell, fbl_multimedia, fbl_powershell, fbl_wdk, fbl_tools, fbl_dev, etc. — there are plenty of fbl’s).

The fbl’s are development branches which contain the (unstable) code that is under construction, whereas the winamin branch contains completed functionality that has passed integration tests. Since the winmain branch must contain code that has passed integration tests, it is (or should) be always ready for a release.

Basically there are two processes between winmain and fbl branches. One of them is called Forward Integration (FI) and the other is called Reverse Integration (RI). In the following I will try to illustrate and describe both processes.

Reverse Integration

When a new functionality in a fbl branch is completed and can pass integration tests, the code gets promoted from that fbl branch to the winmain branch. This process is referred to as reverse integration. A fbl branch can be reverse integrated to the winmain branch only after unit tests have verified the stability of the fbl branch.

Forward Integration

If code from the winmain branch gets merged to a fbl branch, the process is referred to as forward integration. Since the fbl branches constantly evolve, forward integration is very important because the winmain branch integrates changes from all development branches. Ususally forward integration occurs as soon as any development (fbl) branch reverse integrates into the winmain branch. The code from the winmain branch gets froward integrated into all development branches then. Because the winmain branch is kept stable, forward integration to the feature build labs is safe.


“Branching-Off” is very similar to forward integration. When the Windows codebase is ready for a release (e.g. Public Beta, RC, RTM), a branch from the winmain branch gets created (e.g. winmain_win7beta, winmian_win7rtm). Usually these branches are not reverse integrated back into the winmian branch.

Hotfixes are also special branches branched-off the winmain branch. Different from special release branches, hotfixes are reverse integrated into winmain.

Please let me hear your comments, corrections and other interesting things =D

About this entry