Look at the Free Software Foundation if you want to know why people create and maintain free software. Linux (which is based on Unix) was originally NOT FREE. Somehow, (feel free to help me out) Unix source code became open source and was released under the GNU/GPL through Bearkley Unisversity (I think). The simple thing with free software is that unless you have the finances to cover the overheads of setting up a software development business, selling software for anything is almost impossible. I develop quite simple C++ programs released under the GNU/GPL as a learning tool. As an individual, it is all but impossible to develop and market a piece of software without the support of a full organisation. I develop my own progress and distribute them free to learn and to earn bragging rights. If I think of something that could be useful and I could mange, then I'll make it.
This brings me to my next topic: if anyone needs a really simple program, ask me and I'll see what I can do. I can work with ISO C/C++ and some Windows API. I'm always looking for opportunities to apply my knowledge and build up a portfolio.