But if you don't use the protected functionality, then you don't infringe. I can import java.util.*, but if I don't actually implement anything from that library, I'm not really including everything, and I'm not performing any combinations.
Oh sure, you have to actually instantiate something, but that's easy. I mean let's say I'm writing my application. It's a remote system logging thing. I need networking support. I'm not going to go out and write a new operating system with a novel network stack and a driver for every network card I expect people to use. I just use the sockets library.
Now I've got support for every kind of network there is on every operating system that supports the sockets library. It doesn't matter whether the claim limitation says "over a wireless network," "over a local area network," "on a high latency low bandwidth connection," "over an unreliable network link," "with a network offload processor," or "on a virtual private network," it covers the users of my application. It supports all of those things, and at least one of my million users is going to do each of them. Every one of those limitations and then some collapse to "uses the sockets library," and everything uses the sockets library.
On top of that, it makes claim limitations trivial to implement, which severely dilutes their ability to separate invention from random chance. If there is some feature (which would satisfy a limitation), and you can add it to your program by just importing a library and writing a hundred lines of code, why wouldn't you do it? So people do.
Try this experiment: Pick a collection of software patents at random in the area of, say, smart phones. Pick some individual claim limitations (not the whole claim, just a single limitation) at random and see if a Droid or an iPhone would satisfy the limitation. If you find that the answer is 'yes' more times than not, you can see the problem: Most of the "limitations" aren't really limitations because they're universal or nearly so.
Getting back to your examples, the businesses could cooperate without patents, but if you were going to pick a horse in the race, wouldn't you want the horse that can stop other horses from running?
Sure, if you have a patent system then any given entity will be better off having patents than not. What I'm saying is that the absence of software patents wouldn't hurt them any, because it wouldn't stop them cooperating with one another, and its presence does hurt them because having two patents against Apple's thousand really isn't materially better than having just the one. They'll still get crushed when push comes to shove, and it doesn't much help to stop the other horse from running when your horse is dead.
Patents are by their nature anti-competitive; they grant monopolies, which can lead to injunctions (except as to patent trolls. Patent trolls can't get injunctions thanks to the eBay decision). Developers don't like this anti-competitive aspect. That seems to be the issue; it tells them what they can't do.
I don't think that's really it. I mean don't dismiss the legitimacy of that complaint: We're supposed to be promoting innovation here. Creating a million pages of things that everybody can't do is probably not the best way to accomplish that.
But the real issue is the uncertainty. There is no seer you can go consult to get a concise list of software patents that you need to avoid or design around. It isn't that somebody is telling them what they can't do, it's that nobody can tell them what they can't do. The problem is not that Microsoft has got this one, amazing patent where they truly invented something great and you just can't figure out how to compete with them without infringing it. The problem is that they've got a thousand vague, questionable patents and can bury you in legal fees until you capitulate.