Old code rots. Not in the traditional sense of the word of course. There is no physical decay, and it doesn’t smell, it usually manifests itself as code that slows over time, or just stops working. So in reality it may be more accurate to say that it erodes in the same way that steel rusts, slowly weakening. Structural erosion of code occurs for a number of reasons. Sometimes it is because the environment itself changes. Code is ported from an old system to a new one, and runs. Yet the increased speed of the system may have a negative impact on the old code due to the type of algorithm used in the code.
A good example is old technology. iPhones (or any phone for that matter) last for a certain number of years. At some point the technology changes, and they are no longer capable of updating the operating system. The iPhone then becomes a tomb for the software within it. Without an OS update, it is then likely that over a short term, apps will no longer be able to be updated either. Or maybe an app is no longer supported, so it may not function properly if transferred to a new iPhone. It sometimes happens with compilers as well. Really old code rots, because it requires a *lot* of changes to make it function, possibly because the software development environment has changed too much.
It is also present in websites, where dependencies such as links no longer exist, causing the website to become dysfunctional.