First, the required attribute has a bunch of artificial limitations that prevent us from using it in places where it would be very helpful to us (e.g. a scalar in a table). These limitations make sense in the context of Flatbuffers' generated code, but are just an annoyance to us.
Second, the notion of required is very backwards compared to the rest of our stack. Rust & Python expect us to specify whether something is nullable, not whether it is required. Same goes for Arrow.
Move away from the builtin required attribute and introduce our own nullable attribute instead.