I often find people defining computer hardware as the "physical" part of a computer and software as either the "intangible" part of the computer or as "instructions" stored in the hardware. Although there's nothing wrong with these definitions per se, they leave out something important and might actually impede our ability to understand the importance of computer programs in the future.
I think it is worthwhile to think of hardware as the fixed part of a computer and software as the variable part. I like to use the following analogy: hardware is to software as a drill is to a drill bit. A drill is a drill; it doesn't change. To make the drill perform different functions, you attach different bits to it. The drill is fixed and the bits are variable, just like hardware and software, respectively. When you buy a computer, you buy the fixed hardware, which you can make perform different functions by attaching (installing) different software to it.
What I find useful about this analogy is that it makes clear that we are not talking here about the physical form taken by the drill and its bits -- both are quite physical. And the same is true in the case of hardware and software -- both are physical if what we are talking about are components of a physical computer. The web browser that you are using to read this blog is physical; it consists of electrical signals in your computer. Even if you take issue with the physicality of electrical signals, tomorrow's molecular computers will convince you that software is a physical thing.
Therefore, if the law is to treat software differently than hardware or anything else, the difference must stem from something other than the fact that software is not "physical." I've tried elsewhere in this blog to explore what else makes software different, and the implications of those differences for the law.
Well, very interesting your definition about hardware and software, and I agree with you that both are physical. There is a kind of hardware called FPGA (Field Programmable Gate Array), this is a very interesting device, because you can modify your hardware through software. For example: If I want a RAM (Random Access Memory) I can programm my FPGA to perform like a RAM, or if I want a CPU I can (re)programm my FPGA to perform like a CPU, so with a FPGA the person can programm any hardware device (the same FPGA can be programmed a lot of times), thus the traditional idea that hardware is the fixed part of a computer is not anymore valid, because with a FPGA you can have so many kinds of hardware devices. Thinking by this way we note that both software and hardware are variable parts, but, if we consider the FPGA itself, it is also a fixed part, because the FPGA always will be a FPGA. For example, let's say that my computer has three FPGA's: the first is programmed as a CPU, the second as a RAM and the third as a ROM(Read Only Memory); so, although the three are performing different kinds of hardware devices, all of them still are FPGA's, then, the definition of fixed parts for the hardware would be true.
Hardware: The part of an electronic device (a computer, for example) that executes instructions.
Software: A finite set of instructions that can modify the state of the hardware's small physical components (registers).
I am modifying the state of the register AH (AH = 9), and this register is a small segment of memory.
The definition are so technical, I know.
Well, I think that the kind of programming that FPGA allows you to do, can break some IP (Intelectual Property) related to patented hardware devices. Using some Evolutionary Algorithm (Genetic Algorithm, Evolution Strategy or Geneti Programming) with FPGA can be a powerful (and dangerous??) combination for the automating invention.