Hacker News new | ask | show | jobs
by OmarAssadi 892 days ago
Tangent, but out of curiosity, what was the more important goal in your mind/whoever else was involved? The ability to relink with newer/patched libraries, or simply the ability to inspect/modify the LGPLed code?

I have a love-hate with the ultra-permissive licenses; on the one-hand, philosophically, I think I prefer the idea of trusting the recipient to just not be an asshole, but at the same time, I recognize [1] that corporations [which tend to prefer permissive licenses] don't always have the best interests of everyone in mind.

Even in ideal cases, like how the LLVM community tends to at least see LLVM most of the LLVM forks patches--even if they are not accepted--simply because it's effort to maintain a downstream fork of something so fast moving, community-wise, I feel like Apache 2.0 and friends end up very different, perhaps corporate, in a way that I don't love.

For example, I used to wonder how GCC still had so much backing since LLVM is generally easier to work with, from my experience, no wild autotools insanity, etc. But after doing the full UEFI -> modern Linux + GCC/LLVM bootstrap, I really appreciate the care taken to avoid constant churn to minimum C++ versions, support for obscure platforms, etc; it feels like LLVM sort of disregards anything that doesn't make a ton of visible economic sense [2], which makes the bootstrapping process so much more awful by limiting the number of potential platforms plus requiring even more steps than GCC, which is brutal on its own.

Anyway, I guess I was wondering, if you were doing it all over again, would something like the MPL 2.0 perhaps have fit the bill better? One benefit of the LGPL, to me, of course, is that you should, in theory, be able to link against a different copy. But at the same time, I guess I am more concerned about the ability to allow useful libraries to remain in the hands of the users to modify than I am about them to be able to fix a bug whatever random proprietary program--worst case, if it's something entirely unmaintained, I can often binary patch whatever bug or similar.

I feel like the LGPL, while nice in theory, probably causes more harm [for me] relative to the MPL simply because people are [unnecessarily] afraid of potential implications with static linking, or perhaps cannot be bothered distributing individual object files alongside the static binary to allow relinking. So, we end up with people choosing non-copyleft alternatives or reinventing the wheel as proprietary software.

I have similar feelings with the less-selective GPL; we've ended up with the horrible situation of people distributing images that pull the entirety of the Ubuntu userspace just to emulate static binaries via containers.

Anyway, tangent over. Also, I wish there was a well-accepted CDDL/MPL 2.0-style license with a network distribution clause; I think I've become a fan of file-based copyleft as a good middleground, but it's annoying that there isn't a popular file-based copyleft license that takes into account AWS and similar.

EDIT: Also, I guess similar to what you already touched on RE: iOS. I feel like GPL 3.0 was probably a mistake. Presumably good intentions, but I feel like the hand was overplayed; it simultaneously went too far for companies like Apple to touch it, so we ended up with ancient Bash and GNU Make with gradual replacement of anything GPL, and yet also simultaneously not far enough to deal with cloud services, containerized RPC-style not-technically-linking-but-basically-linking distribution, etc.

[1]: Personal opinion -- I know this is a VC website at the end of the day and people will disagree with me. I don't really care to argue about it.

[2]: Not meant to be an attack against LLVM. And I know there are loads of independent developers and researchers working on it too. I hope my feelings don't get totally misunderstood.

2 comments

> Tangent, but out of curiosity, what was the more important goal in your mind/whoever else was involved? The ability to relink with newer/patched libraries, or simply the ability to inspect/modify the LGPLed code?

The freedom of the user to modify the library and use it was the most important part. It’s a fundamental “right to repair”.

FWIW the people involved were just me, plus John Gilmore who said “why not explicitly make dynamic linking automatically qualify?” which was obviously a good idea, and RMS who was bitterly opposed.

I wonder how many times that has happened? Specifically someone intentionally modifying the behaviour of a closed source program by changing an LGPL library that it depends on.
I personally know of that happening twice. In both cases it was used to patch a bug in the super old Qt version that was being shipped.

I'm sure it doesn't happen often, but IMHO that doesn't really matter. It's preserving the freedom to do it that is important. I rarely use my right to free speech (that is, saying something that somebody in power would find offensive and want to jail me for), but it's a right I would fight to the bitter end to preserve.

I mean, it's like telling the pope that Jesus is the son of god only on Mondays and Tuesdays, eh...
To me, CDDL/MPL 2.0-style licenses are much more sane than GPL based ones.

The definition of what is a derivative work is IMHO overreaching in GPL based licenses.

> The definition of what is a derivative work is IMHO overreaching in GPL based licenses.

GPL doesn’t use the word “derive” and specifies modified work in a way that is consistent with the customary legal definition.

People twist things around because they want to use GPLed code without “paying” for it, but really at the end of the day it’s just an ordinary license agreement but instead of paying cash to use it you agree to give users the freedom to modify and/or redistribute the code.

Just like any other licensed code you can agree to the terms and use the code or disagree with the terms and use something else.

It doesn't really matter where exactly it is defined. There's effective definition of derivative works in place for GPL, even though it's definition is inherited.

> People twist things around because they want to use GPLed code without “paying” for it, but really at the end of the day it’s just an ordinary license agreement but instead of paying cash to use it you agree to give users the freedom to modify and/or redistribute the code.

You mean, instead of paying cash to use it, you pay with your property (your code). An old school barter exchange.

Source of confusion probably comes from overuse of the word "free" by people promoting GPL, which is like you said, just an ordinary license agreement.

> You mean, instead of paying cash to use it, you pay with your property (your code). An old school barter exchange.

It's not that simple. If it was just about "my" code, this would indeed your claimed barter exchange. But often, say in industry, the code that you develop is combined with a lot of third party code and libraries for which you simply do not have the permission to put them under GPL.

That's fine, and isn't the responsibility of the author of the GPL code you want to use. If you can comply with the terms of the license, great, you can use it. If you can't, you need to find something else whose license terms you can comply with. And you might have to pay money for it, but that's life.
The GPL can't really overwrite the legal definition of derivative work, even if it wanted to. Of course, there is little case law actually going into the weeds, so it's hard to say for sure. However, the GPL's definition seems pretty reasonable to me as to what would constitute a derived work (anything linking with the GPL work OR anything passing very very complex structures between itself and the GPL work).

In fact, I suspect that a legal definition of exactly what constitutes a derived work of a program may be more broad than the GPL's definition. For example, it's plausible to me that a program which calls `sh` as a fundamental part of its functioning could be found to represent a derivative work of `sh` per copyright laws.

Hmm, maybe didn't use the correct term when I said "derivative work".

What term defines the scope to which copyleft applies to?

I think derived work or derivative work are the right terms. However, "copyleft" is not a legal term, and it is copyright law (and associated jurisprudence) that defines what constitutes a derived work of some original. Licenses then control what the copyright holder allows you to do with their works or derivatives.

So, only copyright law itself can say whether, for example, this comment I'm making is a derived work of your own comment, or if it is an original work of my own. If it is a derived work of your comment, then you are the copyright holder for this comment I'm making and you can choose to write a license that allows me to distribute it or nor or whatever else. If it is not a derived work, then I am the copyright holder, and I don't require any license from you to distribute this comment.

So, if copyright law were to say "a computer program A is a derived work of program B if and only if it is produced from the same source code of A or textual modifications of the code of A" (very implausible, but just for the sake of argument), then there would be no difference between the GPL and the LGPL, and you could freely link to a GPL program and distribute the result under a proprietary license (you'd still have to distribute the source code of the original GPL program, of course).

> If it is a derived work of your comment, then you are the copyright holder for this comment

Is that correct? I am also not a lawyer, but this seems wrong to me.

If I make something that is a derived work of some other copyrighted work, my understanding is that I still own the copyright on the parts of the final work that I made (assuming what I made meets the thresholds for being copyrightable). But I am not permitted to distribute that work unless I receive a license to do so from the owner of the work I've derived from.

My understanding seems to dovetail with how the GPL works. If I write a program that links to a GPL library, and that does indeed cause my program to become a derived work of the GPL library, I still own the copyright to my program. In order to distribute my program, I have to abide by the terms of the GPL. But even if I were to violate the terms of the GPL (thus terminating my rights under the GPL), I still would not lose my copyright interest in the program I wrote, only my right to distribute it.

Looking this up a little bit more, I think it's more complicated than I was saying but also than you're saying.

For the "normal" cases, you're right: you can have copyright on the original parts of a derived work. You are fully right though that the original work's author does not in any circumstance get the copyright for the derived work. That was a confusion on my part.

> But even if I were to violate the terms of the GPL (thus terminating my rights under the GPL), I still would not lose my copyright interest in the program I wrote, only my right to distribute it.

As far as I understand though, this is not true. If you were not authorized to use the original work, then even the original parts of your work are in fact not protected by copyright at all. So, if, say, I take a Spiderman comic and add an extra page of fanart at the end, without any authorization from Marvel/Disney, then my extra page of fanart is not protected by copyright at all, and anyone is free to copy it (unless it also infringes on Marvel/Disney's copyright of course) [0]:

> Only the owner of copyright in a work has the right to prepare, or to authorize someone else to create, an adaptation of that work. The owner of a copyright is generally the author or someone who has obtained the exclusive rights from the author. In any case where a copyrighted work is used without the permission of the copyright owner, copyright protection will not extend to any part of the work in which such material has been used unlawfully. The unauthorized adaptation of a work may constitute copyright infringement.

[0] https://copyright.gov/circs/circ14.pdf

So, derivative work term in copyright law defines the scope only as binary all or nothing? It's always a whole product that is considered derived, never just part of a product.

And license itself can then limit the scope of copyleft, so that it applies it to only a specific part of a work.

Note that I am not by any means a lawyer, so please don't take my understanding as authoritative.

My understanding is that "a work" and "a product" are different things. If I sell you a bundle of three books, the bundle is a product, but each book is an individual work and caries its own copyright. Even a single book may contain 5 short stories, each with a different copyright holder and license.

Similarly, I can sell you one CD that contains three different works with different licenses. Now, it is true that the GPL license does seem to say that you can't distribute a modified GPL work on the same CD as a non-GPL work, which would not fall under copyright law, it would just be an arbitrary requirement of the license that you have to accept if you want to be able to distribute the GPL work at all (by default, you're not allowed to distribute copyrighted work at all - it's only the terms of the license that allow you to).

However, the derived work problem comes more into question when you write a program that only works if it is linked with, say, glibc. The question becomes: is your program a separate work from glibc, or is it a derived work of glibc? If it is a derived work, then the GNU project is the copyright holder of the program you wrote, and you're not allowed to distribute it at all unless you get some license from them. If it is NOT a derived work, then you are at least free to distribute your program however you want, and tell your customers "just download glibc from gnu.org, put it at this path, then start my program", and the glibc license could do nothing to stop you since it doesn't apply in any way.

An analogy with books would be you writing a book that's meant as a sequel to Harry Potter. It is quite well established that even if your book is fully original, if it uses characters from Harry Potter by name, or locations or other key concepts, then your book is a derived work of the Harry Potter franchise and you're not allowed to sell it even if you're not directly using any piece of the originals.

Either way though, if you're creating a derived work, the license of the original can allow you to distribute your derived work under any terms they want. A license could say "you can distribute derived works for free on Wednesdays, but you have to pay a royalty if it's any other day of the week". Or, more interestingly, the license could say "you can distribute derived works without any conditions if they only access our original work through DLOPEN, but if they are accessing it through static linking, you must release the code and build instructions for your derived work" - this is what the LGPL does.

IIUC, GPL based licensed do not define what what derivative work it, but leaves it to the law.