It's been seven years since the Y2K crisis.  It seems we may have another crisis coming up which some developers may not have thought of yet.

If you're using standard build numbers from the PE headers, you're using something like:

    Major.Minor.Build.QFE

Each part of the build number is an unsigned 16 bit integer.  That means you only have 65536 major numbers, 65536 minor numbers, 65536 build numbers, and 65536 QFE numbers.

In the developer division, we tried to be smart a few years ago and used the build number to match the day of the build.  This was great since you can easily tell when a build was done.  We used the YMMDD format where Y is the year, MM is the month, and DD is the day.

If you tried any of our VS 2005 builds, you'll see something like 8.0.50325.00 (which means it was built March 25, 2005).

When we started working on the next version of Visual Studio, we realized that isn't going to work anymore.  Once we hit Jan 1, 2007, our build number will be 70101.00 (which is greater than an unsigned 16 bit integer).

Luckily, we thought of this earlier in the year and changed our build numbers to use XMMDD where X represents the year in development of our product.  As long as we ship in 6 years or less, we'll be ok :)

Today, our build is 9.0.11219.00.  On January 1, 2007, it'll be 9.0.20101.00.

If you've decided to use the date for your build number, you have just over a week to change it before you hit a Y2K7 disaster :)