You bring up a good point. People like to point out that the GPL doesn't prohibit you from selling software, which is true. But it also means that you aren't the exclusive seller of your own software -- if I sell sofware for $1,000 a copy, nothing stops someone from paying me $1,000 and selling the exact same software for $500, $250, $100... even giving it away free. Techinically, you have to buy RHEL from Red Hat. But someone can buy a single copy of RHEL, get the sources, compile the sources (this step is admittedly a lot harder than those three words give it credit for) and give them away free. CentOS used to do this, until Red Hat bought them. (Which puts Red Hat in the weird position of paying people to give the software it charges for away for free.)

There are clearly people who pay Red Hat even though RHEL can be gotten for free from CentOS. Mostly what they're paying for isn't the software, clearly, because the software can be given away for free. What they're really buying is a lot of testing to make sure that, for instance, their enterprise copy of Oracle runs correctly, and someone to yell at if that enterprise copy of Oracle ISN'T running correctly.

Which swings round to what I think you were adressing in your essay -- most software is written by a programmer in exchange for compensation, paid for by people who want to use the software. This is even true, in roundabout ways, for most open source software. (I think it even holds true for Free Software.) Now, the most straightforward way to do this is to have the person who wants to use the software pay for the software. But the GPL makes this more difficult.

A lot of open source and Free Software gets written and paid for in spite of this. How? Because the money-maker is something else. As you say, "In one way or the other, to make money at something in the long run, you are going to have to find and sell a product that people cannot effortlessly get for free." The Linux kernel gets a lot of code paid for by Intel, because it's worth money to Intel to sell x86 processors that people run Linux on rather than buying a SPARC or Alpha or POWER chip (running some proprietary UNIX or Linux, to Intel there's little difference). Red Hat pays for a lot of development on Linux, both because Linux needs to be as good as or better competing *IX operating systems and Windows for its clients to buy it and because having people who write a lot of Linux code helps them when a customer comes to them and needs a custom patch for some part of the operating system. Google pays for open source development because it uses it to run services that it serves ads from and on.

And this has conspired to give the world a lot of software for free (and Free) where the developer still gets paid for their effort. But there are some problems:

1) Sometimes products can suffer from lack of attention until something goes NOTICEABLY wrong. I'm thinking of you, OpenSSL.

2) More broadly, this works better for some things than others. Low-level infrastructure? Plumbing that you can build a service on top of? This seems to work rather well in an open/Free model. As you get closer to user-facing stuff, especially user-facing stuff where your users are individuals and not enterprises, the model starts to work less well. (The notable exception here seems to be web browsers, which seem to be able to produce very good Free and open implementations for end users, so long as they're tied into a larger overall plan of selling those users laptops and smartphones or making money off the default search engine choice for the browser.)

3) There's perverse incentives when the people who use your software and the people who pay for your software aren't the same people. Some of these are actively malicious. Some of them are passive and harder to notice. Free to play mobile games are not open OR Free-as-in-libre, but they are an easy-to-understand example of the problem where your users and your customers are not the same people. In a more relevant example, Google, Facebook and Twitter are all examples of companies who use open software to build closed services, and then revenue is made off selling the users to advertisers. In those cases, there is a tension between doing what's best for the user and doing what's best for the client. Sometimes this is overstated, and I think the overstatement helps some brush off the concern -- you can't let the client win every time, because the client is paying for users and you need to cater to users enough to actually keep them around. But there are times when the tension between who uses your product and who pays for it causes you to make decisions that aren't in your users' best interests.

I think the GPL is useful. Hell, I think it's important. But I also think that there are some significant downsides to the GPL, that it's not a one-size-fits-all solution, that even open source isn't a one-side-fits-all solution, and that making Free versus open or Free versus proprietary into an ideological question has some very real harms associated with it.