GNU Linux, and open source software as a whole, have great advantages to the community of people that use it when compared to closed source, proprietary software. Two of these advantages are the ability to communicate directly with the developers to request features and report bugs, and the ability of the project to live on because the development is not dependent on a company.
Most open source software projects have a method in which any user can, and is encouraged to, report bugs and request features. Companies that develop software rarely have this ability because, among other reasons, they do not take feature requests and have implemented their own, internal development road map not accessible by the public and they simply do not have the man power or resources to respond to and triage each bug report or feature request.
Because open source projects are community driven it is generally volunteers who make the bug reports and feature requests, triage these reports, investigate each report more to possibly find a cause and even submit patches to the code. What do these volunteers get out of it? They get a more stable, feature rich piece of software among other advantages.
Linux and open source software are generally rich in features due to the fact that the only limit to the number of features the particular software has is the community demand for it and how active the product is. Bugs in open source software tend to get fixed quickly and completely as well.
In closed source software, the user might be able to request a feature or report a bug directly to the company (not M$) but generally has limited options and even less of a chance of getting the problem solved, unless of course a competitor builds a better product or fixes the problem.
Linux and open source software can be worked on by anyone, and most projects maintain a way to report bugs and request features. From there, any skilled programmer can fix the bug or implement the change. Closed source software on the other hand cannot be worked on by anyone.
Of course, this doesn't mean that anyone can simply make any changes they want to the software and those changes are automatically approved. In general, a peer review of the change is done and approval is required for inclusion in the publicly available product.
But why would anyone do this for free? I don't believe they do it for free, they just don't do it for monetary compensation. These volunteers do it for the project and for the community. They get to use a better product, get to say the helped build it and they don't have to spend money on an inferior, closed source alternative.
I use GNU/Linux and help out supporting the community all the time, and am preparing to contribute to some projects. It feels good to be a part of something so positive, and Linux and other open source software does bring something to those who may not be able to afford it otherwise.