How computers and software work
Some people on galtsgulch do not seem to understand how software works. This website http://www.metafysica.nl/computer.html explains in detail how computers and software work down to the transistor level. A transistor when used in a computer is switch - that is the ones and zeros you have heard of. The transistor changes the direction that electricity flows, which means it changes the wiring. Software does nothing without hardware.
It is embarrassing that some people in the gulch have worked in software their whole life and they do not know how computers work.
I provide this information for those who might be honestly interested in this issue.
For those of you who are not computer oriented, think about the telephone system. In the old days you called a switchboard operator who used a patch panel to connect your telephone line to the person’s you were calling. This rewired the circuit, now providing a connection between you and the person you were calling. The switch board operator was replaced with electro-mechanical switch that could “interpret” the digits you dialed to a telephone line and connect your telephone line to the telephone line you called. Eventually these electro magnetic switches were replaced with transistors and elaborate logic circuits (a computer) replaced the electro-magnetic switches. When you dialed a number your programmed the telephone system to close a switch(es) between you and the number you called. Modern programming is much more complex, but it is essentially the same thing.
It is embarrassing that some people in the gulch have worked in software their whole life and they do not know how computers work.
I provide this information for those who might be honestly interested in this issue.
For those of you who are not computer oriented, think about the telephone system. In the old days you called a switchboard operator who used a patch panel to connect your telephone line to the person’s you were calling. This rewired the circuit, now providing a connection between you and the person you were calling. The switch board operator was replaced with electro-mechanical switch that could “interpret” the digits you dialed to a telephone line and connect your telephone line to the telephone line you called. Eventually these electro magnetic switches were replaced with transistors and elaborate logic circuits (a computer) replaced the electro-magnetic switches. When you dialed a number your programmed the telephone system to close a switch(es) between you and the number you called. Modern programming is much more complex, but it is essentially the same thing.
The only significant difference between a ROM and RAM is the volatility. The end result is the same.
So yes, to Dale's point, the software does rewire the hardware, even if only temporarily.
The combination makes the device useful. Both pieces are entitled to protection for the inventors.
A book without words printed on it is simply empty pages, to be useful it must be printed. This does not mean that the contents of the book are patented, we use copyright for the contents. The device that prints the book is patented.
This may seem like we are splitting hairs, the distinction from a software designers point of view is that with copyright, if you don't copy someone's code but write your own you do not violate their copyright. With patents, if you write your own code based on your own solution to the problem you may find that someone else has patented that idea and you can be subject to a ruinous law suit. You also get a copyright on your software automatically by being the author, patents require thousands of dollars and significant time to get.
Professionally I was an application programmer for a few years and then became a systems programmer for a mainframe maintaining the operating system with it's close link to hardware.
In the 1980's I continued to do that while developing typesetting software and designing an early desktop publishing system. I wrote a lot of assembler code writing software at the machine level on multiple platforms, including writing an assembler for my commodore 64 for fun.
In the early 1990's I started a software firm to do medical laboratory software (see the add that appears from time to time). By then there was very little assembler but I wrote about 750,000 lines of C code including managing interfaces to hundreds of types of laboratory instruments, typically over serial links.
So, when I tell you I know how computers work, I really do and I don't need to follow a link to a "Here is how a computer works" any more than you need to follow one to "how the patent system works".
And, really, what's the point of starting another thread that certainly seems like a challenge then hiding my comment?
Your conflation of the hardware triggering switches as the result of reading data being equivalent to the data rewiring the computer has no meaningful use in thinking about computer except to allow you to state that a program is a device.
Unfortunately the very same logic can be used to show that the surface changes on a dvd which cause the led's (no longer cathode ray tube) to turn off and on and make a picture on the screen means that a movie is also a device since it 'rewires' your television set.
It's not really a useful definition.
I agree software doesn't "rewire" the MCU: it just asserts/deasserts various ALU inputs and shift registers. ALUs and register are logic circuits definable by truth tables. You're not re-wiring them unless you consider asserting one input on an XOR gate to be "re-wiring" a buffering to become an inverter.
I don't see why this matters. Most companies doing something properitary would be more concerned if the software running on one of their boards were stolen than if the shematics, BOM, and Gerbers were stolen. There's more value in the software usually.
What is the argument against patenting software? Is it that it must be part of a larger invention? What if the software, though, is like an invention, with all the novelty in the software and the hardware being just a platform (a vessel one SW engineer told me) for their invention?
This would not be a very big issue if the patent office only patented unique ideas that no one else is likely to think of without seeing the original. Unfortunately since the 1990's there has been an explosion of patents for algorithms, many of which are quite obvious.
This means that a developer is at risk of innocently creating a routine that is covered, or may be covered by someone who has a patent with a number of claims. Practically speaking it is impossible for the programmer to do a patent search on every routine that he is going to write so the result is that at any point in the future he can be subject to a lawsuit.
DB and I both think that software developers/inventors deserve IP protection we differ (apparently quite strongly) on the appropriate means. I think that the growth of patents is making a very difficult environment for people to invest in new software.
On a practical matter, a developer gets a copyright for free, simply by creating a work. A patent requires legal time and the payment of several thousand dollars. This can be a burden on a start up.
In either case, copyright or patent, you do need a lawyer to enforce your rights if a simple demand fails.
The reason for the rewiring argument is that DB is trying to make the case that software is a device.
In theory patents by definition are non-obvious. So you're problem is not so much the nature of the invention but rather that people are patenting cases of this type of invention (software) that are obvious?
In general, you should be able to write software using your own creativity without seriously risking violating someone's patent. You can easily do that without violating someone's copyright -- just don't copy their code!
It sounds like the problem has nothing to do with software and everything to do with obviousness. I have seen these things on engineer msg boards showing supposed patents on things like guard traces to eliminate crosstalk or caps between a split in a power plane to handle high-speed return currents: practices that have been around for a decades. If those msgs are true, then the same argument applies to hardware patents.
I think that one of the things that makes software different than hardware is the sheer number of algorithms that a software engineer makes in the course of their daily work. While there has been an effort since the '70s to develop 'component' software that had never really been successful. Each situation seems to be more effectively solved by writing your own algorithm -- although there are plenty of libraries that can be licensed or are in the public domain that you can use for larger issues.
In the Von Neuman architecture that virtually all computers use today programs are stored with data and are simply information. It used to be common in the 1960's and 1970's for programs to be modified while they are running which can be done because they are data. Because of reentrancy that is not considered good practice any longer.
What really happens is that the hardware reads data into it's instruction logic and based on the information it sees in the data changes internal switches which influence how it processes other data. The program itself is passive.
It is a convention to talk about the program 'doing something' but since it is only information the CPU actually does things.