Do I really have to follow software licenses?
This is a follow-up to last week’s question about the need to learn how to code when so much is available online. The simple answer is, yes, software licenses are important and do need to be respected.
I have a 3D printer that I use to print my own designs as well as download many of the free designs from Thingiverse. Even these have licenses and whenever I download one that says commercial use is not allowed, it goes straight to my recycle bin. These are not snippets of code that I’m going to learn from and adapt that knowledge to a larger project. These are complete items that come about as close as you can get to skipping the journey.
This is where the topic comes back to the question last week. If I see an interesting design, look at all the pictures, and then download it just to throw it away, then does it affect my own design? I’d say that anything I design whether it’s a piece of hardware or software is a product of all my knowledge, skills, and experience. There’s no way to avoid coming into contact with things that have conflicting licenses. If all you’re doing is copying a line of code here, learning from another few lines of code there, or even asking somebody to write something for you, then it’ll still take your own skills to put everything together. And you’ll probably find that it takes more work to ask somebody else to do something than if you just learn how to do it yourself. It’s this unique combination that makes something yours. Now, if you’re going to use a software component as-is, then the license will be critical and could affect the rest of your code.
Let’s say you need to add logging to your application. This will help you figure out problems by recording important events to a file so if there’s ever a problem, then you have a trail to follow. If you’re going to build your own logging and either refer to some online code for an example or two or even bring with you direct knowledge of how some other code was designed, then you should be okay. That is as long as the final result doesn’t violate a patent. That’s a whole different story. Assuming you’re okay there though, it’ll take a lot of extra work to put anything together into a logging solution.
But what if you take a different approach? What if you don’t want to put in all that extra work? Or don’t have time? Or decide it’s just not worth it? What if you just want to use some other code as-is in your project. This is where licenses become important.
One of the more sticky points is when a software license demands that any derived works must follow the same license. What is a derived work?
Personally, I consider a derived work to be something that builds on the original code to create something similar but with maybe some extra capabilities. Or maybe it’s faster. Or maybe it’s smaller. Whatever. To me, a derived work is something along the same path as the original work. Take the logging component example. I consider a derived work to be another kind of logging component. It’s better in some way but still does logging.
There are many people though who have a different opinion about this. To them a derived work is anything that uses the original work. So if you’re building a game and add some logging, then even if that logging is a tiny fraction of the overall code and completely unrelated to any kind of game, just the fact that the game uses it is enough to classify the game as a derived work.
Another sticky point sometimes found in open source licenses is a requirement that any project using that open source must also be open source. Let’s say you’re building a new open source logging component and you’re okay with anybody using your logging for any purpose at all. Sounds like a great license that almost any company will be okay with too. And you come across a cool piece of code that would add some little feature to your logging component. Let’s say it would allow your customers to record log messages in different colors. Alright, you could code that yourself. Or you could skip the journey and include this component you just found directly into the logging code. Here’s where you can run into trouble. If that color component says that any derived works must also be open source, then you just eliminated a whole bunch of potential customers. Because the license applies all the way up the chain.