The longevity of decisions

There are many cases in software engineering where decisions are made that have far-reaching consequences. Sometimes the choices are between some good, logical alternatives and sometimes they might be a bit arbitrary. And of course, once a decision has been made, there are points in the future where others might choose to keep following that decision or to choose another path. I just want to write about an interesting outcome from an old decision that has been maintained throughout the design of many systems. This original decision (and its perpetuation) has had an effect on me that was so far beyond anything that might have been predicted that I thought it warranted writing about.

How I found out about the original decision

I was trying to create a file on my Windows 7 computer; which should be easy enough. But I was getting an error saying “The specified device name is invalid”. A quick Google found the problem; ‘aux’ is one of an number of invalid filenames in Windows; irrespective of the extension, you cannot call a file ‘aux’. And, because this is coming from a time when 8.3 was the format of a filename, everything after the first ‘.’ is considered part of the extension. Therefore no filename can start with the characters ‘aux.’ regardless of what follows. There is a good explanation of the cause (the original decision) and the other invalid filenames on bitquabit. What it boils down to is that in CP/M (an operating system from 1973) there were a number of inbuilt device names, including ‘aux’, and those device names were reserved and could not be used as filenames. Later operating systems based on CP/M, including the predecessor of MS-DOS, kept those reserved device names.

What I was actually trying to do

Where I work we use Chef to manage provisioning our server infrastructure. This includes virtual servers running on OpenStack and CloudStack. We have configuration files that match each hosts name which tell Chef which software, services, users, etc. need to be installed on each machine. The configurations are in JSON format and we name them for the host they describe. For example there may be a database server and the configuration file would be called db.mycompany.com.json. I had created a server for auxiliary systems that support our main product, so I had chosen aux.mycompany.com as the hostname. But because of the problem described before, Windows would not let me create the configuration file.

The consequence

There was no major hardship; I just needed to choose a different name for my new server. But then I realised the unexpected thing I was about to do. I had to rename a virtual server which was running in the cloud because 40 years ago an operating system had chosen ‘aux’ as a device name. Imagine trying to explain that to the guys in 1973!

Leave a comment