Ha szemantikai változásod van, akkor is minden klienst módosítani kell (valójában az is API változás, még akkor is, ha binárisan kompatibilis marad).
Ha egy függvényhívás szemantikája megváltozik (például az, hogy milyen esetekben dob hibát, vagy milyen értéket vár), akkor az inkompatibilis változás, akkor is, ha binárisan kompatibilis marad a régi kliensekkel.
Épp ezért teljesen mindegy, hogy szemantikailag vagy binárisan töröd el a kompatibilitást (és vezetsz be public field helyett setter).