License compatibility depends on the exact licenses, software combination, distribution path, and obligations that must be satisfied together.
Open source license compatibility means that the licenses on different pieces of software can be satisfied together for the way you plan to combine, modify, or distribute them. Two licenses can both be open source and still create a problem when their conditions point in different directions.
The key question is not only "which license is this?" It is "what are we doing with the code?" Running two separate tools on the same computer is different from copying code into one program, linking a library, shipping a plugin, bundling an installer, publishing a container image, or distributing a modified fork.
This guide is educational, not legal advice. If compatibility affects a product, employer policy, customer delivery, patent position, app store submission, embedded device, or redistribution plan, involve qualified counsel.
What license compatibility means
A license grants permissions under conditions. Compatibility asks whether you can follow every applicable condition at the same time when software under multiple licenses is used together.
For example, a permissive license may require notices to remain with redistributed copies. A copyleft license may require a combined or modified work to be distributed under the same license, with source code available. A patent clause, trademark limit, network-use term, or license exception can also change the analysis.
Compatibility is therefore about the whole situation:
- The exact license names and versions.
- Whether the code is copied, linked, bundled, loaded, or merely run separately.
- Whether the software is distributed to others or only used privately.
- Whether source code, binaries, containers, plugins, or modified files are shipped.
- Whether an exception, dual-license choice, or project-specific policy applies.
A label such as permissive, weak copyleft, or strong copyleft helps you ask better questions, but it is not a final answer by itself.
When compatibility matters
Compatibility usually matters when one piece of software becomes part of another distribution. That can happen through direct source copying, static or dynamic linking, plugins, vendored dependencies, firmware, container images, installers, or modified releases.
It usually matters less when programs remain separate. The GNU GPL FAQ distinguishes separate installation from combining programs into a larger work. In ordinary terms, installing two independent command-line tools side by side is not the same as building one product from both codebases.
Distribution is often the trigger that turns a private engineering question into a public obligation. Internal use can still have policy or procurement requirements, but many license conditions become most important when binaries, source archives, devices, hosted service modifications, or customer deliverables leave your organization.
Common compatibility scenarios
| Situation | Why compatibility matters | What to check |
|---|---|---|
| Two separate applications installed together | The programs may remain independent rather than becoming one work | Whether they are merely aggregated, whether an installer imposes extra terms, and whether notices remain intact |
| Copying source from one project into another | The copied code brings its license conditions into the destination | Exact license/version, copyright notices, source-sharing duties, and whether the destination license can satisfy them |
| Linking a library | Some licenses treat linked modules as part of a combined work | Static versus dynamic linking, GPL/LGPL terms, exceptions, and whether the whole combination can be distributed |
| Plugin or extension systems | A plugin may be independent or tightly coupled depending on how it communicates | The host license, plugin API design, shared data structures, distribution model, and project guidance |
| Bundled installer or container image | Multiple components ship together to recipients | Notices, source offers, license texts, package metadata, and whether components are merely aggregated or combined |
| Modified fork | Changes may trigger change notices, source availability, or same-license duties | Modified-file notices, license text, source publication, trademark/name use, and dependency licenses |
| Dual-licensed project | The user may have a choice of license paths | Whether the license expression is an OR choice, whether all files share the same options, and which path fits the distribution |
This table is a triage tool, not a legal determination. The controlling evidence is the actual license text and project files for the version you are using.
Permissive licenses are usually easier, not automatic
Permissive licenses such as MIT, BSD-style licenses, ISC, and Apache 2.0 usually allow broad reuse, modification, and redistribution with conditions such as preserving copyright notices and license text. That flexibility often makes them easier to combine with other software.
Easier does not mean condition-free. A binary package, source archive, container, or installer still needs the required notices and license texts. A project may also have separate trademark rules, contribution terms, or documentation licenses.
Apache 2.0 adds explicit patent and notice structure compared with very short permissive licenses. That can be useful, but it also creates compatibility details. Apache Software Foundation guidance and GNU guidance both treat Apache 2.0 as compatible with GPLv3 in the relevant direction, while noting GPLv2-only incompatibility.
For the narrower comparison between two common permissive choices, see MIT and Apache 2.0 licenses compared.
Copyleft changes the combination question
Copyleft licenses are designed to preserve software freedoms downstream. That can mean that redistributed modified versions, linked combinations, or network-service modifications must remain under compatible terms and include source availability.
Strong copyleft licenses such as the GNU GPL make compatibility especially important when code is combined into one larger program. The FSF describes GPL compatibility as the ability to combine code under another license with GPL-covered code and distribute the larger program under the GPL terms.
Weak copyleft licenses can be narrower. They may focus on modifications to specific files or libraries rather than every program that interacts with them. The Mozilla Public License 2.0 FAQ describes MPL as file-level copyleft intended to allow combination with code under other licenses with fewer restrictions than stronger copyleft models.
The practical lesson is not "avoid copyleft." It is "understand the trigger." Ask whether you are modifying covered files, linking a covered library, copying code, distributing a combined binary, or merely using a separate tool.
FOSShub's permissive and copyleft comparison explains the broader license-family tradeoff.
GPL compatibility in plain language
When people ask whether a license is GPL-compatible, they usually mean whether code under that license can be combined with GPL-covered code and distributed as part of a GPL-covered work.
That does not always work both ways. Apache 2.0 is a useful example. ASF guidance says Apache 2.0 software can be included in GPLv3 projects because GPLv3 can accept Apache 2.0 terms, but GPLv3 software cannot be included in Apache projects under ASF's own licensing approach. ASF and FSF guidance also note that Apache 2.0 is not compatible with GPLv2-only.
Version wording matters. GPL-2.0-only is not the same as GPL-2.0-or-later. A project that allows "or later" may give a path to GPLv3 compatibility that a version-only license does not.
Do not decide GPL compatibility from a family label alone. Check the exact SPDX identifier, license file, exception text, linking model, and distribution path.
MPL, EPL, and other intermediate cases
Some licenses sit between simple permissive reuse and broad strong copyleft. They can be useful, but they need careful reading.
MPL 2.0 is commonly described as file-level copyleft. Mozilla's FAQ says it is designed to encourage sharing modifications to MPL-covered code while allowing combination with code under other licenses with minimal restrictions. That makes file boundaries and modification scope important.
Eclipse Public License guidance shows why intermediate licenses still need caution. The Eclipse EPL 1.0 FAQ warns that EPL 1.0 and GPL are not compatible in combinations that create derivative or GPL-based works, including same-source-module combinations.
These examples are not a universal matrix. They show why compatibility depends on exact versions, project policies, and the way code is connected.
Dual licensing, exceptions, and SPDX expressions
Dual licensing can give users a choice. If a project is offered under MIT OR GPL-3.0-only, a recipient may be able to choose the path that fits their use. If the expression is MIT AND GPL-3.0-only, both licenses apply together. Those are very different situations.
SPDX license expressions help record that difference. SPDX defines operators such as AND, OR, WITH, and the + suffix for version-or-later meanings. Examples include:
MIT AND Apache-2.0when both licenses apply.GPL-2.0-only OR MITwhen the recipient can choose either path.GPL-2.0-or-later WITH Classpath-exception-2.0when an exception modifies the normal license terms.
Use expressions as records, not magic. An SPDX identifier helps tools and humans talk consistently, but it does not replace the actual license text, project files, or legal review for unusual combinations.
What compatibility checkers can and cannot prove
Automated tools can help find declared licenses, flag known conflicts, collect notices, and build an inventory. They are useful for reducing missed dependencies and standardizing review.
They cannot prove every compatibility question. A tool may not know whether code is linked, copied, dynamically loaded, only aggregated, modified, or covered by an exception. It may also miss conflicting project files, generated code, vendored snippets, documentation licenses, trademark terms, or private distribution facts.
Treat tools as evidence collectors. The decision still needs a human review of the exact software shape and the official license sources.
Where compatibility evidence should come from
Use sources tied to the software version you plan to use. A repository license file, release archive, package metadata file, project documentation page, or steward-published license text is stronger than a forum answer or a copied summary.
For standard license names, OSI and SPDX can help confirm identifiers and recognized license texts. For GPL-family questions, GNU guidance explains how the FSF frames combinations, linking, aggregates, and GPL-compatible licenses. For stewarded licenses such as Apache 2.0, MPL 2.0, or EPL, read the steward's own FAQ or policy alongside the license text.
Keep the evidence with the dependency record. A project can relicense future releases, use different licenses for plugins or documentation, or publish a package whose metadata does not match an older repository page.
Checklist before combining licensed code
Use this checklist before copying, linking, bundling, or redistributing open-source components:
- Identify the exact license and version for every component.
- Record SPDX identifiers where they exist.
- Confirm whether the project uses
only,or-later,AND,OR, orWITHterms. - Check the official license file, release archive, package metadata, and project documentation.
- Map how the components interact: separate process, library, plugin, copied source, container, installer, or modified fork.
- Decide whether distribution happens, and what recipients receive.
- Preserve copyright notices, license texts, and attribution files.
- Check source-availability, modified-file, patent, trademark, and network-use terms.
- Look for license exceptions, dual-license choices, contributor terms, and project policies.
- Escalate when the result affects a product, customer, device, app store, patent issue, or workplace policy.
For package workflows, connect license checks to dependency management, software packaging, and source versus binary release decisions.
Bottom line for compatibility
License compatibility is a practical review question, not a slogan. Start with the exact license identifiers, then look at how the software is combined and whether it is distributed.
Permissive licenses often combine more easily, but they still require notices and may include patent or trademark boundaries. Copyleft licenses can be a good fit when preserving downstream freedom is the goal, but they make the shape of the combined work more important. Dual licensing, exceptions, and SPDX expressions can open paths that a simple license name would miss.
When the stakes are low, a careful checklist may be enough to avoid obvious mistakes. When the software ships to users, customers, devices, or regulated environments, treat compatibility as a real review step and get qualified help.