Honestly, a lot of it was not that hard to port if you really wanted, it's just that the ROI of replacing the entire stack including physical machines was not necessarily good. The parts where ROI was good got replaced already.
Part of the value of a migration would be the opportunity to to unwind some of the details that are contradictory, mis- or non-documented, or wrong-but-unfixable.
Also, a lot of the problematic issues are related not to fixing the local code, but dealing with stuff like external systems or pre-existing legacy data that you need to be able to read back after 30 years from cold storage.