Objects Are Independent Programs
The easiest problem to solve is allowing developers to independently design objects without expressing constraints that inhibit the developers' design freedoms. One way is to provide a MetaObject protocol that allows developers to adapt the rules of a language to fit a particular context. An even easier way (both to create and to use) is to make the primitive parts of the message system available to developers, to combine as needed to fulfill their design goals.
This is easier to create because any more complex system would need these primitives anyway. It is easier to use because it allows the developers to construct solutions to problems as they encounter them, rather than trying to work out how to adapt existing rules onto the models they have for their solutions. That adaptation was one of the difficulties with using OOP we explored in Chapter 1, Antithesis: if what you've got is Java inheritance, you need to solve your problem using Java inheritance...