20 Year Software: Engineering and Updates[no description provided]
Twenty years ago, Windows 95 was the most common operating system. Yahoo and Altavista were our gateways to the internet. Steve Jobs just returned to Apple. Google didn't exist yet. America Online had just launched their Instant Messenger. IPv6 was coming soon. That's part of the state of software in 1997, twenty years ago. We need to figure out what engineering software looks like for a twenty year lifespan, and part of that will be really doing such engineering, because theory will only take us to the limits of our imaginations.
Today, companies are selling devices that will last twenty years in the home, such as refrigerators and speakers, and making them with network connectivity. That network connectivity is both full internet connectivity, that is, Internet Protocol stacks, and also local network connectivity, such as Bluetooth and Zigbee.
We have very little idea how to make software that can survive as long as AOL IM did. (It's going away in December, if you missed the story.)
“The customer can choose to acknowledge the policy, or can accept that over time their product may cease to function,” the Sonos spokesperson said, specifically.
Or, as the Consumerist, part of Consumer Reports, puts it in "Sonos Holds Software Updates Hostage If You Don’t Sign New Privacy Agreement:"
There are some real challenges here, both technical and economic. Twenty years ago, we didn't understand double-free or format string vulnerabilities. Twenty years of software updates aren't going to be cheap. (I wrote about the economics in "Maintaining & Updating Software.")
The image at the top is the sole notification that I've gotten that Office 2011 is no longer getting security updates. (Sadly, it's only shown once per computer, or perhaps once per user of the computer.) Microsoft, like all tech companies, will cut functionality that it can't support, like Visual Basic for Mac and also "end of lifes" its products. They do so on a published timeline, but it seems wrong to apply that to a refrigerator, end of lifeing your food supply.
There's probably a clash coming between what's allowable and what's economically feasible. If your contract says you can update your device at any time, it still may be beyond "the corners of the contract" to shut it off entirely. Beyond economically challenging, it may not even be technically feasible to update the system. Perhaps the chip is too small, or its power budget too meager, to always connect over TLS4.2, needed addresses the SILLYLOGO attack.
What we need might include:
- A Dead Software Foundation, dedicated to maintaining the software which underlies IoT devices for twenty years. This is not only the Linux kernel, but things like tinybox and openssl. Such a foundation could be funded by organizations shipping IoT devices, or even by governments, concerned about the externalities, what Sean Smith called "the Cyber Love Canal" in The Internet of Risky Things. The Love Canal analogy is apt; in theory, the government cleans up after the firms that polluted are gone. (The practice is far more complex.)
- Model architectures that show how to engineer devices, such as an internet speaker, so that it can effectively be taken offline when the time comes. (There's work in the mobile app space on making apps work offline, which is related, but carries the expectation that the app will eventually reconnect.)
- Conceptualization of the legal limits of what you can sign away in the fine print. (This may be everything; between severability and arbitration clauses, the courts have let contract law tilt very far towards the contract authors, but Congress did step in to write the Consumer Review Fairness Act.) The FTC has commented on issues of device longevity, but not (afaik) on limits of contracts.
What else do we need to build software that survives for twenty years?