Skip to content
Websites & online business

Open source obligations, and what actually triggers them

Open source licensing is treated as a legal problem and is mostly a build problem. Nearly every obligation in the common licences is triggered by one event — distributing the software — and whether you have distributed it is a question about how your product is shipped, not about how it is written. Get that distinction right and the rest is process. Get it wrong and you will find out during an acquisition, when a lawyer runs a scanner over your repository.

7 min readPublished How we write these

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 userIs a copy transferred?What follows
Hosted service, users hit an API or a web appNoGPL and LGPL obligations are not triggered by the hosting itself
Mobile app in a storeYesFull distribution. Notices ship with the binary
Desktop or CLI binary, installer, packageYesFull distribution
On-premise deployment or appliance at a customer siteYesFull distribution, including firmware
Container image handed to a customer to runYesDistribution of everything in the image, not only your layer
Browser JavaScript served to the user's deviceGenerally treated as yesThe bundle is a copy, which is why front-end dependencies need the same review
One company frequently occupies several rows at once. A SaaS product with a mobile client and an enterprise on-premise option has three different answers and usually one policy.

How far each licence family reaches

MIT, BSD, ISC
Apache 2.0
MPL 2.0, LGPL
GPL, AGPL

Keep the notice

Notices, plus say what you changed

Publish the modified files or library

Publish the whole combined work

Position on the scale describes what the licence can pull in, not how permissive the community is. Nothing here prevents commercial use; the question is only what you must publish and to whom.

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.

This is a view held by the people who wrote the licence, not a rule a court has fixed — it is widely followed and it is not the product of settled litigation. The safe engineering answer is the right-hand branch; the safe legal answer is not to rely on a narrow reading of either.

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.

Open

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

  1. Generate a component inventory automatically from the dependency manifests, on every build. A list maintained by hand is out of date within a sprint.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

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.

Do the whole thing on your phone

Draft it, check it for risk, rewrite the clauses you do not like, sign it and send it — without opening a laptop.

  • 136 templates across 12 categories
  • AI review in plain English
  • Free every month — 3 documents, 2 reviews
Download on theApp Store
Free to download · no account

iPhone, iPad, Mac & Vision Pro · iOS 15.6+ · 76.1 MB
Premium from $1.99/week