Wednesday 24 June 2009

What's in a Service Pack?

Software version numbers used to be so simple: MSDOS 6.22, Windows 3.1, NT 4.0 you knew where you stood because 6.22 was a minor upgrade from 6.0 which in turn was a major upgrade from 5.0

The idea was that major upgrades could break existing functionality (a bit like a new version of Visual Basic might chortle chortle) but minor upgrades mainly fixed bugs. Note these were upgrades: you had to pay for them.

Then software engineers got their act together (a bit) and decided (with the exception of Visual Basic) that they weren't going to break backward compatibility anymore: too much effort had been expended developing applications to break them at whim.

There was the interminable wrangling over whether Linux 2.5 became 2.6 or 3.0 - the argument was that 2.6 (as it was eventually named) was such a major rework that it merited a major version change. Unfortunately, the Open Source community are a conservative bunch and they insisted on the old rule about backward compatibility. By this argument there will probably never be a Linux 3.0

In the commercial world, however, we suffer from branding: Marketroids keen to promote a minimal enhancement of software as something worthwhile and valuable will change the major version number at an astonishing pace. Examples might be Flash 10, Adobe Reader 9, Windows 7.

Conversely the bugfixes are de-emphasised and called Service Packs or Updates. They arrive by the dozen and you never really know what they do or why you need them. Just press the 'Install Now' button and reboot.

So I noticed the other day that something strange has happened in Service Pack 1 of .NET 3.0, 3.5 and Service Pack 2 of .NET 2.0

They've added a new function

public static int System.Threading.WaitHandle.WaitOne(Int32)

It appears by magic in your Intellisense and looks less cumbersome than WaitOne(In32,Boolean)

But Beware!!

Your application will just fall over if it's run on a machine that doesn't have the latest .NET Service Pack installed. Doesn't matter if you tell the IDE that you're targetting .NET 2.0 you're going to have to get all your user's machines updated just to run your application. Its implementation appears to have leaked from the upcoming .NET 4.0 - probably as part of a security patch.

I think I prefered WaitOne(Int32, Boolean) - at least you know it works everywhere. The Boolean should be false, of course, and I'm pretty sure that's exactly what WaitOne(Int32) does.

No comments:

Post a Comment