Local carpenters have rebuilt the Ise Jingu shrine in Japan every 20 years since 690. The 62nd rebuilding will start in 2013, and will take about 8 years.
Twenty years seems like a terribly short time for a shrine to be around. A common mortgage term in the U.S. is 30 years. We’d be upset if we had to rebuild our homes every 20 years.
On the other hand, twenty years is a terribly long time in software. Even 5 years can be a stretch. Off hand I can only think of 1 major piece of Microsoft software that has remained the “latest and greatest” for a 5 year stretch: SQL Server 2000 (and this is just a guess, but I don’t think it was in the master plan to ride that horse for 5 years).
If I go backwards 20 years I’d be bumping up against the fringe of my computing experience. If someone asked me then to write software to last for 20 years I’d have no choice but to write in Basic on a Texas Instruments 99 4/A. If customers were still using the software they’d have to buy spare parts from eBay, or (more likely), run the software on a PC under emulation.
How could I develop software today to last 20 years and have some isolation from the aggressive innovations in platforms and runtimes and preferably never even re-compile the code?
C++ offers me a ubiquitous, standardized language, but it’s hard to write portable code, harder still to write portable GUI code, and tediously hard to write portable GUI code without a dangling pointer lurking. Recompiles for a different architecture are required. If I were to just target Windows XP - can it still run in 20 years? Maybe. Ben Armstrong has Windows 2.03 running on a Virtual PC today.
Java takes care of dangling pointers and runs on many platforms, but is not a standardized language. If IBM ever talks Sun into turning Java open source, it would certainly look more attractive. There is a healthy amount of community and open source activity around Java today, which is always encouraging, but in 20 years Sun's lawyers might complete the mission of suing every supporter.
Then there is .NET. At least one language, C#, is standardized. There are open source implementations of the runtime from outside of Microsoft, but writing a GUI with portable code is still problematic, and the rate of change is still high. There are also the rumors that a future OS version will only support one version of the runtime. Would my program still work there?
In the end, I’d have to think both .NET and Java would undergo major breaking changes in at least 10 to 15 years. I have a feeling C++ will still be chugging along, but my crystal ball manufacturer does not have a good track record.
To really look ahead, visit the page of the Long Now Foundation and think about the challenges of building a clock to last 10,000 years. How do you power the clock? How do you provide instructions for someone to maintain the clock? What do you do to lessen the risk of damage from earthquakes and roving, juiced up teenagers?