For the module vs. module conflicts, in no particular order or real consideration:
- Allow internal-only retro conformances, so frameworks don't have to publish every one they make.
- Allow consumers to disambiguate all types of symbols. e.g. (
SomeStruct.A.description
,SomeStruct.B.description
,A.someFunc()
,B.someFunc()
) - Allow consumers to provide their own conformance for conflicted retros. This could merely be choosing a winner or the ability to provide their own implementation. Perhaps conflicts would be considered non-conforming?
For the system, the resiliency rule may be fine.
(As an aside, I've never understood why Apple doesn't take advantage of the ability to ship multiple versions of a framework in a single bundle, instead of the hacks that are implemented to let one executable try to dynamically match behavior across all versions.)