There are significant changes between Avro 1.8 and Avro 1.9. I'm not sure it's possible for beam-sdks-java-core to support both at the same time. The fact that AvroIO is a part of the beam-sdks-java-core doesn't make it simpler. However, I can see how we can build two binary artifacts with the same user-facing API each supporting own version of Avro.
Shading or vendoring would be a breaking change because public signatures of AvroIO (and few other IOs, for instance, BigQueryIO) refer to classes from Avro, for instance, GenericRecord. Furthermore, a lot of Beam users use Avro compiler to generate Java code for SpecificRecord, which would refer to non-vendored version.
