Most discussions concerning protecting software touches upon this question, one way or the other. Patents and Copyrights are different forms of Intellectual Property, and they protect different aspects of a creation.
Patents protect “concrete” ideas, and are intended to protect inventions – specific implementation or set of implementations of ideas. An example for a patentable invention is a portable music player. Note here that it is not possible to patent the idea of a “portable music player.” What can be patented instead is the specific implementation of the idea, like the walkman, mp3 player, and so on. Of course, that’s a course example. But I guess you get the idea.
On the other hand, copyrights protect specific representation of a creation on a medium (either the arrange of thoughts in the form of text on paper, sounds on a digital medium or in other forms of media, arrangement of images on a tape, and so on). An example of a copyright candidate would be a book or a medium with software code. Note here that if a program is written in Java, and the copyright associated with that specific code will probably not protect another version of the same program written in, say, Python. That is because the representation as can be seen and read by human beings is completely different in these two programming languages.
Therefore, you probably need to protect your software using both forms of protection – the visual or representative aspect of the software should be protected by copyrights and the functional aspects of the software should be protected by patent rights (provided that they are patent eligible).
Visual or representative aspects
Examples of visual or representative aspects of the software that may be protected using copyrights include:
- the software code,
- the user interface that is presented on a screen when the software is executed on a computer,
- the design and architecture documents, and
- the marketing material concerning the software, and so on.
The functional aspects surrounding a software that may be protected using patents include:
- the functionality that is generated by running the code (example, image processor or memory optimizer), and
- the functionality provided by tools used for testing and managing the source code (example, automatic debugger or analyzer),
provided that such functionality is new and satisfies the current patent eligibility requirements for software.