orphan rule
You may implement a trait for a type only if the trait or the type is yours.
The orphan rule (part of coherence) allows impl Trait for Type only when the trait or the type is defined in the current crate, so two crates can never supply conflicting impls.
Examples
impl fmt::Display for Vec<f64>fails with E0117, since bothDisplayandVeccome from the standard library; a newtype wrapper gets around it.
See also