Thinking Ahead

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).

Today I was thinking: what I would do if someone asked me to write software that would last for 20 years? Andy has me thinking about this, thanks to his recent comment.

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?

Some ASP.NET applications are now working on both mono and the MS runtime from the same code base, but don’t get me started on web applications. If, in 20 years, people are still writing applications by throwing HTML, DHTML, JavaScript, cookies, and cascading style sheets into a blender and hitting the ‘stir gently’ button, then the entire industry should retire and become dentists. We couldn’t do any worse then the one working on Chris Sell’s son. Actually, the thought of being a dentist terrifies me. Instead, I think I’ll be a taxi driver - at least I can talk to new and interesting people without them having cotten in thier mouth.

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?

Comments

Andy
Sunday, December 5, 2004

If you look at it there is a lot of software that is out there in library form that has been in mainstream use for at least twenty years. The matrix libraries of Fortran etc. Sure the front end user never sees them but many CAD and GIS applications use libraries like that which have been around for a very long time. <br><br>Even though C and C++ require a recompile for different platforms they do not require a re-write for many things. We have geometry libraries at work in C and C++ that could very well be used for the next twenty years.<br><br>The really big problem with .Net is not its longevity. It's the loss of freedom. When you put your code in .Net you are completely subject to the whims of MS. They don't even have to do much at all to break your app. Say you write something that they decide they don't like as far as DRM goes. They can enforce their DRM on anything written in .Net. Issue a single patch, say it's a security upgrade, it patches the .Net runtime and you are f#cked. Your app with whatever they didn't like will never run again. Make a new media player that plays any format and they can break it if they feel it threatens their market share. Who is going to stop them? By the time the lawsuit ever goes to court your product will be outdated and who is to say you will win. Look at the Netscape IE battle.<br><br>.Net gives them the ability to control what does and doesn't run on their platform and they have never played nice in that arena before. What makes anyone think they will in the future? H3ll Ballmer threatened all the collective governments of SE Asia recently with lawsuits.<br><br>If you write in a system level language that directly manipulates the system itself the worst they can do is break the API you are using to run on their OS. Then all you have to do is create your own memory space outside of the OS Kernel and run in that space.<br><br>I don't think MS is evil. But look at it from their prospective. Every time you write something that they can't control such as a media player they could loose money and market share. Why should they let you do this? Their sole job, as a company is to make the most money they can. Give developers an interface through which their applications must pass and you can enforce any kind of policy you want. That makes great business sense. If I was MS it is exactly what I would have done.<br><br>As a developer we are the canaries in the mine of this industry. We ought to be dropping like flies at the smell of DRM and .Net. Don't even get me started on the BIOS level DRM that MS has been trying to sell board makers. But to many developers only see the cool in .Net and yes it is unbelievably cool. It had to be or no developer would buy into it. It was written by some of the greatest minds in our industry. It's pure genius, I mean that too. I am in absolute awe of what they did inside of .Net. It is an astounding achievement of engineering and productivity increase. <br><br>So too were the creators of the atomic bomb some of the greatest minds of their generation. They too created one of man's most astounding achievements they harnessed the power of the atom. Inf#ckingcredible! But just like the atomic research done then by those scientists, the work done by the computer scientists who wrote .Net could be used for very evil purposes.<br><br>It doesn't make MS evil, it means they are smart. You don't stay on top in this industry as long as MS has without being very smart. Just because someone is smart does not make him or her trustworthy. If someone who in the past at every given opportunity has abused children asks to play alone with your kids, do you let him? What if he's really smart and promises never ever to be bad like that again? F#ck no you don't. Just like that child molester has a previously evil track record; MS has at every given opportunity attempted to stifle innovation that detracted from their market share or general revenue.<br><br>.Net is essentially MS saying, &quot;as long as you play by our rules we will give you the coolest tools ever invented for developers&quot;. Read the fine print though it also says; &quot;by accepting this agreement you give MS full control over your application, your technology cycles, your upgrade budgets, and you are subject to whatever DRM schemas we choose to enforce&quot;. Make no mistake .Net lays the groudwork for DRM. DRM has always been a goal of MS, they have been very open about wanting that for their platform.<br><br>Thank you but no, I will take the other pill. I will probably always write programs for the MS platforms, but on my terms not theirs.<br>

Scott Allen
Monday, December 6, 2004

You have some good points there, Andy. <br><br>I tend to think of the software development industry as an &quot;ecosystem&quot;. Microsoft is free to try and make as much money as they can, but they can't do it at the expense of the ecosystem. If they were to make too many radically short sighted moves they'll kill off the cash cow living in the ecosystem.