Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm currently writing a small desktop application for a friend, but I'm doing it primarily as a learning experience for myself. In the spirit of getting educated and doing things The Right Way, I want to have version numbers for this app.

My research brought up these related results

but none of them address numbering of alphas, betas, release candidates, &c. What are the conventions for version numbers below 1.0? I know they can go on for some time; for example, PuTTY has been around for at least a decade and is still only at version beta 0.60.

share|improve this question

6 Answers 6

It really depends on the project; some projects don't even release a version 1.0.

The developers of MAME do not intend to release a version 1.0 of their emulator program. The argument is that it will never be truly "finished" because there will always be more arcade games. Version 0.99 was simply followed by version 0.100 (minor version 100 > 99). In a similar fashion Xfire 1.99 was followed by 1.100. After 6 years of development, eMule has not even reached version 0.50 yet. Software versioning at Wikipedia

One popular method of numbering versions (that I've started to use) is Semantic Versioning.

Under this scheme, version numbers and the way they change convey meaning about the underlying code and what has been modified from one version to the next.

Some quotes to give you more ideas on how it works and/or answer some of your questions:

How do I know when to release 1.0.0?

If your software is being used in production, it should probably already be 1.0.0. If you have a stable API on which users have come to depend, you should be 1.0.0. If you're worrying a lot about backwards compatibility, you should probably already be 1.0.0.

Doesn't this discourage rapid development and fast iteration?

Major version zero is all about rapid development. If you're changing the API every day you should either still be in version 0.x.x or on a separate development branch working on the next major version.

If even the tiniest backwards incompatible changes to the public API require a major version bump, won't I end up at version 42.0.0 very rapidly?

This is a question of responsible development and foresight. Incompatible changes should not be introduced lightly to software that has a lot of dependent code. The cost that must be incurred to upgrade can be significant. Having to bump major versions to release incompatible changes means you'll think through the impact of your changes, and evaluate the cost/benefit ratio involved.

There are also rules on how to specify "alpha," "beta," etc. releases. Check out the details at http://semver.org/.

[Edit] Another interesting version numbering scheme is the one MongoDB uses:

MongoDB uses the odd-numbered versions for development releases.

There are 3 numbers in a MongoDB version: A.B.C

  • A is the major version. This will rarely change and signify very large changes
  • B is the release number. This will include many changes including features and things that possible break backwards compatibility. Even Bs will be stable branches, and odd Bs will be development.
  • C is the revision number and will be used for bugs and security issues.

For example:

  • 1.0.0 : first GA release
  • 1.0.x : bug fixes to 1.0.x - highly recommended to upgrade, very little risk
  • 1.1.x : development release. this will include new features that are not fully finished, and works in progress. Some things may be different than 1.0
  • 1.2.x : second GA release. this will be the culmination of the 1.1.x release.
share|improve this answer
    
Wow, that's... quite an edit. I'd upvote you again if I could. –  Pops Mar 13 '11 at 18:10
2  
Thanks! ^_^ I guess this is the edit that pushes me to 1.0.0? :) –  Brandon Tilley Mar 13 '11 at 18:15
2  
instantrimshot.com –  Pops Mar 13 '11 at 18:18
1  
@LordTorgamus You can upvote him again: accept this fantastic answer. –  Ross Patterson Apr 2 '13 at 11:10
    
@RossPatterson Upvotes and accepts are semantically different; this answer contains a lot of good information, but I don't think it's "the answer," so acceptance doesn't feel right. –  Pops Apr 2 '13 at 19:57

I don't think there's a "standard" as such.

There is a convention for Release Candidates which is usually "[version] RC 1" etc. depending on how many versions you think you might release.

If you're releasing a very early version of your product - one that's not feature complete - then your might want to go with version "0". That way you can increment the version over time as you fill out your feature set.

I'd use "Alpha" and "Beta" like Release Candidate - for time limited versions to indicate that you think you are close to releasing the full version.

share|improve this answer
    
I thought about this, but I can't quite wrap my head around what version 0 represents. The difference between 0.1 and 0.2, and between 0.3.2 and 0.3.3, simultaneously do and don't make sense to me according to the "minor release"/"bugfix patch" model. –  Pops Mar 13 '11 at 18:09
    
@Lord - admittedly that's where it does fall down... –  ChrisF Mar 13 '11 at 18:17

There's a Wikipedia page on Software Versioning. For sharing pre-1.0 versions, the convention used by Apple and others works well: major.minor.maintSrev where S is the stage indicator for prerelease versions: d=development, a=alpha, b=beta, rc=release candidate. So your first internal version could be 1.0.0d1.

For completely internal revisions, the timestamp is sufficient.

share|improve this answer

Each developer for the most part decides what standard they're going to use. In general though numbers to the left of the decimal point indicate large revisions that would likely be very noticeable to the average user (i.e. functionality or interface changes, etc). On the right side of the decimal point this would be a change/modification/addition that didn't change the overall functionality and design much but did change something about the program itself (ie make a function faster while still doing the same thing or fixed a security issue). Then if you add additional decimal points the numbers to the right of these would indicate increasingly smaller and smaller changes (i.e. minor bug fixes/security issues and such).

share|improve this answer
    
This would be a good answer for some of the related questions I listed in my post -- and, in fact, is pretty similar to some of the existing answers to those questions -- but doesn't really address the "version zero" case I'm asking about. –  Pops Mar 13 '11 at 18:20
    
Why doesn't it? Everything starts out with 0 in computer science... –  Kenneth Mar 13 '11 at 19:10
    
honestly in the end the only person/people the version number has significant meaning to is the developer(s). As for the users it only has relative meaning. So in the end developers can pretty much and more or less do use what ever scheme they feel like. –  Kenneth Mar 13 '11 at 19:14

As others have said, there doesn't seem to be an exact standard. Our organisation uses the following notation:

Release 1.0 ---> 2.0 (A major new/improved feature added to the product)

Release 1.0 ---> 1.1 (A medium level new/improved feature added to the product)

Release 1.0 ---> 1.001 (Bugfixes)

share|improve this answer
1  
"1.0 ---> 1.001 (Bugfixes)" Really? Why not 1.0.1? That's more usual. What happens if you have 100 bug fixes? –  James Mar 14 '11 at 1:03
    
@James - That will NEVER happen (Famous last words I know lol). Seriously though, we've never reached a 100 bugfixes at one time, and so the sub release number has always changed before we reach this limit (1.1,1.2,1.3 etc). If we did reach the limit then we may have to increase the sub release number - it would count as a medium/level improved feature with that many fixes. –  Dal Mar 14 '11 at 8:56

The "version 1.0" milestone is very important to experienced computer users, as it implies that the program is done and works as expected. Anything in version "0.something" implies that the programmers themselves thinks that the program is not done yet.

You can keep the "0.1", "0.2" ... version numbers for major accomplishments of functionality and then subset it with a build number which frequently is a sufficiently fine grained date and timestamp.

share|improve this answer
    
For commercial development, 1.0 frequently means that it's buggy, incomplete, and will undergo breaking changes very soon. –  David Thornley Apr 11 '11 at 18:01

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.