The real problem I ran into when working on a basically the same idea was how to maintain a population of millions of objects (most small, some large) and keep performance at a decent level. Most of the criticisms in the various replies can be answered by bringing more object classes into the mix. Careful algorithm design is required to avoid touching every object in the system unless there is a specific reason to do so. When the total set of objects will fit in memory it isn't much of a problem. When the object population starts swapping to disk, though, and you try to send a message to each one, then performance goes down the tubes. The project seems eminently doable and I encourage them to keep going.