Ownership is responsibility
The owner of a value is responsible for eventually releasing its resources. When ownership moves, that responsibility moves too. This is a useful first model because it connects Rust’s rules to files, sockets, heap memory, and other things that need one clear cleanup path.
fn consume(name: String) {
println!("{name}");
}
let label = String::from("surface");
consume(label);
// label is no longer available here.
Borrowing is temporary access
A shared reference &T is permission to read without taking responsibility for cleanup. A mutable reference &mut T is exclusive temporary access. The exclusivity rule prevents two places from changing the same value without coordination.
Lifetimes are proof, not duration
A lifetime annotation usually does not make a value live longer. It describes a relationship the compiler must verify—for example, that a returned reference cannot outlive the input it points into.
Seen this way, the borrow checker is less a gatekeeper than a proof assistant. It asks the type signature to carry enough evidence that resource use remains valid.