Привет.
Только Object и ProtoObject не должны иметь instance variables. С подклассами можно делать, что угодно (хотя есть и другие классы с ограничением).
Причина довольно интересная:
Проблема в том, что есть классы, к которым VM предъявляет определенные требования на набор и порядок переменных. Например, VM ожидает, что CompiledMethod это bytearray с переменным количеством слотов, где хранятся литералы. Но в то же время CompiledMethod - это еще и подвид Object и ProtoObject. И если добавить переменную в Object, то будет изменен формат всех методов в системе, что нарушит контракт с виртуалкой, и имидж сломается.
Другой пример, это класс любого объекта. Виртуалка ожидает, что поля любого класса начинаются с superclass, methodDict и format. И поскольку классы это тоже объекты, то добавление переменой в Object так же нарушит контракт, и все сломается.
Интересно было бы решить данную проблему. В Pharo сейчас добавлены first class layout для описания структуры экземпляров. И определенный тип layout-а вполне мог бы переопределять структуру экземпляров в обход наследования.