> Well, it can, except you then need to go through and update all of your internal APIs to be correct.
You do, but it's easy: run a compile, fix the errors, repeat until no more errors.
> It would have been better to just delineate that barrier better from an API standpoint.
Isn't that exactly what the Python 3 transition was? i.e. stop accepting non-unicode "strings" (actually just arbitrary byte sequences) for APIs that semantically require a string, reserve them for APIs that actually want a byte sequence.