It's very situational. I've gotten put on an earlier flight for free when the flight I had a ticket for was overbooked. I knew this because I had gotten a text message asking for volunteers. I offered to help the airline out of its bind, at least a bit, by getting on the earlier flight for no compensation on their part.
That said, I agree with the business logic that says airlines should generally charge for changes unless a fare rule permits them. That may not optimize every specific situation, but it optimizes the overall system when you consider the impact of any other policy on the behavior of informed passengers.