What does the AGPL require?
November 22, 2025 on Runxi Yu’s Website

I am not a lawyer. This is provided solely for general information purposes and does not constitute legal advice, guidance, or counsel. No attorney-client relationship is established by the provision of this information, and no reliance should be placed on this information in lieu of seeking professional legal advice. All information is provided “as is”, without warranty of any kind, either express or implied.

Context

Recently, I was writing Furgit, which attempts to be a Git library in pure Go that aims to have good performance. I tentatively picked the GNU AGPLv31 as the license. However, it was not clear to me in which cases would a server that uses Furgit be required to release source code, and in those cases, what source code would need to be released.

Let us begin by establishing a hypothetical scenario, where a hypothetical organization “Git Repository Hosting Services Inc.” (GRHS Inc.) developes and runs a proprietary software development forge called “GRHS”. GRHS extensively uses Furgit as its Git backend library and is open for use by the general public.

My thoughts based on the license

Let’s take a look at Section 13, “Remote Network Interaction; Use with the GNU General Public License”. There are a few clauses about GPL compatibility; we hereby redact them for brevity.

Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software.

So firstly, we’d have to determine whether GRHS is a “modified version” of Furgit. In plain English, you might assum ethat “modified version” means editing components inside the Furgit package’s source code. But let’s see what the AGPLv3 says. In Section 0, “Definitions”,

To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.

“Modify” in AGPLv3 is defined to include not just patching the original source files, but also creating any work “based on” the Program; that is, any adaptation that uses parts of it in a way that needs copyright permission.

In the GPL FAQ, the FSF writes:

Linking a GPL covered work statically or dynamically with other modules is making a combined work based on the GPL covered work.

Since GRHS uses Furgit as a library, it is making a combined work based on Furgit. Therefore, GRHS is indeed a “modified version” of Furgit.

Thus GRHS Inc. would be required to provide all users interacting with GRHS remotely through a computer network an opportunity to receive the “Corresponding Source” of “[their] version”. But what exactly is the Corresponding Source here?

The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.

A “covered work” means either the unmodified Program or a work based on the Program.

Because a “work based on” the Program (Furgit) includes any adaptation requiring copyright permission, any combined work that embeds, links, or otherwise incorporates the Program into itself becomes, in its entirety, a “covered work”, and therefore “a work” for the purposes of determining Corresponding Source.

In summmary, GRHS Inc. would be required to provide the Corresponding Source of the entire GRHS software, including but not limited to Furgit.

Or at least, that’s my reading.

I think a slightly snarky (not sure if that’s the right word for it) but intuitive way to think about this, for me, is: AGPLv3 section 13 applies like the GPL, not the LGPL.


  1. Furgit additionally uses a Section 14 proxy designation clause, which designates me as the proxy permitted to switch the project to a newer version of the AGPL should I choose to do so. But that’s irrelevant to this discussion. ↩︎