Sharing ownership is great for read-only data. However, mutability is sometimes required, and Rust provides a great way to achieve this. If you recall the rules of ownership and borrowing, if there is a mutable reference, it has to be the only reference to avoid anomalies.
This is typically where the borrow checker comes in: at compile time, it makes sure that the condition holds true. This is where Rust introduces the pattern of interior mutability. By wrapping the data into a RefCell or Cell-type object, immutable and mutable access can be handed out dynamically. Let's see how this works in practice.