I don't know where None comes from (what's the T in Option<T>?)
Assuming you meant (), that's a unit type with one valid value. It's a ZST, but can be created and returned.
! is a bottom type. It's uninhabited. Can't be created. Functions can never return it because they can never construct it. So why's this useful? It can be coerced to any type.
Because the set of valid values for ! is the null set, by contradiction, there do not exist any values valid for the type ! that are invalid for any other type T. Therefore, all valid values of ! are also valid values of any other type T, and you can always convert from it to any other type.
Notably, this is already possible, but language support for it isn't amazing:
rs
enum A {}
fn bar(a: A) {
let foo: Box<Arc<Rc<Mutex<String>>>> = match a {}
}
Heck you can even do this today:
rs
// `loop {}` never returns, so its type is `!`:
let blah: String = loop {};
Then how would you annotate having no return value?