 In the talk before this we had Lucas and he was talking or he spent a bit of his time doing his talk talking about reciprocal and non-reciprocal licenses and One thing that you have to note When you have these difference in types of free software licenses is that These differences they give rise to whether or not the licenses are compatible or incompatible with each other So what exactly is license incompatibility? So it's basically a term that we use to refer to whether various pieces of Software with different licensing terms Can fit together within a single project and can be distributed together So what we're going to look at in the next 15 minutes or so we are going to first define license compatibility We're then going to look at examples of licenses that are compatible with each other and that are not And then we'll briefly talk about why license incompatibility is an issue and how you can sidestep that issue So before I explain what license incompatibility is we're going to use an analogy Full disclaimer. I take no credit for this analogy. This was developed by Heather Meeker Who's a lawyer from the US working with software licensing and other legal issues related to software? so yeah basically developing software is kind of like organizing an Extremely awkward dinner party for your family. So imagine you are put in charge of cooking a dinner party for your family Your father tells you Yeah, I'm on an all-meat. No-carb diet. I will only eat steak And I will only eat anything that has legs Yeah, and then your sister calls you and she says I am a vegan now. I will only eat organic vegetables Nothing else. I feel very strongly about it meat is murder and then you have your nephew who? Yeah, he is a very picky eater. He will only eat spaghetti He will not eat anything else anything else is icky if it's not carby if it's not spaghetti He won't eat it. He'll throw food at you So yeah cooking a dinner party for all these people is a nightmare already. It's an extremely annoying task Yeah, but also imagine if your father on his all-meat. No-carb diet He tells you he refuses to join in the dinner if you also serve cops to anybody else at the dinner table Your sister says if there's any meat or animal products at the dinner table She's not going to attend and your nephew is like yeah, I'm gonna throw food if there's anything other than spaghetti on the table So what do you do then? How are you gonna resolve this situation if none of these people are willing to compromise with each other if they all have? They're very strong principles about what they want to eat and what they don't want other people at the dinner table to eat then yeah, it's a shame unfortunately you have a situation where someone would have to be uninvited from the party and Yeah, as much as it pains you it might be your family, but you know if you remove one or more people From this dinner party. It will definitely make your ability to cook and to host the party for everybody much easier So this situation kind of serves as an analogy for Excuse me as an analogy for software licenses as well. So like people software licenses they each that their own set of rules and when these rules conflict then yeah, like peaceful coexistence at the dinner table coexistence of these licenses within the same project will become impossible and often, you know License incompatibility often happens because software licenses not only will tell you what you can do with the software In the case of reciprocal licenses, sometimes they also tell you what you cannot do with the software They will explicitly state what you cannot do and will deny you the authority Or the authorization to use the software or to use the code so in a situation where To licenses conflict with one another we we and and these conflicts are non-negotiable We would say they are incompatible licenses in other words, you know if it is impossible to Combine the code between these two licenses together while still Uh complying with all the obligations present in each of the code Yeah, it is it is therefore, you know when when you are reusing code into your project It's therefore important to keep in mind that You need to ensure that any third-party code that you incorporate into your license is compatible Into your project is compatible with the license that you've chosen for your project Um, yeah, so let's look at a few examples of compatible free software license Free software licenses, and I think a good starting point would be to look at Two very popular licenses we can look at the MIT and the GPL license So as Lucas may have mentioned in his previous talk, you know the MIT license is one of the most permissive Free software licenses out there basically under its terms you can pretty much do anything with the code one problem when you say you can do anything is that You know you can turn derivative works of your code into proprietary software so someone can Use your software and turn the derivative work into proprietary software when you say you can do anything with the software You also have to be prepared to accept that any derivative work of your software Something bad like being turned into proprietary software can be done with it, right? Yeah, that's an unfortunate side effect of Non-reciprocal licenses when you allow the people the freedom to do anything that means they have the freedom to do Things that you might not approve of So on the other flip side of the coin We have our copy left licenses and the most well-known being the GPL It requires that all derivative works Be licensed under the same terms in other words like as Lucas said GPL in GPL out. So What you have now is a copy left license and a reciprocal license Yeah, so if we took take a look at the terms of the MIT license and the GPL license We can see that there is a bit of a conflict. There's there was also a bit of a trend There is a certain way that Derivative works can and cannot flow between these two licenses. So because the MIT license is so permissive We will have no problems taking something that was licensed under the MIT license working with it updating it improving it and then releasing it as Releasing the derivative work under the GPL license, you know, because it's so permissive You can do whatever you want you can license it under the GPL So what's happening here is that the yeah the MIT license allows derivatives to be licensed under the GPL The GPL requires derivatives to be licensed under the GPL. There is no conflict Yeah, it's like if your brother has no dietary restrictions He says I'll eat whatever you put in front of me and your vegan sister says Please only vegetables No animal products. So in this case, yeah, there's no conflict, you know You just cook vegetables and everybody at the dinner table is happy Yeah, in a similar fashion, you know MIT license code can be reused or incorporated into a GPL project. Everybody's happy It's very important to note. However, that you know, the reverse Movement is not true You cannot move from GPL to the MIT license in the derivative work because the MIT license does not Support the requirements of the GPL. So if we turn again to our trusty dinner analogy Your brother has no dietary restrictions, you know, he he he says he'll eat anything and He invites your vegan sister who will only eat vegetables and non animal products So while your brother doesn't mind eating with your sister your sister Cannot attend the dinner because your brother says oh, I also want to cook with meat or I also want to cook with something So she cannot be invited into the project without their To the dinner party without There being some form of conflict. So while the MIT license doesn't technically mind The GPL the GPL work cannot move into an MIT license derivative work Yeah Let's take a look at another example, you know, we have the original four clause BSD license which is Considered to be incompatible with the GPL license. So this is because The BSD license has an advertising clause Requiring that all advertising materials mentioning features or use of the license software must display an acknowledgment The acknowledgement basically reads, you know, something like All advertising materials mentioning features or use of the software must display the following Acknowledgement this product includes software developed by the organization. So the GPL Does not allow additional restrictions to be placed Beyond those that the GPL already imposes the original BSD license is Considered to be incompatible with the GPL basically because this requirement to display The advertising clause is considered an additional restriction That's not included in the GPL and therefore not allowed under the GPL So we can say that the BSD license the original four clause BSD license is incompatible with the GPL So why is license compatibility an issue? Yeah, the problem with having an incompatible license in your work Is that you won't technically be allowed to distribute the software? I mean, it's fine if you combine all of this Into your own personal work and you never upload it. You never do anything with it. Yeah, do what you want But you will never be able to distribute the software Not legally at least because you are not able to comply with all the obligations Required of you under all these licenses to distribute the software so what you have on your hands is a piece of software with conflicting license Terms and terms that no user can technically under the law Abide by in their entirety So in this situation, you know what you can do to resolve the situation You might have to re-license your software and if it's not an option You might have to remove chunks of code that you reuse with the conflicting license terms and then Work to patch things up from scratch So and yeah, this is something that you really want to avoid For several reasons. I mean real license re-licensing a project is a really Teeth is processed for one, you know, you would have to contact all parties involved in Who have contributed to the project? And they all have to unanimously agree on an alternative licensing approach And this can be very difficult if you didn't have in place like a contribution Agreement where contributing parties agree to like for example hand over ownership of their contributions of the code for example and A more practical difficulty that you might face is that you just lose contact with someone You can't find a contributor or you can't get in contact with them And you can't get them just to consent to re-license the software So one way that you can sidestep this issue is to Ensure that you license your work in a way that's compatible with the GPL This can help avoid a lot of potential incompatibility issues the main reason For this is that you know a lot of free software developers these days prefer the GPL for Yeah it I Think a lot of people think that you know the GPL provides a better quit pro quo for developers establishes Collaboration between people and companies and there's a feeling that it protects your work better and that encourages and Overall increases the amount of free software that's out there. It safeguards the amount of software free software that's out there It's a very popular license So if you license your free software project in a way that's not compatible with the GPL there's a risk that you might fail to receive enough support from developers from other developers to sustain your project and even if you Don't like the GPL yourself many potential co-developers do and in practical terms. This is something valuable to consider in terms of attracting contributions and of course another big advantage is that there is a lot of GPL license code out there For you yourself to take advantage of Yeah, so that's the gist of license compatibility As with all the other topics out there it can get complicated very quickly. This is just a basic rundown And yeah But it's something that you know, you really need to keep in mind when you start reusing third-party code into your project