Hi CJ,
Thanks for your question, I'll do my best to clarify why this isn't supported today.
First off, I should point out that in the spec you linked to (
https://avro.apache.org/docs/1.7.7/spec.html#Aliases), it states that the Avro implementations may **optionally** use aliases to map a writer's schema to a reader's schema, so this is not required behavior, and Apache Avro's own compatibility checks do not support this.
One issue with supporting aliases is the question of whether all of the downstream consumers support this too. If we did add alias support with respect to compatibility, we would want to be sure that all potential down stream systems supported aliases as well, e.g., in Hive. It would be bad if "backward compatible" schema evolution was backward compatible for only some subset of downstream consumers.
Another tricky issue is that aliases can potentially break 'transitive compatibility'. Let's say we register schema A, and then B, and then C with schemas that look sort of like (pseudo-avro)
A - {name: f1}
B - {name: f2, aliases: [f1]}
C - {name: f2}
Notice that if we support aliases, each incremental schema update would be backward compatible. However, we have the unfortunate situation that C can read B, B can read A, but C cannot be used to read data written with A! This is bad because we would expect backward compatible guarantees to hold across schema evolution.
So, in summary:
1. According to spec, Avro implementations may *optionally* support this
2. Apache Avro compatibility checks do not actually support this
3. We just use Apache Avro's compatibility checks under the hood
4. There are some other considerations to think about including other systems' support of this feature, as well as potential issues raised by 'transitivity of compatibility'.
Hope this helps!
Thanks,
Geoff