Where do “checked” and “free” come from?

By Larry Osterman

People who have MSDN or the DDK know that Windows is typically built in two different flavors, "Checked" and "Free".  The primary difference between the two is that the "checked" build has traces and asserts, but the free build doesn’t.

Where did those names "checked" and "free" come from?  It’s certainly not traditional, the traditional words are "Debug" and "Retail" (or "Release").

When we were doing the initial development of Windows NT, we started by using the same "Debug" and "Retail" names that most people use.

The thing is, it turns out that there are actually four different sets of options that make up the "Debug" and "Retail" split.

You have:

  1. Compiler Optimization: On/Off
  2. Debug Traces: On/Off
  3. Assertions: Enabled/Disabled
  4. Sanity checks: Enabled/Disabled

Traditionally, "Debug" is "Optimization:off, Traces:on, Assertions: on" and "Retail" is "Optimization:on, Traces:off, Assertions: off".  Sanity checks was something the NT team added.  The idea was that there would be additional sanity checks built in for our internal development that would be removed before we shipped.

So the NT build team wanted to build "Optimization:on, Traces:on, Assertions: on, sanity checks:on" and "Optimizations:on, traces:off, assertions: off, sanity checks: on" and "optimizations:on, traces:off, assertions:off, sanity checks: off".

The last was what was traditionally called "Retail" – no debugging whatsoever.  However, the question still remained – what to call the "O:on, T:on, A:on, S:on" and "O:on, T:off, A:off, S:on" build – the first wasn’t "Debug" because the optimizer was enabled, the latter wasn’t "Retail", since the sanity checks were enabled.

So clearly there needed to be some other name to differentiate these cases.  After some internal debate, we settled on "Checked" for the "O:on, T:on, A:on, S:on" and "Free" for the "O:on, T:off, A:off, S:on" build.  Checked because it had all the checks enabled, and free because it was "check free".

And as the NT 3.1 project progressed, the team eventually realized that (a) since they’d never actually tested the "retail" build, they had no idea what might break when they started making builds, and (b) since they had perf tested the free build and it met the perf criteria, the team eventually decided to ship the free build as the final version.

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s