This is a half-technical, half-community question.
Say you want to add a feature to an existing function, already published in the wild world (opam). Of course, you can just provide new functions, but that means multiplying their number each time you add an orthogonal option (or you only provide some combinations, and then your user wonders why some others are absent). In many cases, using optional arguments is more natural and more convenient. However, that implies changing the type of the existing function, hence my question: from the user perspective, how well-accepted adding an optional argument to an existing function is?
I don’t think it breaks anything at the source level, except rare scenarios where someone reuses the signature of your module to reimplement a drop-in replacement of your function—and then breaking is expected, and adding a new function would break just as well.
It does change the binary interface of the function, but, I don’t have a clear picture of this: does it happen that people plug in a new version of a library without recompiling their client code?
Also, it definitely breaks C code calling the OCaml function. I believe that this in infrequent, and that signaling the breaking change with the new release would be enough.