stdout Is Not for Messages
twitter.com
twitter.com
Because it's not a Unix CLI tool... And obviously cluttering stderr with informational messages has downsides too. "stdout for info, stderr for error" works pretty well for servers (what else are you supposed to use stdout for?)
It never actually says why this is supposedly bad. This is just repetition of a slogan with zero actual content. I have yet to encounter a "rule" that shouldn't be broken at least on occasion, and without the reasoning you don't know when you're supposed to break it.
It's especially frustrating for programs which only write to files or something, and never produce output on STDOUT.
Most applications nowadays use stdout for exactly what the name implies - any form of output. Complaining about that is yelling at the clouds.
If your program is a data processing tool, then you should avoid printing any logs ideally, and those go to STDERR. A misplaced log on STDOUT will break readers who expect you to be writing JSON or another well specified format on STDOUT.
I'd add to this, write tools that support proper piping in general. It's tempting to just get users to pass input file and then spew messages while processing. Instead why not allow piping in the contents. So many more uses are possible now.
Best practices, common pit falls, etc...
I'm still not fully sold on the idea, but I now have at least one tangible example of when you would want to keep stdout clear of commentary.