Date: Thu, 6 Mar 1997 15:52:07 -0700 (MST) From: Terry Lambert <terry@lambert.org> To: dennis@etinc.com (dennis) Cc: terry@lambert.org, bmcgover@cisco.com, hackers@FreeBSD.ORG Subject: Re: Porting device drivers... Message-ID: <199703062252.PAA14146@phaeton.artisoft.com> In-Reply-To: <3.0.32.19970306165429.00afdcd0@etinc.com> from "dennis" at Mar 6, 97 04:54:32 pm
next in thread | previous in thread | raw e-mail | index | archive | help
This is a long discussion on "ways to skirt the intent of the GPL while adhering to the letter" and vice versa, for GPL camps that want to use GPL incompatible code, and for proprietary camps that want to use GPL code. This is in response to contradictions of my posting about usign LKM's to allow the use of GPL code, and how you can or can't distribute the resulting binaries. > >Unless this card is used for a serial console (ie: it's boot-critical), > >there's no reason you can't make it an LKM, and allow users to locally > >create statically linked kernels, which would be non-redistributable > >because of the conflict between the GPL "no additional restrictions" > >and the UCB "claim credit" clauses. > > Why is this an issue, providing that the resulting BSD drivers include > source code? Because the UCB license conflicts with the GPL. Therefore code can only be GPL or UCBL, not both simultaneously. If it's not LGPL, then there are agregation issues for a static link ("product includes GPL'ed code"). > The distinction is not "commercial", but that of source code. You > certainly cannot take linux source and make an object distribution > in 'BSD, but I dont believe that there is anything in the GPL license > that makes code written for linux bound to linux only..... Good thing I never said that, then. 8-). > the only stipulation is that the modified source be made available. This is the problem. Code under GPL can have no additional restrictions, but the claim credit clause of the UCB license is an additional restriction, therefore the code, as a whole, can not be GPL'ed as a whole. Since the code can not be GPL'ed as a whole, and it is only legal to distribute binaries that are GPL'ed in part under GPL, as a whole, since this would not constitute "mere agregation", it is illegal to distribute a BSD kernel with GPL'ed components. It's not illegal to make one, and it's not illegal to have one, but it's illegal to give one to anyone else. Even if you comply with the GPL's source distribution requirement, you have still failed to comply with the "GPL all code linked with the binary that is not merely agregated" clause of the GPL. And you *can't* ever comply with that, because you can't GPL UCBL'ed code because of the claim credit clause making it "restricted" in the GPL sense of things. So, you can "merely agregate", and you can skirt the issue of whether you have GPL'ed code linked by linking it as a result of a user action at the user site -- the user can't give away the code either. If you wanted to nit-pick, I supposed you could claim that you could give away a laptop using LKM'ed GPL drivers in a BSD kernel *ONLY* if the laptop were off at the time you did it (otherwise, you are giving them software linked with GPL'ed code that is not itself GPL'ed, in violation of the terms of the GPL). 8-). > Another caveat is that the author of the code may be able to license > it to you or simply give permission to do whatever you want with it.. Yes. That's why I suggested that's what should be done: get the driver code under LGPL instead of GPL, or get it under UCBL, if you can. > Under US law (at least) copyrights are always retained by the author, > which would imply that even if a driver were released for Linux under > GPL, the author would have the right to do whatever he wants with the > code as it inherently belongs to him. This ignores that fact that the GPL may work. In some ways, I think it does, though maybe not necessary ways in line with the intended agenda of the original author. Consider that I have a driver for a Zonds card; I put it under GPL. I release the driver. 6 other people hack on it, each of their changes going in under GPL. Now I want to link this driver with a BSD kernel. The prima facia intent of putting the driver under GPL was so that no one could later "imprison" the driver (I suppose by writing it to paper tape and setting off a large number of geostationary nukes to wipe out everywhere else it was stored via EMP -- the idea of code "imprisonment" is a rather impractical and highly unlikely one at best). In effect, this means that any contributions to the driver must be under GPL as well. And if the driver is statically linked, then it means that any kernel it's liked with is either also GPL, or undistributable in linked form, since distribution without source for the kernel would violate the GPL. Further, to do what you suggest "get it under another license" would require the consent of all the authors. If author A wrote the driver, then author B tweaked it, then the tweaked driver is a derivative work of A's work, and A has no rights to the licensed version above the rights he granted in the original GPL'ing of the driver. Now push the code through several more authors, and you are faced with a daunting task. If we stick with the prima facia intent, that the purpose was to keep the driver free, and not the implied intent, to infect all code that uses it with GPL and to punish all non-GPL distributors who want to use it for their non-GPL distribution, then... the LGPL would accomplish the same thing for the driver. If in fact the prima facia intent was the actual intent, the LGPL would yield significant advantage: commercial vendors who wanted to use the driver would contribute commercial engineering hours toward improving the code, and everyone would win: the commercial users would get a driver for a significantly reduced effort, the Stallmanites would maintain the freedom of the code itself, and the GPL contributors other than the commercial vendors would gain professional engineering hours working on solving problems that were not fun to solve (and would probably never be solved by volunteer effort alone, as a result). At one time, I tried to get the Linux camp to LGPL a couple of their drivers for use by USL. That would have allowed UnixWare to use the drivers, and it would have given some of the drivers the benefit of people working on them who had been working on UNIX kernel code for 30 years. Both sides would have won, in the long run, since this highly valuable engineering effort would have had to have been released under LGPL. I even had USL senior management signed off on it; the torpedo came from the Linux camp. 8-(. The LKM philosophy allows you to do something unique: comply with the terms of the GPL, while not promoting distribution. This is not in line with the spirit of the GPL, but the driver author can't sue you over the spirit of the thing. If he had a different intent, after all, he would have used a different (or at least slight modified) license, where the spirit was better reflected in the letter than it currently is in the GPL (or LGPL). It's not like there haven't been people (like me) screaming about this loophole since day one. For what it's worth, I can get in the same situation under Windows95 or Windows NT using COM objects: OLE controls, ActiveX components, and DLL's. At the time that a GPL'ed driver is statically linked with a UCBL'ed kernel, it's not *you* who are generating the illegal-to-distribute binary, it's your customer. Sort of like a binary nerve agent, if you think about it. Or a Microsoft end user license for one machine, specifying the meaning of use to be "loaded onto the system into RAM or into machine storage" so you can't run the same copy of Word 6.0 on your laptop and desktop, even though you never run them at the same time, unless you uninstall/install each time. The same thing goes for commercial drivers statically linked into the Linux kernel: because they can't be relinked in the face of interface changes, they are technically not distributable as binaries, either, but they, took, can use the LKM loophole, which delays linking until it gets to the customer's site, and requires an act by the customer to cause the link to occur. The only place this is unsatisfying to the potential GPL or non-GPL vendor is in the case of a boot-critical device without a fallback driver. There is no legal way for the code to be combined so that it can work out-of-the-box in this configuration, and still comply with the licenses. Both Linux and BSD need VM86()-based fallback drivers, and this sinkhole goes away as well. If the Linux drivers were GPL'ed, and Linux treated drivers as libraries instead of drivers treating the kernel as a library, then both camps would be able to freely statically link the drivers, as long as they allowed relinking of the proprietary objects. In any case, this is not worth arguing about. The short answer was, and still is, that you can port LGPL and GPL'ed drivers to BSD as LKM's until the cows come home, and only the person who causes the LKM to be linked falls under the "must GPL all sources to distribute combined binaries" clause of the GPL. And since they're the customer who will be using the code, it doesn't matter if they can't redistribute. The only killer is boot-critical drivers, and we already know what it would take to get around that one. Regards, Terry Lambert terry@lambert.org --- Any opinions in this posting are my own and not those of my present or previous employers.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199703062252.PAA14146>