This sounds perfect for software, except our patent system does nothing to save software for society. All it does is capture some vague descriptions, some diagrams and flow charts, and some pictures.
Imagine a software patent. Let’s take this one from Samsung, approved in 2012. This is a patent for making a bookmark. The patent includes a half-dozen diagrams, and a mock-up of a screen UI.
There is no source code included in this patent. It’s just diagrams and a drawing of a UI. This is preserving nothing for the future of society. It’s the difference between shooting a bullet and throwing it.
We could fix this in one of two ways, legally. One, we could start adding source code to patent applications. Or two, we could stop this silliness and just set up some sort of subset of copyright rules for software.
Copyright is about protecting the implementation. Patents are about protecting the functionality. A novel is an implementation of a plot. You can copyright the novel but not the plot. You can copyright a movie, but you can’t copyright a single line of dialog, such as “Yes” or “Get to the chopper!”
So it should be with software. You should be able to copyright the combined works that you are building into a piece of software. If you suspect someone has literally stolen your code, compiled it and is selling it, the courts shouldn’t have to do much more than diff the two sources in question.
Instead of debating whether one can patent this or that, we should be arguing about where, exactly, the line is between code plagiarism and commonly used things such as headers. That’s a significant grey area that can be thoroughly explored by people in the legal profession, and can likely be handled by an arbitrary percentage number. A perfect place for the legal folks to help us out.
For Eli Whitney, the cotton gin was something physical a competitor could have purchased, taken apart and rebuilt themselves. Such an endeavor would take time, but could be done, had been done, and is still done to this day.
For software, however, even having the binary to copy isn’t a big help when you’re expected to re-implement an entire system. While a year spent copying a cotton gin would yield a competing product in a decent time frame, a year spent copying a piece of software doesn’t really guarantee anything. It all comes down to implementation.