3 votes On Variance and Extensibility Posted September 3 by skybrian Tags: standards, compatibility, file formats, steven wittens, long read http://acko.net/blog/on-variance-and-extensibility/ Link information This data is scraped automatically and may be incorrect. Authors Steven Wittens Published Aug 28 2021 Word count 5635 words 1 comment Collapse replies Expand all Comments sorted by most votes newest first order posted relevance OK skybrian (OP) September 3 Link From the article: From the article: What happens is, someone turns an Animal => Animal into a Duck => Duck without telling anyone else, by adding an X- field. This is fine, because Animal ignores unknown metadata, and X- fields default to none. Hence every Animal really is a valid Duck, even though Duck specializes Animal. Slowly more people replace their Animal => Animal type with Duck => Duck. Which means ducks are becoming the new defacto Animal. But then someone decides it needed to be a Chicken => Chicken instead, and that chickens are the new Animal. Not everyone is on-board with that. So you need to continue to support the old Duck and the new Chicken on the input side. You also need to output something that passes as both Duck and Chicken, that is, a ChickenDuck. Your signature becomes: (Duck | Chicken | ChickenDuck) => ChickenDuck This is not what you wanted at all, because it always lays two eggs at the same time, one with an X and one without. This is also a metaphor for IPv4 vs IPv6. If you have one standard, and you make a new standard, now you have 3 standards: the old one, the theoretical new one, and the actual new one.