Option is FFI safe or not

Option::None is not guaranteed to be 0, therefore you cannot simply convert a pointer to an Option and hope it will be that.

fn f(o: Option<bool>) {
    unsafe { dbg!(std::mem::transmute::<_, u8>(o)) };
}
fn main() {
    f(Some(false)); // 0
    f(Some(true));  // 1
    f(None);        // 2
}

Therefore Option is not FFI safe and should not be used (ultimatly because Rust ABI is not stable (nor really specificied) it is not FFI safe. (Even C++s ABI is not specified. IIRC only C has a stable ABI, and that's why it is the lingua franca).