Saturday 4 September 2010

Immortal software

Back in a good old MoonEdit days, when everything was brighter and simpler (I call it double sarcasm, those days are not over yet!), together with my friends I started a MoonEdit debate "Immortal software - a software that our grand-grand children will be able to not only run but to take advantage of its functionality". VM-based languages (Java, C#) and WORA (write-once run-anywhere) seem to be good enough for that purpose, but is it ?

I'm not going to talk about good old DOS days, DOS4GW, hardware registers and other weird things that was an obvious trap (but how many of your really thought of it when devoloping this way?). Maybe just one more sentence: all my old DOS software is practically dead. It's not that you cannot execute it at all (i.e. there is DosBox, although my software has still some minor issues in it), it's also the fact that the software is completely out of date. First of all it is not well integrated with a system, i.e. artificial memory limits (16bit addressing or just stupid constants in a code), no support for long file names or even no shared clipboard. Imagine using text editor for your daily notes that is still very good piece of software, but only runs in a DosBox. It would be utterly annoying. It's dead, end of story, with a little exception of games. Only a little, since user demands on realistic graphics grows almost exponentially here.

Now think about all this software made entirely for Windows 3.1, Windows 95 and even XP. It's already outdated in a Vista or Windows 7 - compatiblity issues (even with new compatibility mode, some applications simply crash at the begning). It's even worse that with DOS - at least DOS was "simple" enough to emulate (almost perfectly). Software developers are doomed again.

Just don't tell me open source is a solution - it is not. Being able to compile your code for a long time is not a trivial task. Compilers change, environment change, third party library versions change or are not supported anymore. It's also a trap!

Now we are finally approaching VMs. In theory it should be perfect: low-level instruction set is fixed (forever?), but there is still a little problem with environment and system libraries. User demands grow and we have frequent Java SDK and .NET framework updates. Nobody really guarentee there will be no compatibility issues for VM binaries. Engineers behind those technologies mostly concentrate on portability issues, not the immortality. It's even against economy! The biggest problem is with third party dynamic libraries. If you don't use "fancy" stuff in your code, you should be safe, but can you sleep well ?
I don't even want to go into things like JavaScript - it has compatibility issues even over various web browser.

As a conclusion I ask to myself a real, serious question - will my grand-grand children be able to execute and take advantage of any of my software or we, developers, are all doomed and be utterly forgotten?
I propose a new buzz-word, the direction for new immortal software movement: WOLF = wirte-once, live forever.