Допустим, у тебя есть библиотека с этими типами, 1 класс и 1 интерфейс.
Кто-то пытается создать класс извне. Хорошо, допустим он создал. Но как он вызовет CompareTo, если IName не доступен? По-этому меняем модификатор доступа. Вот если бы продукт и айнейм оба были бы private или internal, то заработало бы