August 21, 2000

By Karen Kenworthy

IN THIS ISSUE

Is it just me? Or is the world really changing faster than ever before? Just last week my oldest nephew left home to start his freshman year at a nearby university. Though Daniel's only a few hours from home, it must seem like he's on another planet to his loving Mom and Dad.

That same Dad, my brother Bill, recently became a grandfather, and I a great-aunt! This transformation was accomplished by my oldest niece, Vanessa, her husband Chuck, and their new daughter Alexis. The latest word is that all are doing well, though grandpa Bill's knees are a little shaky.

Now this week lovely Monica (who keeps my office neat and tidy), and her beau Bill, will "close" on their new house. Though their marriage is still three months away, the preparations and plans for their new life together are well underway. It's going to be a long wait for the two of them. But it will be worth it.

What's In A Number?

Back in the world of computers, you might think change would be slower. Or at least a bit more manageable. But one agitated reader named Dan doesn't think so. Recently, he wrote to me about software, and the peculiar way programmers number new versions:

"Why Why Why Why Why do programmers use that numbering system? ref: 2.9.1 to 2.10? Any person familiar with integers and decimals -- which is probably 99.999999% of your readers -- would absolutely insist that after 2.9.1"???" comes either 2.9.2 "???" or -- forgive me if this makes much much much much much too much sense -- 3.0. so PLEASE Karen, could you explain this. Thanks, Dan."

Now, I may not understand everything Dan says. But I do understand how he feels. And I know a lot of others do too. Program version numbers are confusing, and sometimes appear arbitrary. How do programmers come up with numbers such as 2.9.1? And what do these numbers mean?

There is some method to the seeming madness. Windows sets aside 64 bits inside each program, to record the program's version number. Now, you might think that logical programmers would simply number each version of their programs. If they did, the version incarnation would be known as version 1, the next as version 2, followed by version 3, version 4, and so on.

That system sure would be simple, and easy to understand. But unfortunately, it doesn't fit well with the way programs are actually developed. Most programs are revised dozens of times between public appearances. A few complex programs, such as Windows, go through thousands of revisions between each public release.

If each new version of the program were simply assigned the next available number, those released to the public would have seemingly random numbers. For example, the first retail version might be version number 1045. Several months later, this might be replaced by version 2877, with all intervening numbers assigned to intermediate versions that never saw the light of day. Imagine the excitement, as we breathless await the upcoming release of version 3792!

More pleasing is a system where significant public releases of programs have nice, round numbers. To achieve this esthetic result, programmers long ago decided to divide the 64 bits set aside to record version information into four 16-bit numbers:

Major Version. This is what most people think of as a program's version number. When a program is first released to the program it's Major version number is set to 1. After that, it's only incremented when a "major" new version of the program is released -- one with significant new features.

Minor Version. Initially zero, this number is incremented when a program is enhanced or upgraded, but the changes aren't great enough to constitute a new major version. When a new major release is distributed, this number is reset back to zero. Changing the minor or major version number is a judgment call. Often, the decision is made by marketing folks -- editions with new Major version numbers tend to sell better than those with just a new Minor version number.

Revision Number. This number is incremented when a program is changed, but not enough to justify a change in the Minor or Major version numbers. This may seem picky, but the Revision number actually serves a very useful purpose. During testing, programmers often create several versions of a program that are distributed to certain testers, but never provided to the public. These so- called beta versions of the program are distinguished by their different Revision numbers. Once a beta version has been approved for public release, the Revision number is usually reset to zero, and the Major or Minor version number is incremented.

Build Number. This last member of the version number quartet is used to designate small changes that are never distributed, even to beta testers. It's not uncommon for a programmer to "build" or create several versions of a program during the course of a single day, as small changes are made. Normally, these versions are seen only by the programmer that makes them, or a small group of programmers working on the same project. After a series of builds, a new beta version is prepared. When that happens, the Build number may be reset to zero, and the Version number is usually incremented.

When displaying or printing one of these partitioned 64-bit version numbers, each 16-bit group is normally shown separately, separated from the others by a period or dot ("."). The result might look something like this: 2.9.1.18 (Major version 2, Minor version 9, Revision 1, Build 18). Often, the build and revision numbers are omitted if both are zero.

Mystery Zeros?

That explains the dots. But it still doesn't explain some mysterious zeros that drift in and out of version numbers from time to time. What are the differences between, for example, version 2.1, 2.01, and 2.10?

To understand, remember that each value we see between the dots is really the decimal representation of a 16-bit binary number. Looked at that way, version 2.1 and 2.01 are actually the same version, since their minor version numbers, 01 and 1, are the same value. The extra, leading zero is simply window dressing.

But version 2.1 and version 2.10 are quite different. That's because their minor version numbers, 1 and 10, are quite different. The first represents minor version "one," while the other indicates minor version "ten," the release that immediately followed version 2.9.

I think the confusion comes about because people often think version numbers like 2.9 are decimal fractions. If they were, "2.9" would represent 2 and 9/10ths. But version "2.9" actually represents two whole numbers, 2 and 9, separated by a period. Looked at that way, it doesn't seem so odd that the next release might be version 2.10.

New Version Browser

If you'd like to see some version numbers in action, check out the latest version (2.9.0.0) of my Winmag.com Version Browser. It not only displays the full 64-bit version number found inside each Windows program, it also displays several other interesting bits of version-related information. In many cases, for example, it can tell you who wrote a program, its purpose, and even the version of Windows it was designed to run under. All the information can be viewed on screen, or printed for later reference.

To download your free copy, visit my Version Browser headquarters at https://www.karenware.com/powertools/ptbrowse. While you're there, feel free to download the program's free Visual Basic source code too. You also might want to sample my new assortment of installation programs. They're part of the preparations for our next visit to the "Setup Swamp" coming soon.

Until our next get-together, try to slow down and take it easy. But even at that reduced speed, if you pass me on the 'net be sure to wave and say "Hi!" I'll be looking for you. And I might even recognize you if you haven't changed too much. :)