Future software systems will be vast and impossible to rebuild. The tools engineers need to get them and keep them running need to take advantage of the best we have in static and dynamic languages - to begin with. Long-running systems must be repairable and extendable while they run. We can leverage this longevity by designing our languages and systems to learn about and create models for themselves, to hypothesize improvements on themselves, discover and propose new capabilities, and to conscientiously assist in their own upkeep and continual redesign. All while the system never stops. Our lives will depend on it. Copyright 2010 ACM.