Patents, Trademarks and Copyright, Urgh!
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.
Comments
"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."
You have some interesting laws in your country, because that statement certainly doesn'y apply in numerous other places. You can't violate their copyright just by looking at their code. You can only violate their copyright by reproducing the copyrighted work, in whole, in part, or even with just enough similarity, in a manner that is not covered by any type of fair use or appropriate license. You either violate their copyright by producing a work of enough similarity, or you don't. It is as simple as that. How you produced the work doesn't matter. Whether or not you read the source doesn't matter. Whether or not you looked at Reflector doesn't matter.
I challenge anyone arguing against viewing the source to also argue against using Reflector, as use of either puts you in just as equal a position to be in violation of a copyright. Which, incidentally, is in no better or worse position to be in violation of a copyright than if you neither used Reflector or viewed the source. Get your arguments aligned or be labeled a hypocrite.
The real problem with looking at the MS source isn't as much the fear of copyright violation (as long as you don't copy/paste) as it's the fear of being tainted by a patented method. If you've never seen the source, you can at least claim to have independently implemented the same process. This doesn't entirely patent-proof yourself, but it gives you a leg to stand on.
You seem to be confusing the case of a patent vs. copyright.
If you didn't have access to the source (reflector may count as having access to the source, not sure), you are NOT violating copyright even if you produce 1:1 result with what they have, right down to the comments and spacing.
What you are talking about are patents, where you can be violating that regardless of how you got there.
Different semantics, one is having access to the code, the second is reverse engineering it.
As I said, this is a legal distinction, but an important one.
Jeremy: so, MS is stupid because they force their employees not to look at any OSS code which is GPL-ed ? If it's not such a big deal to look at code, why bother?
The beauty of Microsoft's move is that is doesn't matter if you read the source code or not:
http://dotmad.blogspot.com/2007/10/tainted-if-you-do-tainted-if-you-dont.html
I have to challenge the contention that using Reflector is reverse engineering. I think it is translation, from IL to (Pick your .NET lang here). You do have the actual source code the CLR will compile to byte-code. I don't see the fact that you are using a mnemonic aid to convert from one language construct to another mitigating your knowledge of how the source in question works.
On the other hand, if you were to take the published specs, and poke known values at the functions and record the responses to validate the specs / document spec violations & undocumented functions, and then build your own function to reproduce the same effects, then that would be reverse engineering. (Gee, sound familiar for the Mono team?)
Possibly working from the byte code backward as well.
Mark,
At the same time, working from x86 assembler is "having the code", no?
I doesn't work that way.
Comment preview