Sunday, April 12, 2015

DARPA's Project to Make Software Never Become Obsolete

One unfortunate fact of modern life is that functional new software becomes non-functional old software with depressing regularity. For most people, this means predictable episodes of frustration, but for the US military, it's a more serious problem. DARPA's new Building Resource Adaptive Software Systems (BRASS) project aims to take a major shot at avoiding this obsolescence by developing software systems that can still operate properly a hundred years from now.

As systems become more complex, the problems of compatibility and obsolescence become more important. Perfectly good devices may be unusable, vital data may be inaccessible, and communications may be impossible. A simple example of this is the BBC Domesday Project of the 1980s, which digitized the famous 11th century Norman census of England's assets. The project was successful, but the LaserVision discs that the data was stored on were almost forgotten until 2002 when it was realized that their formatting was obsolete and would soon be impossible to access, resulting in a major preservation effort.

For the US military, the problem is more than just frustration; it can have an impact on national security. Even when updates are available, installing and configuring them is costly both in terms of money and time as the problems of backwards compatibility and degraded interoperability in military systems becomes more apparent.

BRASS is a four-year research project that looks at the computational and algorithmic requirements needed to build software systems that can remain functional for over a century. The idea is to produce systems that can actively adapt to changes in the computer environment. According to DARPA, this will require going back to a very basic level, developing new linguistic abstractions, and creating resource-aware program analysis aimed at monitoring changes in computer environments and making the software react accordingly.

Currently, applications work on a software stack made of many layers of abstractions. Getting to through these layers means using different program interfaces. Unfortunately, these interfaces are often informally and incompletely documented inside the interface software itself – if at all. This makes understanding the system extremely painstaking and difficult, it not almost impossible at times. In addition, this makes keeping applications working properly over time without automatic updates difficult, costly, and leads to premature obsolescence.

No comments: