This company likely violated the AGPL (as it is doubtful they followed the source offer requirement when modifying the code) - in the same way as 99% of third party AGPL project contributors violate the AGPL on a daily basis, every time they make a change on a GitHub fork. It's a horribly anti-developer license. But if this company had wanted to modify and host AGPL software legally, without providing source, there are workarounds they could've used, as I explained.
The full clause is:
> If you modify the Program your modified version must prominently offer all users interacting with it remotely through a computer network an opportunity to receive the Corresponding Source of your version ...
The requirement is not just for modifying code strictly. It's for offering the resulting program to users.
If I fork an AGPL project to contribute to it, modify the code, but don't actually host the modified resulting binary anywhere, I see no issues here. Sure, if I started hosting it, I'd have to update the source code links, but if I don't, then there's no users, so no link changes needed.
Similarly, if the project is well built, for example if the build process in the repo builds a binary that includes the output of "git archive" to serve, that link will always be up to date for any build, so you don't even have to update anything to start hosting a fork of it.
In your (linked) comment about the AGPL, you seem to be arguing that just forking and modifying the source code violates that specific clause. That it's violating "offer users interacting with it remotely .. source code". That is what you're arguing, right? Why would that kick in if you change the code but don't actually host the service in question where users can interact with it over the network?
This is the same misunderstanding everyone makes, and that the FSF wants everyone to make.
> your modified version must [...]
You are not required to offer anything to users. Your modified version is required to offer the resulting program to users. The requirement is confusingly worded, probably deliberately, but what it actually requires is for there to be a mandatory feature in your modified version such that it itself offers the resulting program to users. You are required at the time of modification to ensure that your modified version, at the time of execution, makes that offer (as part of its code).
Yes, this is hideously unclear, but that's what the text really says. The requirement is on you at the time of modification (also implied by this being a copyright license), and that requirement is for the modified version to work a certain way.
I can't find the link right now, but IIRC legal analysis including people involved in authoring the AGPL has confirmed that this indeed was the intent; they didn't want to put in a restriction on usage (because Freedom Zero), so instead they came up with this cute (and broken) hack that applies at modification time. Unfortunately, they conveniently forgot to mention this restriction violates Freedom 1 instead.
> If I fork an AGPL project to contribute to it, modify the code, but don't actually host the modified resulting binary anywhere, I see no issues here.
By modifying the code, you have invoked the clause of the license that you quoted. If your modifications do not include a functional change to the code, such that, if run, it offers the resulting program to its users, then you have violated the license.
> Similarly, if the project is well built, for example if the build process in the repo builds a binary that includes the output of "git archive" to serve, that link will always be up to date for any build, so you don't even have to update anything to start hosting a fork of it.
Correct. Almost no AGPL project does this. It is the only way to remain compliant with the license and still have a sane development process, but nobody gets that. Indeed, this is the only situation where using the AGPL does not impose an undue licensing burden on developers, and it sucks that, as part of trying to sell the AGPL as magic anti-SaaS pixie dust, the FSF has obfuscated this, and pretty much nobody is actually putting this feature into their AGPLed app build system, and thus causing everyone collaborating on those AGPLed apps to violate the license every time, because if this feature isn't in place already it becomes the burden of every single contributor.
> In your (linked) comment about the AGPL, you seem to be arguing that just forking and modifying the source code violates that specific clause.
It does, unless you first implement that `git archive` feature, and then make your desired changes. Which, as I said, nobody does.
> That is what you're arguing, right? Why would that kick in if you change the code but don't actually host the service in question where users can interact with it over the network?
Because, as I said, the clause is really all about what kinds of modifications you are allowed to make and what would happen if users interacted with it over a network - that doesn't have to actually happen.
Firstly, the pragmatic and in my opinion definitely correct reasoning:
Even if there is a technical loophole, as you describe, it doesn't matter because no one will enforce this so-called violation. The copyright holders of the code will not care if someone forks their code, updates it, doesn't update the link, contributes back, and has zero users.
Someone who does not host a modified copy is following the spirit of the license, the spirit the developer intended, and as such has basically 0 real legal risk. They also certainly did not cause any damages in their infringement, so I doubt the courts would care.
Second, the pedantic technical bit.
> your modified version must prominently offer all users
If there are 0 users of my modified version, I have offered a link to "all users". I guess I have to offer a link to myself if I'm playing around with my copy locally, but I somehow feel like I can figure out how to get the source code myself.
You're correct, but the whole point of licenses is having them work as intended. We don't run the free software ecosystem on goodwill and "I don't care if you violate my license as long as I like what you're doing". Licenses exist for a reason.
> If there are 0 users of my modified version, I have offered a link to "all users".
My reading of that is akin to "all potential users", as implied by the requirement being on what the modified version does; the code itself can only affect potential users since it has no idea of what actual users may or may not eventually exist.
But we do run the legal system at least partly good will, and licenses only matter in the context of the legal system. Obviously a less ambiguous better worded license is better, but I don't think it's necessarily that big a deal.
> the code itself can only affect potential users since it has no idea of what actual users may or may not eventually exist.
I don't think the law cares about this though. The law can know perfectly well after the fact that I personally did or didn't have any users. That I did or did not offer source code to all 0 users of my non-existent copy I'm not hosting. I don't really see why the copyright license can't make conditions based on real-world usage and hosting; very few laws are pure functions that take only source code as input, almost all of them reference reality.
I guess you'd argue that I'm opening myself up to liability by forking, say, mastodon and modifying it because now someone could host my fork, and that someone (who isn't offering a correct source code link) would be causing me to violate the license... But that seems like the sort of reasoning that wouldn't last a heartbeat in court. The person running my copy of the code should have modified it further to have the correct link, they are the ones that failed to comply with the copyright license terms for the version they run.
By analogy, in copyright law, fair use allows "violating" copyright in some cases, such as to copy a page of a book for teaching material. Your argument reads to me like saying "But the teacher copied a page of the book, gave it to his students for class, and then one of the students sold that page without permission from the copyright holder! Aha, the teacher has violated copyright". Which no court would ever hold to be true, even if a very literal reading of the law may be more murky.
But by not modifying it in the first place, they avoid entering into any legal obligations to do so. See the problem?
> But the teacher copied a page of the book, gave it to his students for class, and then one of the students sold that page without permission from the copyright holder! Aha, the teacher has violated copyright". Which no court would ever hold to be true, even if a very literal reading of the law may be more murky.
Nope, the student is the one who violated copyright here, as copyright also controls the right to distribution, not just making copies. By making the sale, a copyright violation occurred. The teacher is likely safe under fair use, as you say.
If the teacher were to sell his original copy of the book, that would be legal under the first-sale doctrine: the copyright holder's interest in distribution rights for a particular copy is exhausted after the book was initially sold. But the interest in the right to make copies persists, and since the copy made for class was not sold by the original copyright holder, but rather only made and distributed under fair use, it is not bound by the first sale doctrine, and distribution rights are still controlled by the copyright owner (they re-appear when the copy is made). And hence, the student is in violation, as such a sale would not fall under fair use.
People love to throw around this idea that the law is all subjective and judges work off of common sense, but that's really not how it works. The law is incredibly detailed on these things and lawmakers aren't stupid. This is all written in the books. Yes, there is some leeway for good faith interpretations, but the legal system doesn't run on whatever the judge feels is right on any given day. This is all spelled out.
It is not going to sweat binary vs. Source distributions, and in fact, as long as an argument is sufficiently cogent, a court of law can probably mavigate multiple layers of indirection.
The law deals with people; and is not an ignorant machine. There is flexibility. There is also a principle in law that is basically expressed as "the court will hedge against inefficacy". If there are competing interpretations, the one that actually best upholds the intent of the legal construct will be gone with.
AGPL is considered Anti-SaaS pixie dust, as you call it, so the courts would look at it as "have you met your obligation under the license to make available to the user all code to allow the user to recreate your system's deployment?"
If yes, solid. If no, you have issues.
Not a lawyer, not your lawyer, but read way too many books on the nightmare that is our legal system to entertain your interpretation of the AGPL being unnavigable by a court of of law.
The requirement is for the source code for the corresponding version is what is advertised. The vast, vast majority of AGPLed apps do not have any automatic mechanism to match the currently running version to such offer; if there's an offer at all (which there often isn't, making all forks and branches violations unless they add it first), it's usually a hard-coded link, and then the onus is on the person making changes to first modify that link to point to their version.
Yes, there are technical ways in which you can make the AGPL work in a vaguely reasonable way, avoiding this problem by automating your way around it. And nobody implements them. If people understood these requirements and actually implemented those mechanisms, we wouldn't have this problem, and people would also be aware of just how special and non-free the AGPL is because it's imposing requirements on modification beyond what a free software license can.
I'm not saying it has to be a source code archive, but if it isn't a source code archive, then you'd better find a way for the app to magically know what git repo hosted elsewhere should be used as the source code offer link, and have it automatically update for any forks/branches and always stay up to date. Having an automatically generated local source code archive, or outright serving the source code of the currently live app (e.g. for interpreted languages) are the only sane ways I can think of of automating compliance with this AGPL requirement. Anything that points to another server or repo isn't going to stay up to date as people make changes, and then you're back to square one.
git rev-parse --abbrev-ref @{upstream}
when the server starts and then provides this link in the web pages?
The link will be updated automatically in the forks.
---
About the version, call "git show -s --format='%cs-%h'" to get the current commit.
It doesn't prevent people to hide / change the information, but at least by default it works even in a fork.