`Core` should knew nothing about concrete protocols.