The short version
- The GPL family triggers on distribution — "conveying" a copy. GPLv3 states that mere interaction with a user over a network, with no transfer of a copy, is not conveying, which is why hosted software rarely triggers GPL disclosure.
- AGPL section 13 closes that gap, but the trigger is a modified version offered over a network. Serving unmodified AGPL software does not by itself require you to publish source.
- Permissive is not obligation-free. Apache 2.0 requires the licence text, retained notices, any NOTICE file, and a statement of significant changes — and it terminates your patent licence if you sue over the code.
- LGPL is a relinking rule. Dynamic linking keeps your application closed; static linking obliges you to supply object files so a user can relink against their own build of the library.
Every obligation hangs off one word
Read any of the GPL family and the obligations attach to conveying — transferring a copy to someone else. GPLv3 says so explicitly: mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. Internal use inside one organisation is not distribution either. The Free Software Foundation's own FAQ is unambiguous that an organisation may develop a modified version and install it through its own facilities without any obligation to release it.
So the compliance question is not "do we use GPL code". It is "does a copy leave the building". For most engineering teams the honest answer varies by product line, and the boundary runs somewhere unexpected.
| How the product reaches the user | Is a copy transferred? | What follows |
|---|---|---|
| Hosted service, users hit an API or a web app | No | GPL and LGPL obligations are not triggered by the hosting itself |
| Mobile app in a store | Yes | Full distribution. Notices ship with the binary |
| Desktop or CLI binary, installer, package | Yes | Full distribution |
| On-premise deployment or appliance at a customer site | Yes | Full distribution, including firmware |
| Container image handed to a customer to run | Yes | Distribution of everything in the image, not only your layer |
| Browser JavaScript served to the user's device | Generally treated as yes | The bundle is a copy, which is why front-end dependencies need the same review |
How far each licence family reaches
Keep the notice
Notices, plus say what you changed
Publish the modified files or library
Publish the whole combined work
Permissive still has obligations, and they are the ones most often missed
MIT, BSD and ISC ask for very little: keep the copyright notice and the licence text with any copy you distribute. That is easy to satisfy and easy to forget entirely, which is why so many mobile apps have no third-party notices screen at all.
Apache 2.0 asks for more, and the extra items are specific. When you redistribute, you must include a copy of the licence, retain the copyright, patent, trademark and attribution notices from the source, state prominently that you changed the files you changed, and — where the original ships a NOTICE file — reproduce its attribution text in your distribution, in the source, the documentation, or a display the software itself produces. You do not have to release your modifications under Apache 2.0.
Weak copyleft: the boundary is the file, or the library
MPL 2.0 draws the line at the file. Covered software means the files carrying the licence notice, together with modifications — which the licence defines as any file resulting from an addition to, deletion from or modification of covered software, or any new file containing covered software. You may create and distribute a larger work under terms of your choice, provided you keep complying with MPL for the covered files. Proprietary code in separate files stays proprietary. Edits inside an MPL file do not.
LGPL draws the line at the library, and the mechanism is relinking. The user must be able to substitute their own build of the library and still run your application.
- Dynamic linking is the clean path. The library loads at runtime as a separate shared object, a user can replace it, and your application source stays closed. You still owe the library's licence text, the library's complete source or a written offer for it, and a prominent notice that you are using it — hiding the fact is not permitted.
- Static linking is where teams get caught. Compile the library into your binary and the user cannot swap it, so you must supply your application in object form — the object files — so they can relink against their own build. Most proprietary vendors will not do that, which makes static linking of LGPL code an accidental decision with a large consequence.
- LGPLv3 adds installation information. The user must be able not only to relink but to install and run the relinked binary on the device. This is the anti-tivoisation requirement, and it is what makes LGPLv3 difficult in locked-down consumer hardware.
Strong copyleft: the boundary is the whole program
GPL requires that when you convey a work based on the covered program, the recipient gets the corresponding source of the whole work under the GPL. The compliance question becomes where your program ends and the GPL program begins, and that is the part with no clean answer.
The Free Software Foundation has a position on where that boundary sits, and it turns on how the two pieces of code actually talk to each other.
Where your program ends and the GPL program begins
How does your code reach the GPL component?
Inside the same process
Sharing an address space, passing complex data structures, calling internal functions. The result is treated as one work, and the corresponding source of the whole of it is owed.
At arm's length
A separate process reached through pipes, sockets or command-line invocation, behind a documented interface. Treated as two programs rather than one.
AGPL and the network trigger
AGPL v3 is GPLv3 plus section 13. Where you modify the program and let users interact with it remotely over a network, you must prominently offer those users an opportunity to receive the corresponding source of your version, from a network server, at no charge. It exists precisely because hosted software escaped the conveying trigger.
The condition worth reading carefully is that it applies to your modified version. Running an unmodified AGPL program as part of a hosted service — which is most SaaS use of AGPL databases and infrastructure components — does not by itself trigger the source obligation, because there is no modified version to publish. That is a narrower rule than the reputation suggests.
Software license agreement
Full text, free to read and copy — grant and restrictions, third-party components, warranties and disclaimers, and the open source acknowledgement clause commercial software needs when it ships with dependencies.
Where this actually bites
- Acquisition and funding diligence. A scanner over the repository is now standard, and findings land as an indemnity, an escrow holdback or a remediation condition before closing. This is the single most common way an open source problem becomes a financial one.
- Enterprise customer questionnaires. Large buyers ask for a component list and licence attestations, and increasingly for a software bill of materials. A team that cannot produce one in a week has a sales problem, not just a compliance problem.
- Shipping a mobile app. The store submission is distribution. Every permissive dependency in that bundle needs its notice, and a copyleft dependency needs an answer before submission, not after.
- On-premise and appliance deals. The moment a hosted product is also sold to run inside a customer's network, the GPL analysis that never applied suddenly does — and it applies to the whole shipped image.
- Publishing your own code. Choosing the licence for your own repositories is the mirror of all this, and the choice determines who can build on it commercially.
A compliance process proportionate to the risk
- Generate a component inventory automatically from the dependency manifests, on every build. A list maintained by hand is out of date within a sprint.
- Keep an allow and deny list by licence family, decided once by someone senior. Permissive allowed; weak copyleft allowed with a linking rule; strong copyleft and network copyleft by exception only, with a named approver.
- Fail the build on a new dependency outside the allow list, rather than reviewing at release. Removing a component in the week of a release is how deadlines are missed.
- Generate the third-party notices file at build time from the same inventory, and ship it — an about screen, a documentation page, a file in the package.
- Where you ship copyleft components, keep the corresponding source for each released version, and keep the written offer valid for as long as the licence requires.
- Re-run the scan before diligence, not during it. The findings are the same either way; the difference is whether you fix them on your own timetable.
The reason to do this while nothing is wrong is that every remedy is cheap early and expensive late. Swapping a copyleft library in week two of a project costs an afternoon. Swapping it during a diligence process costs a re-architecture, under a deadline set by someone else, with the price of the deal moving while you work. The licences themselves are not the risk. Not knowing which ones you have shipped is.
Sources
- Frequently asked questions about the GNU licences — conveying, network use and LGPL linking
- Mozilla Public License 2.0 — file-level scope and larger works
- Qt: obligations of the GPL and LGPL, including relinking and installation information
- Apache License 2.0: notices, NOTICE file, patent grant and GPL compatibility
- The Affero GPL, the as-a-service world and section 13
General information, not legal advice. This guide explains how these documents and rules generally work. Law varies by jurisdiction and changes, and none of it is applied to your circumstances here. For anything consequential, consult a licensed attorney where you are.
Frequently asked
Can I use GPL code in a commercial product?
Yes. The GPL does not restrict commercial use or charging money. What it requires is that when you convey the software, recipients get the corresponding source of the whole work under the same licence. That is compatible with selling software and incompatible with keeping the combined source closed, which is why it rarely suits proprietary products that ship binaries.
Does the GPL apply to SaaS?
Generally not, because hosting is not conveying. GPLv3 states that mere interaction with a user through a computer network, with no transfer of a copy, is not conveying, and the FSF treats internal deployment within an organisation the same way. AGPL exists specifically to change this outcome, and applies where a modified version is made available over a network.
What is the difference between GPL and LGPL?
GPL reaches the whole combined work; LGPL reaches the library. Under LGPL you may keep your application proprietary provided a user can substitute their own build of the library and still run your program. Dynamic linking satisfies that. Static linking requires you to provide object files so the user can relink, which most proprietary vendors will not do.
Do I have to publish anything for MIT or Apache code?
You do not publish source, but you do carry notices. MIT and BSD require the copyright notice and licence text to travel with any copy you distribute. Apache 2.0 additionally requires you to retain attribution notices, reproduce any NOTICE file, and state prominently that you modified the files you modified.
Does using an AI coding assistant create an open source problem?
It creates an inventory problem. Generated code arrives without a dependency entry, so a scanner cannot see it and a component list will not show it. Treat it the way you treat code copied from anywhere else: review substantial suggestions, keep the same allow list, and record third-party material in the same place you record everything else.