Open Source Ideas
Following on from the question I asked in my previous entry, today I am wondering where we draw the line between learning from others and stealing from others. To illustrate, I will give you some examples.
Imagine that I produce something that does the same job as another open source project, but has totally different code and was developed without any knowledge of the other project at all. Is that wrong? I would assume that here everyone would say no.
But what if I take an idea from that open source project and use it in mine? Is that wrong? What if I credit them? If I credit them for the idea, should I then obey the license that they released their code under?
You may say that only the code is covered by the license and that the ideas are free, but it is often difficult to decide where that is. It is clearly wrong to take code and pass it off as your own, and at the other end of the spectrum, people say that software patents concerning ideas are bad because they stifle innovation. But in open source, where do you draw the line between learning from others and taking from others?
What if what you learn is in the source code? I taught myself BBC BASIC purely by looking at other people's source code. I didn't copy and paste anything (partly because RISC OS didn't have copy and paste back then), but whenever I use the PRINT statement, should I credit the program where I first learnt about it? No. But what about if I learn how to use an obscure Javascript command by reading code rather than a tutorial? Should I credit the author of that code?
Again, I would assume that most people would say no, but where should the credit stop? Am I producing a derivative work, and as such should I obey the license they released their code under? I would say "do what feels right" - if I learn something obvious, that's free, if I learn something unique and special, give credit. And if I take something they wrote, abide by their license. But is that good enough?
I guess what I'm really asking is this; is it wrong to look at source code to see how something has been done, and to then go off and reproduce the effect without directly copying? And is it wrong to look at a running program and take ideas away from that without credit? Where do we draw the line between code-copying license violation, and building on the ideas of others?
Comments
It depends. I've used code freely available on the internet which has no licence in a closed-source application. I don't particularly feel a need to credit the author of that code. If you write code, and then make it freely available without any sort of licence, you're basically making it public domain. The code isn't owned by anyone, and anyone can use it for anything they like.
On the other hand, if the code is licensed, then you have to ask what exactly it is that is licensed. The GPL says:
The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
I think it's important to clarify what a program is. On one level, it's a general idea. One a completely different level, it's the actual code. To me, the bit that is licensed is something in the middle - you can't licence the whole task that a program performs (e.g. Enable the editing of a text document) just as you can't licence the exact code (e.g. Response.Write("Hi There")). What is licensed is the 'way of doing something'. If I wrote a function which performed a task and released that under licence, then it's the method, or order of instructions that is licensed. This could be ported into any other language and would still be under licence, because it's still performing the task in the same way. The actual code describes what this method is, so copying all of the code is breaching the licence, but there's no reason why you can't take a line from the code.
This is where the definition needs to be. You can't licence a function that is already performed by a particular language. For example, I can't licence the function which outputs a string. If I release some code under licence, that's got to be a way of doing something which hasn't been done before in the way that I'm doing it. Anyone who then performs that task in the same way, even if they use different code, could be seen as breaching the licence. The idea is that you wrote your new code whilst looking at the old code, and therefore stealing its idea. Is this workable? I'm not sure.
All of this depends on the probability of two people writing some code which perform a function in exactly the same way being tiny. Which is tricky.
All of this reminds me about what pharmaceutical companies do. They cant copyright or patent a drug simply because thats just a chemical, and you cant copyright something that has a chance of existing naturally, because then all sorts of odd things happen. What they can (and do) copyright is the method by which they made the drug. Any company can come along and make that same drug, but they have to make it in a different way. Code is a little bit like this. You can make the same program, but youve got to do it a different way. If youre working independently, the chances are that you will do it differently.
Hummm
Leave a comment
- Add a comment - it's quick, easy and anonymous