Entity render controllers and form controllers are not responsible for checking view and edit access on the entity. Calling code needs to do that where appropriate.
So then, why should formatters and widgets be responsible for checking field access? For symmetry, shouldn't that be the caller's responsibility?