Different companies contribute in different ways. The company I work for funds major features that we need, as well as having support contracts with the primary developers of some of the key software that we use, and we contribute back patches when we find bugs that need fixing. Google does their Summer of Code, in which students can work remotely over their summer break, plus does primary development of a lot of projects like Android and Chrome, and contributes to others like the Linux kernel. Red Hat and Canonical mostly develop open source software directly. The Gnome OPW funds internships for women, over several periods over the course of the year.
So there are lots of opportunities out there, with a lot of different ways to get funding and support. I don't think that each program needs to be all things for all people; it's OK to have particular targeted and focused programs, either on different groups of developers, different projects, different types of time commitment, and so on.