This document discusses the implications of substitution in object-oriented programming. It explores issues like memory allocation, the meaning of assignment, and differences between equality and identity testing. Key challenges include not knowing object sizes until runtime, which leads to complex semantics or dynamic objects and garbage collection. Dynamic semantics also tend toward pointer semantics for assignment and non-guarantees for equality. The programmer must be able to redefine equality as needed but this can introduce paradoxes.