Ownership, borrowing and lifetimes, learned the way the borrow checker expects.
Rust's borrow checker is not an obstacle to work around; it is the mechanism that lets the compiler guarantee memory safety with no garbage collector and no manual free. This course builds that intuition from first principles. You start with what a move actually is, why a value cannot be used after it, how shared and exclusive borrows are made exclusive at compile time, and how those same rules are what make Rust threads safe without locks you have to remember. Lifetimes get their own module because they are the one part of the system that look like types but cost nothing at runtime. By the end you should be able to read a borrow-checker error and name the rule it is enforcing, which is the difference between fighting the compiler and working with it.