If people didn't do the work for free in open source, then companies who need that functionality would in fact be forced to pay for it, although it may not necessarily be open source in turn. It's hard to complain about the state of open source because people choose to put themselves in these predicaments. If you need money to sustain the project, asking for donations is not really an adequate plan.