I worked out one reason why software patents are so terribly troublesome versus patents for physical mechanisms.
Because we deal in abstractions.
You can always take this piece of code you wrote and notice that it can be abstracted to solve a class of problems. And then that this class of problems is in turn a subclass of a larger set of problems. And then it's increasingly vague all the way down.
Before long your patent application transforms from "Method to improve page retrieval on ARM7 CPUs" to "Method to improve caching in memory" to "Method to improve caching" to "Method to accelerate any computation".
That generally doesn't happen in the physical world, because physical inventions aren't easily generalisable. You can't take a tractor and, with a few lines of code, abstract it into a platonic ideal that can also spit out cars, buses, trains, planes, ships and the starship Enterprise.
Because we deal in abstractions.
You can always take this piece of code you wrote and notice that it can be abstracted to solve a class of problems. And then that this class of problems is in turn a subclass of a larger set of problems. And then it's increasingly vague all the way down.
Before long your patent application transforms from "Method to improve page retrieval on ARM7 CPUs" to "Method to improve caching in memory" to "Method to improve caching" to "Method to accelerate any computation".
That generally doesn't happen in the physical world, because physical inventions aren't easily generalisable. You can't take a tractor and, with a few lines of code, abstract it into a platonic ideal that can also spit out cars, buses, trains, planes, ships and the starship Enterprise.