Digging a little more into jpster's insight: I think the expectation when you pass something as immutable is that *state can't change*. I consider, (Maybe controversially) rust's explicit control over mutability, (notably mutable refs as fn params) to be its strongest quality. (I have a headache with this whenever I use JS, Python etc). Mutability in this case traditionally refers to changing variables in the memory a CPU accesses. It's a black and white topic for most non-embedded programming. Let's look at the example of GPIO atomic MMIO in this light. We are not changing variables in memory. But I think in character, by changing, say, an LED's on/off state, we're doing something close in practice. State is offloaded from CPU-accessible RAM to an "external" device, but it's still changing. After thinking this through, I think &mut is the move!