Software Versioning

Every day, we cope with software versioning.

We often hear sentences like: “Hey, have you seen the new Firebug 1.3.3?”, “Have you installed Ubuntu 8.10?”, “When will Windows 7 be released?”, “Is Gmail still in Beta?” or “Check my new web 2.0 site!”

Personally, and it seems that a lot of people agree about this, I like the Ubuntu versioning pattern: the major version indicates the year of releasing, and the minor one the year’s month when it was released.

If we talk about web applications, I prefer putting the revision number of the published revision in our source control in some hidden place, so if the application is hosted in different servers is easy to know what version of the software is our server running. (Note: check the downsides: if it’s a very public project, you are making cracker’s life easier)

It’s a reality that there aren’t any standards for software versioning and naming, and frequently development teams and marketing folks use different names for the same version of a product. As always, life will be easier if we had some standards in place.

But the way, we have some de facto conventions, and we should use them. If we use the popular X.Y.Z versioning format, a change in X implies massive architecture changes, and a change in Y means that there exists compatibility with other versions with same X.

If you are using .NET Framework, you should know that you can generate your assemblies version automatically based on the time of compilation. Check the article about AssemblyVersionAttribute from the MSDN:

When specifying a version, you have to at least specify major. If you specify major and minor, you can specify an asterisk (*) for build. This will cause build to be equal to the number of days since January 1, 2000 local time, and for revision to be equal to the number of seconds since midnight local time, divided by 2.
If you specify major, minor, and build, you can specify an asterisk for revision. This will cause revision to be equal to the number of seconds since midnight local time, divided by 2.

This article came to my mind when I read about the new PHP release, PHP 5.3. The previous was only some context for my rant:

What were PHP people thinking about when they decided changing only the minor version number with a new version with backward-compatibility issues?

If you are going to feel the pain, maybe this IBM post series can ease you: What’s new in PHP V5.3.

PS: They’ve introduced goto in the language too. I won’t say anything about it. Use it at your own risk.

3 Responses

  1. Lo del goto es para matarlos, claramente. A estas alturas. En fin… viva el código espagueti.

    Curiosamente el otro día leí un artículo sobre la numeración de las versiones, si no recuerdo mal en la revista de febrero de Php|Architects… Comentaban, por ejemplo, el extendido error de lanzar la primera versión de un programa como la 0.0.1, cuando en realidad, por convención, debe ser la 0.1.0: ¿sobre qué versión estás revisando bugs en la 0.0.1? xD

    En fin, que no son horas aun, y menos con lo poco que he dormido. Si te resulta importante, cuando esté despierto traduzco el comentario a mi manera XD

    Comentario patrocinado por Penyaskus Cola.

  2. About goto usage:

    “Bad code is the product of bad programmers”

    You don’t need “goto” feature to obtain spaghetti code and using goto don’t create bad code (linux kernel as example)

    Disclaimer, yes, there’s tons of examples of evilness of goto.

  3. Mi experiencia: los programadores necesitamos que no nos permitan guarrear, para no hacerlo. Somos así de malajes: si podemos hacerlo bien o mal, lo hacemos mal xD

Leave a Reply

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

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

Google photo

You are commenting using your Google 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 )

Connecting to %s

%d bloggers like this: