If you have ever glanced at your dependencies, seen a wall of MIT and BSD and ISC, and thought "great, those are the easy ones, nothing to do here," this post is for you. Permissive licenses really are the easy ones. But "easy" is not the same as "nothing to do," and the gap between those two is where a lot of otherwise-careful projects quietly fall short.
What "permissive" actually means
A permissive license lets you do almost anything with the code: use it, change it, ship it inside a closed-source product, sell it. It does not force your own code to become open source. That last part is the important contrast with copyleft licenses (GPL, AGPL, and friends), which can require you to release your source under the same terms. Copyleft is the category that gets all the attention because it can change how you are allowed to ship your product.
So people learn a rough rule: "copyleft is the scary one, permissive is fine." The first half is fair. The second half is where the trouble starts.
The catch: attribution
Almost every permissive license asks for one thing in return for all that freedom: attribution. You get to use the code however you like, as long as you carry the original copyright notice and the license text along to wherever you distribute it.
That means your shipped product (the installer, the app bundle, the container image, the "about" screen, a bundled notices file, whatever form your distribution takes) is supposed to reproduce the license text and copyright for each permissive dependency inside it. Not the whole internet's worth. Just the ones you actually ship.
Nothing breaks when you skip attribution. The build runs, the tests pass. The obligation is invisible until someone goes looking.
Not all permissive licenses are the same
Here is the part most "permissive is fine" advice skips: permissive is a family, not a single rule. The licenses in that family ask for slightly different things. It helps to think in four buckets.
A · Zero attribution
Public domain style
0BSD, CC0, Unlicense, WTFPL, and BSL-1.0 explicitly remove the conditions. Use the code and keep nothing. There is genuinely nothing to track.
Required: nothingB · Text + copyright
The everyday case
MIT, ISC, Zlib, BSD-2-Clause, BSD-3-Clause, and most academic and corporate permissive licenses. Keep the copyright notice and license text in what you distribute.
Required: notice + license textC · Text + NOTICE
Apache style
Apache-2.0 and relatives add a step: if the package ships a NOTICE file, its contents travel with your distribution too. Apache also asks you to state, in files you changed, that you changed them.
Required: license + NOTICED · Special wording
Non-copyleft, but unusual
A few licenses (CECILL-B, OLDAP, W3C, WordNet) behave like bucket B but carry an extra disclaimer or attribution clause. Treat as text-plus-copyright, and read the specific wording.
Required: as B, plus a noteNone of these are hard. But they are different, and "I have a LICENSE file somewhere" does not automatically satisfy all four.
Modifying code can add requirements
There is a second wrinkle that catches people: changing a dependency can add obligations that simply using it did not. The clearest example is Apache-2.0's "state your changes" clause. If you fork a file and edit it, you are expected to mark that the file was changed.
When you modify someone else's open‑source component, you reach a point where assumptions are no longer safe. Even permissive licenses have attribution rules, and a modified copy becomes partly your responsibility. Any change, even a small one, is a moment to stop and check.
Why this matters for everyone
Put the two ideas together and the picture is clear. You do not get to only think about the scary copyleft dependencies. You have to consider all of your open-source, including the long, boring tail of MIT and BSD packages, because that long tail is exactly where attribution obligations accumulate. A typical project has a handful of copyleft concerns at most and hundreds of permissive ones. The risk per package is small. The risk across all of them, ignored consistently, is not. The good news: the work is mostly bookkeeping, and bookkeeping is the kind of thing a tool should do for you.
How OSSScan helps you check this
Here is the important part: OSSScan does not try to decide whether your project is compliant. Whether your build actually reproduces every notice depends on what you ship and in what format, and any tool that guesses at that from the outside gets it wrong a lot. So OSSScan splits the work along the line where each side is reliable.
OSSScan states the deterministic facts. It sorts every permissive dependency into its category (A, B, C, or D) and knows what each category requires. The judgment part, whether your project actually carries these notices, it hands to your AI agent, which can read your real files and reason about them.
When you run Bulk License Review (the export that prepares work for an agent), tick Also check permissive-license attribution. It is off by default, and worth turning on when you set a baseline. OSSScan then writes the agent a task: here is every permissive package and what its category requires, verify each is attributed in this project and write an Attribution Report. From the command line the same option is --check-attribution.
Illustrative. Your agent writes this report after reading the project's real files; OSSScan supplies the package list and categories.
The division stays honest. OSSScan never claims your notices are complete, because it cannot know that reliably. The agent does the checking against your actual files, and it is told never to invent license text and to flag anything it cannot resolve. And because OSSScan's part is just the license list, it works the same whether you scanned a project folder or imported an SBOM.
Bottom line
Permissive licenses are the easy ones, and you should still care about them, because "easy" means a small amount of bookkeeping, not nothing. Keep the notices for the licenses that ask for it, respect the extra step for Apache-style and modified code, and do it across all your dependencies rather than just the intimidating ones. Let your tooling turn that from a nagging unknown into a checked-off list.
← Back to the OSSScan Blog