Given the task of designing a software system to be used for at least 100 years, what design choices would you make to help ensure its survival and usefulness? For example, to allow it to be ported to different hardware/software platforms, or to allow it to be integrated with other systems. Inspired by https://news.ycombinator.com/item?id=19272428