If 13 years isn't enough warning to migrate your use case, no amount of warning will help you.
At some point you have to stop saying its to hard to migrate.
Anyway, how hard would it have been to have a "from __past__ import old_strings" that could have worked for the first few releases to allow the single biggest issue to be smoothed over universally and then fixed file by file under the Python 3 environment? With that in place a lot of shops could have just migrated on day 1 and then iteratively worked to finish the job rather than delaying for so long.
Personally I still have a sour taste of the urllib migration. All the imports were moved around for no reasons, completely breaking all usage of urllib and any "import urllib", with no way to fix in sight.
The solution came with six a million years later, adding a hundred alias in six.moves.urllib.somefunction that dispatch to the right place.
Oh wait, we pay computing grad students literally 1/10 of their potential salary ($10Ks vs $100Ks). Why could there possibly be a shortage?
-_-
More importantly, it shouldn't be prohibitively expensive to port academic Python code.
The low pay is in exchange for the ability to do research, not to be a discount software engineer.
Keeping current with industry is the only way they can stay relevant in the modern world, particularly in IT and related fields where anyone with a computer at home can do the same research as someone at a university.
There's 0 difference between the states that were putting a call out for COBOL programmers to deal with their disaster of an unemployment system and the professor running some python script from 2003. Their lack of responsible ownership is their own fault.
Python decided instead that their customers were of no value, and all the millions of lines of existing Python shouldn't continue to run, even though it would be trivial for them to continue supporting 2.x syntax along with 3.x. I think it is one of the most insane decisions ever made by a mainstream programming language.
But that means that any language revision needs to work hard at making the transition easy and incremental. 2to3 was and is laughable; at no point was it a reasonable solution.
It's okay to say "we need maintenance money". But no one has an unlimited budget. People complain about the 2->3 transition because (1) it was extraordinarily steep, (2) was not justified, (3) its huge costs are repeatedly denied.