We survey notions of aliasing and ownership. An extreme but conceptually useful model is that of pure linear languages where each object is constructed once and read, being consumed, once. We see more realistic programming languages as relaxing this to allow multiple references to an object (spatial aliasing) or multiple sequenced operations on a single live reference (temporal aliasing) before the object is deallocated. Concurrency complicates things (concurrent aliasing) because spatial aliasing may only happen under certain scheduling conditions. We argue that this view of aliasing is closely related to that of type tags in low-level implementations of dynamic types.
Similarly, we argue that ownership corresponds to a higher-level structured view of the net of objects and references, analogous to higher-level types in programming languages. In the same way that not all high-level data-structure consistency requirements can be captured by existing practical syntactic type forms, not all aliasing requirements can be captured by existing syntactic forms of aliasing control (uniqueness, owners-as-dominators, owners-as-modifiers and static capabilities), each of which is successful in a limited domain.
We conclude by arguing for a more holistic approach to the topic of aliasing and ownership.