I'm coding a bunch of systems right now. They do not derive from a common interface.
Some example systems:
Think about other APIs which you have written code against. When was the last time that an API required the programmer to know to call an
init method, otherwise crashing at runtime?
As a consumer of your API, it would drive me nuts if I had to know to call an
init method after constructing an object. I would recommend an alternative that I have seen and used firsthand: document expensive object instantiation. What's the point of deferring an expensive initialization if it's required for the program to not crash?