Suppose you are working on some software that has an interface used by other software. It might be a library or a website or a command line program or an operating system. But at least one other developer uses your interface to get some functionality so they won't have to do the work in their own code. Is there ever a time when it's acceptable to break that public interface?
Obviously an interface change might unintentionally cause some program out there to break. That's just bad luck, bad documentation or bad usage. Here are the sort of breaks I'm thinking about:
An new parameter is required to be supplied by the caller.
The function name or URL is changed and the old name doesn't exist.
Error/return codes change meaning (e.g. 1 used to mean fail and now it means one result).
New side effects are added or old ones removed.
The result set format is radically changed (e.g. HTML to PDF).
A long-standing bug that developers have coded around gets fixed.
Results are "improved" in ways that are not backward compatible in all caller code (e.g. 32 to 64 bit results).
My assumption is that these sort of changes are always bad practice after the interface has been public for a reasonable "beta" period. Am I right?