There are several reasons why GNU bashes proprietary software. Many of them I even strongly agree with.
Firstly there is the re-use factor. Where as from GNU software you can pull down parts of it and use for completely different projects, proprietary software does not allow this. For example one can easily get a C/C++ compiler for any platform by porting GCC code. A proprietary compiler (Visual C++) does not allow this, forcing you to "re-invent the wheel" rather than actually getting something done.
Then there is the entire pay for something simple problem. Why should you have to pay for a decent image processing program? Adobe Photoshop and Paint Shop both have hefty licence costs. Operating systems like Mac and Windows also require expensive licences. However you can get programs like Gimp and operating systems like Linux completely free of charge. To produce a DVD player you in theory need to pay a licence fee still, again something completely stupid as it is not even that complex to do.
There is also the product quantity argument and maintainability. Paid software is only as good as the financial resources allow it to be. After maintenance stops you may find bugs never get fixed. GNU software on the other hand encourages users to help fix problems. If you encounter a really annoying bug that has been around for a long time you can go and fix it yourself. Better still you can then send a patch to the software maintainers and many of them will be happy to integrate along with a constant stream of fixes from users just like yourself. If a feature is missing you can do the same, there really is nothing to stop you doing sensible stuff.
Finally there is the argument of product life. Most commercial software has a finite life after which all maintenance stops. Eventually the product might become so un-supported that it becomes impossible to use or requires expensive specialist hardware (not off-the-shelf components). GNU projects on the other hand have practically an infinite maintenance time. When such software stops working on one platform, you (or others) can work on porting it to a new platform and feed back the changes to the developers so everyone can now use it on the new platform. Even if no one bothers to do any maintenance for 10 years (imagine some old tool people stopped using that you need to load some old files) you can still make it work as you have full access to the source code to work on.
The main argument against GNU is the financial model. To put it bluntly, it has none what so ever. You cannot charge for a build of GCC (although the licence permits it if I recall) simply because anyone can download it for free. Also the overall quality of GNU products is generally much lower due to a lack of expertise or simply resources to spend on improving quality. You open Adobe Photoshop and chances are you will never find an error let alone a crash, even more so after a few patches. Open GIMP and you will almost certainly find errors somewhere and there is a good chance the process could even crash under some conditions.
This is not the case for all GNU software however (only most). Compilers like GCC and the Linux Kernel do have paid for development due to their wide spread use in industry.