Malware has a shelf life. Depending on what the malware is targeting, its complexity, and other such factors, this shelf life may vary.
Eventually, things change. The programming language a malware was written in may change. Something written in python 30 years ago is very likely to not work on a system today without modifications. APIs change. Libraries stop being maintained. Operating systems come and go. The malware may need to be ported to a new platform. etc.
Often, malware that is in this state can be brought back to life with trivial modifications. Other times, it may need to be completely or partially re-implemented. Most malware is not that hard to re-implement as it doesn’t have a ton of functionality and tends to be simple in nature.
Sometimes, an attacker may run into old legacy targets where older malware shines. After all, its what it was intended to be run on. Older systems will also have problems running modern software for the same reasons listed above, but reversed; a newer program may require libraries, APIs, interpreters, etc that did not exist when the legacy system was created. As such, it won’t know what to do with it and you will have to revert to using old tools, techniques, and procedures.