I never understood why developers are supposed not to know about such things. This is what we do for a living, we have better known what ground we tread upon. Here is the short guide from a developer point of view:
- Patent - I thought of it, was the first to get to the patent office, therefor, I get a monopoly on the idea, if you try to use this, even if you never heard of me and mine, you can't use it unless I agree to it (and you pay me many gobs of money, of course).
The critical part is that you are violating a patent even if you had created it all on your own. A patent is a method to do something, if you use the same method, regardless how you got to it, you are violating it.
- Software Patent - a get-rich-quick scheme that should die already, the ability to patent idiotic stuff and then sue other people.
Amazon OneClick patent is such, or the recent IBM patent on the checkbox.
I have no problem with algorithms being patented, that usually represent the result of a real research, but software should apply to the same rules of math, and be unpatentable by default.
- Trademarks - A phrase, word, picture, etc that have been reserved for the use of a certain party in a specific industry. For instance, if I wanted to create a computer hardware company, I probably shouldn't choose the image on the right as my logo, because Apple may object, reasoning that this would be violating their trademark.
Basically, a trademark is supposed to protect a party from someone else that is trying to use recognizable things to fool customers to think that they are the original party.
Trademarks have to be in the same field, so having that logo for a fruit store is perfectly fine.
Trademarks needs to be depended. If I used this logo for some time with Apple knowingly ignoring it, then I can say that they have let the trademark expire, and I am allowed to use it.
- Copyright - copyright means that as the creator of something, I am the one that is in charge of deciding what to do with it. For instance, this blog post is copyrighted, and if someone was to reprint it without permission, it is likely that I wouldn't like it, and ask them to take it down.
Copyright is the most common way to control what happens with software, and indeed, this is what most software license deal with, allowing copies of the software to be distributed.
Here you also get into the part of copyright violations, which may simply copying without rights :-) or more complex, creating a derivative work without a license.
For instance, de-compiling a commercial control using Reflector, renaming the namespace and then offering it to sale under your own name is such a case.
- Other stuff - there are all sort of other things out there that I didn't take the effort to name, a specific design may be challenged, Apple's suing over the Mac design comes to mind, and even on the trash can in the corner, or Microsoft claims that they own the Ribbon UI design, and that you need a license for that.
Now, after all of that, where am I getting at?
There isn't much that you can do about patents, except ignore them. If you actively go looking for them, in some places (US), you are then considered liable for more damages.
Trademarks, that is a place where a bit of research. For instance, creating a company called Rhino Software is probably not a good idea, because it already exists. This is not something that should really concern developers, although ISVs should probably pay attention there.
Copyright, now this is the more interesting part. Here is where we get into "tainted eye balls", and this is especially relevant as a result of MS making the source for the BCL available. Ignoring such blatant theft example as above, there is the problem of having to solve a problem, going into such a codebase, seeing how they solved it, and solving your own problem in a similar fashion. Even assuming that you did not copy & paste the code from there, it can still be said that you are in violation of their copyright because you have residual knowledge from looking at the code.
This is why I agree with Frans Bouma's statements about the license, that this is not something that you want to look at. Until such time as it comes out with a clause that says that you are not tainted by reading the code, you really don't want to touch this.
But wait, I hear you say, you don't say that about Reflector, and that is the same thing, no?
As a matter of fact, no, it is not the same thing at all. Reflector is Reverse Engineering the code to source form, that is not at all like looking at the source code itself. Yes, for many practical purposes, they are one and the same, but they are not the same from a legal point of view.
Reverse Engineering is allowed (in some places, the EU for one, and IL as well, I think. Probably not in the US, but I have no clue) and it means that you can are not tainted from that knowledge. Looking at the actual source code is not reverse engineering, and it removes the reverse engineering defense that you may be able to use.
To put it in other terms, the Samba project works by reverse engineering windows' protocols, that is allowed, but if MS makes available the networking protocol code, and one of Samba's team members look at it, then commit a change, that is a violation of the copyright.
In fact, I know that Mono has stricter policy, of not using the BCL reflectored code, or knowledge gained from Reflectoring over the BCL, but writing from scratch. That is probably wise, cautious, move from them.
Anyway, that is my interpretation of the whole deal, and the bare minimum that you need to know about his matters.