With the recent release of Windows Vista RC1, I have seen many comments on places like Slashdot and various blogs which demonstrate there is a lack of understanding of what we mean when we say we have “Release Candidate 1”. I will attempt to explain what we mean when we say RC1. This is not an exhaustive definition nor is it official but it should give you a good idea what we mean when we say it.
There is an impression that this is the build we intend to release as the final build unless something heinous bug is found in it. That is often what the term release candidate means in the world of software but not here.
Back when I started at Microsoft in 1997, we were in the process of releasing IE4 and then Windows 98. In both of those cases, the release candidate builds were just that, candidates for release. If we had RC1 on Monday and found a bug in it, on Tuesday we’d have RC2. If we didn’t find a bug on Tuesday but found one on Thursday, then Friday we would have RC3 and so on. After a half-dozen builds or so, we would have a final release.
When I moved to the NT5 team (what became Windows 2000), it was confusing to me to hear the same terminology mean something very different. In that world, and in the world of Vista today, what we call a release candidate is more of a waypoint on the way to release than a build we actually think will be the final one. An RC build is one that we iterate on for a while to drive up the quality (like a beta or one of the CTP releases–only moreso). A release candidate, in this way of thinking, is a build you release that will differ only in minor ways from the final one. The bar for bugs goes up substantially after it. We become really strict about what we will take for the product. No new features or even major changes are allowed in. Just bug fixes which don’t perturb the system too much. In this nomenclature, a “release candidate” is not really a candidate for final release. We know there will be bugs to fix after we release it. In the WinXP timeframe, there was a month or maybe even two between RC builds. During that time we still had daily internal builds. Each release candidate was closer to the final build and the amount of change allowed afterward was smaller than before.
So what do we call the builds we are really considering for release? We usually call them escrow builds.
Update: I found a nice chart in this Seattle PI article showing the time from RC1 to RTM for Windows 2000 and Windows XP. For Windows 2000, it was 166 days. For XP, it was 53.