As far as I know, both Pydantic and marshmallow start using annotation for runtime type after PEP 563 is accepted. Am I right? When PEP 563 is accepted, there are some tools using runtime type in annotation, but they are not adopted widely yet. But we didn't have any good way to emit DeprecationWarning for use cases that PEP 563 breaks. Maybe, we should have changed the default behavior soon in Python 3.8. With long preparation period without DeperecationWarning, use cases broken by PEP 563 beccome much. I still love PEP 563. Python is dynamic language so runtime type and static type can not be 100% consistent. Annotation is handy tool. But there is only one annotation per object. When we start using annotation for multiple purposes, it becomes ugly monster soon. Using annotation syntax only for static typing like TypeScript is the ideal. TypeScript is far more succeeded than Python about Gradual Typing. But, current status is went to where I hate already. Annotation is used for multiple purposes already. I'm sad and disappointed about it, but that's that. I'm OK to keep PEP 563 opt-in. And I think we should do it. (off course, I'm not a SC member. I follow the SC decision). And if we keep PEP 563 opt-in, no need to compare PEP 563 with PEP 649. PEP 649 should be compared with "stock semantics + opt-in PEP 563 semantics". Of course, one semantics is better than two semanticses. But we need to have three semanticses until we can remove stock + PEP 563 semantices. We should think about PEP 649 very carefully, spending more time. Regards,