core: define an Engine interface