Programming in an object-oriented language demands a fine balance between flexibility and control. At one level, objects need
to interact freely to achieve our implementation goals. At a higher level, architectural constraints that ensure the system
can be understood by new developers and can evolve as requirements change must be met. To resolve this tension, researchers
have developed type systems expressing ownership and behavioural restrictions such as immutability. This work reports on our
consolidation of the resulting discoveries into a single programming language. Our language, Joe
3
, imposes little additional syntactic overhead, yet can encode powerful patterns such as fractional permissions and the reference
modes of Flexible Alias Protection.