|
|
Subscribe / Log in / New account

Getting grubby with ZFS

We're bad at marketing

We can admit it, marketing is not our strong suit. Our strength is writing the kind of articles that developers, administrators, and free-software supporters depend on to know what is going on in the Linux world. Please subscribe today to help us keep doing that, and so we don’t have to get good at marketing.

By Jonathan Corbet
December 7, 2010
The GRUB bootloader is widely used to get Linux (and other) systems running. Its flexibility and configurability make it a logical choice for many types of computers, as does its "just works" factor: your editor cannot be the only one to smile when he realizes how long it has been since the last "I forgot to run LILO and my new kernel won't boot" episode. One of GRUB's nice features is its ability to understand filesystem structures and find bootable kernels on the fly. So the addition of support for another filesystem type would not normally be a noteworthy event. When that filesystem is ZFS, though, people will pay attention.

ZFS was developed by Sun Microsystems, and is now owned by Oracle. It offers some nice features that Linux does not (yet) have in a production-quality filesystem. ZFS, like the rest of Solaris, is licensed under the CDDL, which is not considered to be compatible with the GPLv3 license used by GRUB. Over the years, ZFS has also been the subject of a fair amount of dark murmuring with regard to a large pile of associated software patents. For these reasons, there has never been a serious push to get ZFS support into Linux.

One would think that these concerns would keep ZFS support out of GRUB as well. It turns out that one of those concerns - licensing - is not relevant for the simple reason that Sun saw fit to release some small bits of ZFS code under the GPL for the express purpose of compatibility with GRUB. The released code is not enough to run a ZFS filesystem; it's really just enough to locate and read files. Just enough, in other words, to bootstrap a ZFS-based system.

What about software patents? One would assume that Oracle would not go out of its way to sue GRUB users for using its built-in ZFS code to boot Solaris systems. Those people are, after all, Oracle's customers, and, for all the criticism of Oracle which has been heard recently, nobody has suggested that it has reached a point where it will take advice from the SCO playbook. Still, assumptions can lead to trouble; Oracle may yet hire Darl McBride once Larry Ellison retires to his yacht, it may sell the patents to somebody else, or any of a number of other things may happen. Depending on rational behavior from corporations over the long term is always a scary bet.

In this case, the GRUB maintainers (and, presumably, the Free Software Foundation, which owns the GRUB project) have decided that incorporating the code is safe. Their reasons are described in the announcement; it comes down to the fact that Oracle has distributed the code under the GPL:

Thanks to this, and due to the fact that Oracle is bound to the terms of the GNU GPL when it comes to GRUB, we believe this renders patents covering ZFS basically harmless to GRUB users. If the patents covering GRUB are held by Oracle, they can't use them against GRUB users, and if they're held by other parties, the GPL provisions will prevent Oracle from paying a tax only for themselves, so if they will fight alongside the community instead of betraying it.

The announcement goes on to suggest that anybody who cares about the freedom of all their users should always release code under the latest version of the GPL.

There is an interesting implication here. The FSF is counting on Oracle being bound by the strengthened patent clauses found in GPLv3. But the code found in Solaris was never explicitly distributed under GPLv3; it is under a GPLv2+ license. The code only became explicitly GPLv3 when it was moved into the GNU-run Savannah repository. The FSF is saying that, thanks to the "or any later version" language in the copyright notice, users of the ZFS code can assume that Oracle is bound by the more explicit GPLv3 patent language even though GPLv3 did not exist when the code was released. They are probably right.

GPLv2 arguably contains an implicit patent grant. But it certainly does not have the Novell-inspired "you can't buy a license for your users only" language. Sun's lawyers may not have thought that they were giving the FSF the right to further bind Sun's actions with regard to patents through updated versions of the GPL. Using the "or any later version" language hands a powerful blank check to whoever controls later versions of the license.

The merging of the ZFS code raises eyebrows for another reason: neither Sun nor Oracle has assigned ownership of this code to the FSF. The Foundation's policy is clear: it needs to obtain assignment, or, failing that, a complete disclaimer of rights on the code; the ZFS code comes with neither. This exception to policy is justified this way:

The ZFS code that has been imported into GRUB derives from the OpenSolaris version of GRUB Legacy. On one hand, this code was released to the public under the terms of the GNU GPL. On the other, binary releases of Solaris included this modified GRUB, and as a result Oracle/Sun is bound by the GPL.

We believe that these two factors give us very strong reassurance that: a) Oracle owns the copyright to this code and b) Oracle is licensing it under GPL, and therefore it is completely safe to use this in GRUB.

The FSF has often claimed that copyright assignment is required in order to be able to prosecute infringement cases. Either the FSF no longer believes this, or it has decided that license enforcement will never be necessary for GRUB. It's hard to find any other possible explanations for this decision.

The FSF has also pronounced as "safe" a chunk of code which was never submitted for inclusion by its authors, and which is owned by a company which is known for its active legal department. This is the company which is currently suing Google over an alternative Java implementation, after all. Perhaps the FSF has a hush-hush agreement with Oracle regarding the merging of this code, but that seems unlikely. Merging the code is almost certainly safe without such an agreement, but it would be a stretch to say that it is more safe than merging code from individual contributors who do not wish to assign their copyrights to the FSF. If this code can be safely accepted without copyright assignment, so can contributions from many others.

Might the FSF be slowly rethinking its position on copyright assignment? There have been few signs of any such deliberation, but the acceptance of the ZFS code sets an interesting precedent. Perhaps the FSF has an internal policy saying that unassigned code is acceptable if it comes from an Oracle-sized corporation? It would be nice to know what the FSF is really thinking.


to post comments

A few thoughts on Jonathan's opinions

Posted Dec 7, 2010 21:38 UTC (Tue) by bkuhn (subscriber, #58642) [Link] (4 responses)

A few notes on what you've said, Jonathan:

  • I think you create a false dichotomy when you say: Either the FSF no longer believes this, or it has decided that license enforcement will never be necessary for GRUB.. All of us who enforce the GPL know that it's easier to enforce GPL if you have most or all of the copyrights, but still very much possible even with only a plurality of copyright on the code (cf. BusyBox enforcement). I'd venture to say it's somewhat of a linear sliding scale: the more copyrights you hold, the easier your enforcement efforts are. The FSF clearly made a small trade-off in that regard to get something useful for GRUB development. That seems like a very reasonable and good decision to me.
  • I think you're subtly indicating in the way you're arguing your case that the GPLv2 is toothless with regard to patents. I don't think that's the case. There's no question that GPLv3 is better, but that doesn't mean that the GPLv2 implicit patent license isn't still there.
  • There is much current debate among lawyers about whether GPLv2-or-later is equivalent to licensing explicitly under GPLv3. I don't know the answer nor do I want to opine one way or the other, but I think it's safe to assume that reasonable people could believe both conclusions.

Disclaimer: I'm on the Board of Directors of the FSF, but these opinions are my own, not necessarily FSF's opinions.

— bkuhn

Off Topic

Posted Dec 8, 2010 16:53 UTC (Wed) by jeremiah (subscriber, #1221) [Link] (3 responses)

I haven't had much luck finding IP lawyers with an understanding of free software. Do you know of a list/site or someplace that would be a good place to start to find knowledgeable FOSS attys.

Off Topic

Posted Dec 8, 2010 18:07 UTC (Wed) by jordanm (guest, #68950) [Link] (1 responses)

There is a law office in New York that specializes in it.

http://www.softwarefreedom.org/

Off Topic

Posted Dec 9, 2010 14:27 UTC (Thu) by jeremiah (subscriber, #1221) [Link]

Thank you so much.

Off Topic

Posted Dec 10, 2010 16:42 UTC (Fri) by wookey (guest, #5501) [Link]

The FTF-legal taskforce is pretty good.http://www.fsfe.org/projects/ftf/ftf.en.html There are a lot of lawyers there including many (most?) of the ones that know about Free Software.

I think 'finding a suitable lawyer for your jurisdiction/problem' is one of the services they provide.

Getting grubby with ZFS

Posted Dec 7, 2010 21:55 UTC (Tue) by johill (subscriber, #25196) [Link] (1 responses)

It might be easy to try the GPL enforcement aspect of it :-)

"PGP Whole Disk Encryption" is using a grub derivative for their boot loader; they admit this and publish the code somewhere, but they don't seem to actually comply with GPL license requirements because you can't build what they publish -- you need a proprietary library to link against.

I know this because at some point I looked at making PGP WDE available on Linux, but there's no documentation of the on-disk format.

Getting grubby with ZFS

Posted Dec 7, 2010 22:38 UTC (Tue) by bkuhn (subscriber, #58642) [Link]

Please write up all the details, including specifics about how the build of the source fails due a proprietary dependency and email them to <[email protected]>. Thanks.

Getting grubby with ZFS

Posted Dec 7, 2010 22:54 UTC (Tue) by joey (guest, #328) [Link] (2 responses)

> One would assume that Oracle would not go out of its way to sue GRUB users for using its built-in ZFS code to boot Solaris systems.

I suppose the ZFS support could be used that way, but it seems more likely to be used to boot eg, Debian kFreeBSD systems.

Getting grubby with ZFS

Posted Dec 8, 2010 15:45 UTC (Wed) by cjwatson (subscriber, #7322) [Link]

There are people in the GRUB development community doing both of these things. I wouldn't like to try to guess which is more popular numerically.

Getting grubby with ZFS

Posted Dec 9, 2010 23:21 UTC (Thu) by davecb (subscriber, #1574) [Link]

Larry, just announced that they're interested in more use of Linux on SPARC, targeting the T4 or T5 timeframe. See http://www.pcworld.com/article/212564/ellison_oracle_enterprise_linux_coming_to_sparc.html

This suggests that they'd like ZFS under it, to tune Oracle for.

--dave

Getting grubby with ZFS

Posted Dec 7, 2010 23:56 UTC (Tue) by ewen (subscriber, #4772) [Link] (6 responses)

The FSF is counting on Oracle being bound by the strengthened patent clauses found in GPLv3. But the code found in Solaris was never explicitly distributed under GPLv3; it is under a GPLv2+ license. The code only became explicitly GPLv3 when it was moved into the GNU-run Savannah repository. The FSF is saying that, thanks to the "or any later version" language in the copyright notice, users of the ZFS code can assume that Oracle is bound by the more explicit GPLv3 patent language even though GPLv3 did not exist when the code was released. They are probably right.

(NOTE: I'm just responding to what you say here, I haven't read enough of the backstory to know if the FSF is really saying what you report them as saying.)

If entity A distributes the code under GPLv2+ then it's fair to say entity A agrees to be bound by the GPLv2 license (for that specific distribution), including the option of allowing other people to distribute it under GPLv3 (or later). And if entity B then distributes the code under GPLv3 then entity B agrees to be bound by the terms of GPLv3. But I don't think that it's fair to say (nor do I think a court would say, if pushed) that entity A agreed to be bound by the terms of GPLv3 that are different from GPLv2 (just to allow someone else to so bind themselves). Particularly so when the "or later" GPLv3 license didn't even exist at the time that the original code was licensed/released (courts generally frown on applying things retroactively). So if that's the stated rationale for "patent safety" it seems pretty weak.

That said, I think including in grub the code that was released under GPLv2+, for the purpose of enabling grub booting off ZFS, is probably the correct decision here on balance. In the unlikely event that someone does turn up claiming patent infringement the direct harm is fairly low (a few people with ZFS systems didn't have to pay to boot their system), and things like estoppel may prevent successors in interest of the entity making the original release from acting against people taking advantage of that release.

Ewen

Getting grubby with ZFS

Posted Dec 8, 2010 23:42 UTC (Wed) by zlynx (guest, #2285) [Link] (5 responses)

That is how I read it as well.

Oracle released it under GPL v2 with permission for others to re-release it under GPL v3.

That doesn't make Oracle bound by GPL v3.

Getting grubby with ZFS

Posted Dec 10, 2010 7:51 UTC (Fri) by jmalcolm (subscriber, #8876) [Link] (4 responses)

Agreed.

The GPL is just the conditions under which Oracle permits you to use the code. It does not place any obligations on Oracle at all.

The language here seems a bit dangerous. The idea that the GPL is somehow a "viral" license that can steal your code, your rights, and your property away from you is something I thought we were finally getting past. Please, let's not go back there.

If somebody takes the GPL 2+ licensed code and releases it as GPL3 then it is that party that is bound by the patent language in GPL3. Oracle has not somehow released it under GPL3 just because somebody else did.

This is the difference between a license and something like the Microsoft Community Promise. Under the MCP, everybody derives their rights directly from Microsoft. Under the GPL, you get them from whoever gave you the code.

If I download Red Hat Linux, I get all my GPL rights from Red Hat, not from the FSF or Oracle or Linus or anybody else. Red Hat may have gotten the code from them but I got the code from Red Hat.

Unless I completely misunderstand, Oracle could stop releasing the code at all. In that case, anybody that had already received the code could continue to distribute it under any license that is compatible with GPL 2+ (which includes of course GPL3). It would no longer be possible to receive it directly from Oracle though and you could not somehow force them just because they had distributed it previously. If nobody else had a copy of the code it would simply be closed source again.

A license has no impact on the licenser other than restricting what legal action can be taken against licensees who are following the language of the license as originally granted.

GPL 2+ means that Oracle cannot stop you from releasing the code as GPL3. It does not compel Oracle itself to do anything at all.

The relicensing scenario is also possible with the FSF since they require copyright attribution. They could take all their code and simply relicense it under a closed source license if they wanted (however unlikely this is to occur). Of course, any code out in the wild would still be GPL and this would just result in the mother of all forks.

Disagree

Posted Dec 10, 2010 11:38 UTC (Fri) by corbet (editor, #1) [Link] (2 responses)

Hold on. Oracle distributed its code as part of a derived version of GRUB. So of course the GPL imposes obligations on them - providing the source to anybody who asks for it, for example (since they did binary distribution). They can't stop distributing that code for a while yet.

For the record, I don't think anybody has hinted that Oracle has not lived up to those requirements.

The question is not whether obligations exist; they clearly do. Instead, it's whether those obligations stop at GPLv2, or whether GPLv3ish requirements come into play as well. If (1) the FSF says that GPLv3 prevents Oracle from buying a "covenant not to sue," and (2) Oracle does not distribute a GPLv3 version of GRUB, the conclusion is that, in the FSF's mind, the "or any later version" license was equivalent to distributing under GPLv3 in the first place.

Or, to get closer to your language, "the conditions under which Oracle permits you to use the code" include a condition (from GPLv3) that Oracle will not buy a partial patent umbrella that excludes you.

Disagree

Posted Dec 13, 2010 10:26 UTC (Mon) by jmalcolm (subscriber, #8876) [Link]

I agree with most of what you say.

Sure, they need to "continue" releasing their code under GPLv2 if they want to distribute a version of GRUB that uses GPLv2 (which they do). However, they have no obligation to move to GPLv3 just because somebody else did that with their code.

Now, if GRUBv2 is GPLv3 only and Oracle wants to distribute that then this is another matter. Clearly now they would need to release their code under GPLv3. The point is that it would be them doing it voluntarily.

Distributing code you wrote under the GPL does not obligate you to do anything. "All" the text of of the GPL applies to the people that receive your code but not to you at all. A lot of people seem very confused by this and that is what I was trying to address.

So, when you say that you are releasing code as GPLv2+ you are saying that anybody who gets your code can only "distribute" the software if they license it as GPLv2 or higher (including GPLv3). It does not say that you need to re-release it under a later version of the GPL, any other license for that matter, or that you even need to keep making it available at all.

In this case, you are pointing out that Oracle not only releases GPL code that they wrote but in fact combines that code with code that they themselves received under the GPL. They are now bound by the terms of the version of the GPL that was used for the code they received.

My point is that they are bound by the license they "recieve" not the one they "offer".

Love what you do

Posted Dec 13, 2010 10:29 UTC (Mon) by jmalcolm (subscriber, #8876) [Link]

PS. I just wanted to say thank you for your great work and well thought-out reporting. It is very rare that I disagree with you. When I do, I am probably often wrong.

[Not this time though of course. :-) ]

Getting grubby with ZFS

Posted Dec 16, 2010 23:34 UTC (Thu) by Wol (subscriber, #4433) [Link]

The relicensing scenario is also possible with the FSF since they require copyright attribution. They could take all their code and simply relicense it under a closed source license if they wanted (however unlikely this is to occur).

Actually, I don't think they could. aiui, that would be a breach of the contract assigning them the copyright. And as such, if they did release it under a closed source licence, there would be the mother of all legal explosions as far as FLOSS is concerned ...

Cheers,
Wol

Getting grubby with ZFS

Posted Dec 8, 2010 0:30 UTC (Wed) by JoeBuck (subscriber, #2330) [Link] (15 responses)

I don't see anything in the Grub announcement suggesting that the Grub maintainers or the FSF believe that Oracle is bound by GPLv3 because they released code under a GPLv2-or-later license. GPLv2 contains language pertaining to patents. The preamble states

"We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all."

Clause 6 reads: "Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein." An attempt to restrict distribution of code that Sun already distributed by a patent action would appear to violate this: they would be adding an extra condition.

I think you're making a dangerous and incorrect argument in the article, suggesting that anyone using "or later" language is taking a serious risk. In fact, "or later" licensing can only add permissions to downstream users or developers: anything GPLv2 permits but GPLv3 forbids is permitted by a GPLv2-or-later license and vice versa.

IANAL so I can't say under what conditions a distributor can renege on the implicit promise made by extending someone else's GPLv2 work and distributing the result. But I think that the Grub distributors are on safe ground just based on GPLv2.

Getting grubby with ZFS

Posted Dec 8, 2010 1:52 UTC (Wed) by corbet (editor, #1) [Link] (12 responses)

I dunno. The text in the files involved says:

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

The very sentence which gives me the right to do things with the code (distribute, modify) under GPLv2 gives me the right to choose a later version if I want to. If GPLv3 gives me broader patent-oriented rights than GPLv2, are you really saying that one sentence does not allow me to claim those rights? The same sentence which allows me to claim GPLv2 rights?

Beyond that, the GRUB folks say:

If the patents covering GRUB are held by Oracle, they can't use them against GRUB users, and if they're held by other parties, the GPL provisions will prevent Oracle from paying a tax only for themselves, so if they will fight alongside the community instead of betraying it.

(Emphasis added). That's GPLv3 stuff; the GPLv3 drafters ran off to add that language specially after the Novell/Microsoft deal was announced. They clearly felt that GPLv2 did not prevent the "separate peace" sort of arrangement; they were quite clear about that at the time.

So the GRUB folks are assuming they have GPLv3-type protection. But I was unable to find any evidence that Sun/Oracle has ever distributed a GPLv3-licensed version of GRUB. Unless I've missed something (entirely possible - but please show me what it would be), the GRUB announcement is assuming GPLv3-type protection from a "v2 or later" release.

What am I missing?

Getting grubby with ZFS

Posted Dec 8, 2010 4:34 UTC (Wed) by JoeBuck (subscriber, #2330) [Link] (2 responses)

The text that you've set in bold face refers to section 7 of GPLv2.
7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
What this says is that if someone else holds a patent, Sun/Oracle can't buy protection only for themselves or their customers. Any patent license has to cover all recipients.

I guess that a theoretical alternative would be for Oracle to give up the right to use or distribute Grub altogether and then sue folks, but why should they do that, given that their Solaris customers are using it?

Getting grubby with ZFS

Posted Dec 8, 2010 11:42 UTC (Wed) by corbet (editor, #1) [Link] (1 responses)

So then why did Eben and company say that Novell/Microsoft was within the bounds of GPLv2, and why did they go out of their way to add special language prohibiting such deals in GPLv3?

Getting grubby with ZFS

Posted Dec 8, 2010 12:05 UTC (Wed) by AlexHudson (guest, #41828) [Link]

Because the patent stuff was offered by a third party; Microsoft indemnified Novell's customers but Novell was not bound by any agreement with Microsoft.

If Novell had bought a license from Microsoft which covered their customers, that would have been covered by the GPLv2 language.

Getting grubby with ZFS

Posted Dec 8, 2010 5:39 UTC (Wed) by ccurtis (guest, #49713) [Link] (8 responses)

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
The very sentence which gives me the right to do things with the code (distribute, modify) under GPLv2 gives me the right to choose a later version if I want to. If GPLv3 gives me broader patent-oriented rights than GPLv2, are you really saying that one sentence does not allow me to claim those rights? The same sentence which allows me to claim GPLv2 rights?

IANAL (but I play one on the internets) but it seems to me that what you're implying would contradict ex post facto and "grandfathering" concepts.

If the FSF releases a GPLv4 that says "if you modify and redistribute this software, you agree to also distribute all source to all software written by you" and if you then take GPLv2+ software and redistribute it under these new terms, only you (and those who get the software from you) should be held to the new terms - not the original author.

The specifics of what GPLv2 really says versus what GPLv3 clearly says I think are immaterial to this point - you can't engage in a contract whose terms are perpetually TBD. You can only bound yourself (and those who agree) to the new terms; you can't go back and rewrite history.

This is law, not X.org.

Getting grubby with ZFS

Posted Dec 8, 2010 9:53 UTC (Wed) by mjthayer (guest, #39183) [Link] (1 responses)

> If the FSF releases a GPLv4 that says "if you modify and redistribute this software, you agree to also distribute all source to all software written by you" and if you then take GPLv2+ software and redistribute it under these new terms, only you (and those who get the software from you) should be held to the new terms - not the original author.

More specifically, shouldn't a clearer distinction be made between the terms under which Oracle distributes the software (it obviously has to choose one of the available licences, I presume it is not legally possible for it to use several versions of the licence in one act of distribution) and the options they give the person they distribute the software too for further distribution? I assume they are distributing under GPLv2, but nothing stops them letting the people who get it from them redistributing under GPLv3 without it affecting Oracle in any way.

Similarly there have been complaints regarding VirtualBox that Oracle should be bound to the terms of the GPL and publish the sources to the closed source parts because they distribute it. However, my understanding is that Oracle doesn't distribute it under those terms (they own the copyrights and can do more or less what they want), but they do allow people who receive it to redistribute it under the GPL, minus the non-closed parts.

Getting grubby with ZFS

Posted Dec 9, 2010 4:29 UTC (Thu) by jamesh (guest, #1159) [Link]

Well, one difference is that the ZFS-patched version of grub-legacy is derived from the FSF code, so distributing it would require that they conform to the license of the upstream project.

So when they distributed their modified version of grub-legacy it must have been under at least one of GPLv2 and GPLv3. Both of these have some form of patent licensing language, so Oracle must have satisfied at least one of those clauses.

Getting grubby with ZFS - GPLv2 or later legality

Posted Dec 10, 2010 4:36 UTC (Fri) by giraffedata (guest, #1954) [Link] (5 responses)

it seems to me that what you're implying would contradict ex post facto and "grandfathering" concepts.

Those legal doctrines don't apply because they are about criminal law. A government can't make something illegal and then punish people who have already done it. A more fuzzy version of it also says a government cannot change the meaning of an existing contract unless the government makes it really clear it means to do so. But FSF isn't a government, so it doesn't apply.

What we should be thinking of is the rule that a contract isn't enforceable if it's too speculative at the time it is executed -- i.e. the parties couldn't reasonably predict its effect. A contract can certainly require actions that are to be determined later. For example, "tenant agrees to pay for all glass breakage," even though neither party knows what breakage that will be. Or actions dependent on someone else: "tenant shall replace smoke alarm batteries," even though the batteries have to be supplied by someone else and no one knows on what terms he will offer them at the time the tenant needs to acquire one. But you can go too far. "Tenant promises to pay any bill Landlord sends him" is a promise a court would not enforce.

I don't know how enforceable "GPL v2 or later" would be (and we aren't talking about a true contract here, but a conditional license), but assuming GPL v4 is in the same spirit as v2, I can see it being sufficiently predictable that the condition would be enforceable.

Getting grubby with ZFS - GPLv2 or later legality

Posted Dec 10, 2010 8:06 UTC (Fri) by jmalcolm (subscriber, #8876) [Link]

A very key point here is that it is not a contract--it is a license.

I know this is a grey area in some countries but I do not believe that the US is one of them.

Getting grubby with ZFS - GPLv2 or later legality

Posted Dec 12, 2010 18:47 UTC (Sun) by ccurtis (guest, #49713) [Link] (3 responses)

it seems to me that what you're implying would contradict ex post facto and "grandfathering" concepts.
Those legal doctrines don't apply because they are about criminal law.

I intentionally did not use the term "law" in my response. At the risk of veering off-topic, and fully admitting my non-lawyer status, and acknowledging that my political philosophy is not currently in vogue, I want to say that I think you're mistaken.

From the U.S. declaration of independence: "WE hold these Truths to be self-evident ... - That to secure these Rights, Governments are instituted among Men, deriving their just Powers from the Consent of the Governed, ..." My point here being that all law, especially that concerning government, is derived from contract law. Government itself is a contract among People.

Now, a contract is simply an agreement. A license is an offer of a "right to use," generally being bound by some terms. These terms form a contract (agreement). The terms of a license may change, at which point the licensee may opt not to agree to those changes, thus losing their license; but they cannot be held to new terms. Saying "licensee is responsible for all environmental damage they cause" is different from "licensee agrees to accept any new terms we wish to impose", whether those terms are "in the same spirit" or not.

The GPL is a somewhat strange beast in that the thing being licensed essentially owns itself. If the FSF (or any individual or organization) owns copyright over the entire body of software it's a bit clearer who the licensee and licensor are, but things get a little strange when you get your license to use from (e.g.) RedHat, itself a GPL licensee.

So all that to say, we should look at the actual text for this "GPLv2 or later", term:

"This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version."
I (Oracle), say "you can redistribute it" as long as you agree to GPL2 - or - you agree to GPL something later. How you choose to distribute it (GPLvX) does not affect how I Oracle (née Sun) have done so, which is GPLv2. That the GPLv2 allows you to choose any later version does not negate the fact that how I have distributed it is verbatim GPLv2.

Getting grubby with ZFS - GPLv2 or later legality

Posted Dec 13, 2010 9:16 UTC (Mon) by giraffedata (guest, #1954) [Link] (2 responses)

You don't say where you think I'm mistaken. Are you saying you believe the legal doctrines of ex post facto and grandfathering apply to the issue of a "GPLv2 or later" clause in a copyright license?

I intentionally did not use the term "law" in my response.

The only place I have ever seen the terms "ex post facto" and "grandfathering" used is with respect to law, so if you meant them some other way, you're right -- my response is completely inapplicable and in fact I can't respond.

I accept your view of all law as a contract. In that case, the criminal punishment part of that contract includes ex post facto restrictions -- we've agreed not to punish each other for things we did before we said it was wrong. But I don't know what that view of law has to do with applying those concepts to copyright.

A license is an offer of a "right to use," generally being bound by some terms. These terms form a contract (agreement).

You're confusing licenses and contracts too much. They really are distinct. First of all, replace "offer" with "grant". A contract is an offer and acceptance, but a license is just a grant. It's a one-way thing and there is no agreement involved. It is binding only on the licensor.

Some experts believe that in the matter of a GPL distribution of software, there is a contract (and some don't). But even they don't confuse the contract with the license. The license is something that one of the parties to the contract gives the other, as one term of the contract.

The terms of a license may change, at which point the licensee may opt not to agree to those changes, thus losing their license;

It doesn't work that way. Once a license is granted, it's granted. The permissions and conditions in it can't change. Of course, they can have a lot of variability built into them, like "this permission exists until licensor changes his mind." But they don't change.

And my point was that if a condition is too variable a court may find it invalid and read it out of the license, but the court will accept a lot of variability. (and again, I'm applying contract principles because I don't really know copyright law, but I know much of contract law is applied to copyright licenses).

I (Oracle), say "you can redistribute it" as long as you agree to GPL2

Again, you don't agree to GPL2. You actually perform the conditions of it, and then you can redistribute.

Getting grubby with ZFS - GPLv2 or later legality

Posted Dec 17, 2010 22:45 UTC (Fri) by ccurtis (guest, #49713) [Link] (1 responses)

Are you saying you believe the legal doctrines of ex post facto and grandfathering apply to the issue of a "GPLv2 or later" clause in a copyright license?

In effect, yes; insomuch that it, as a concept, seems a necessary prerequisite of a "meeting of the minds," applicable to any contract. Surely we agree that a contract can't be modified by a single party without the consent of the other.

[...] but a license is just a grant. [...] It is binding only on the licensor.

I assume you mean licensee. If not, I am simply incredibly confused about this whole law thing altogether.

The license is something that one of the parties to the contract gives the other, as one term of the contract.

Whether a license is granted on the terms of a contract, or whether one is bound to license terms by performing its conditions, it seems to me that there exists some form of contract, either expressed or implied.

My terminology may be all over the map and I may very confused about what law actually is, but it seems unfathomable to me that the law would allow a Heisenberg-esqe agreement where the supplier of a piece of software is bound to unspecified conditions based on the actions of the licensee. (Specifically in the sense that a licensee says, "Ooh, look at this or later clause. I'll take it under the 'vN' terms; now allow me free access to all your patents.")


The terms of a license may change, [...]
It doesn't work that way.[...]

True. I was thinking that licenses tend not to be granted in perpetuity. Software generally is, but licenses to other "IP" tend to be term-limited (such as a license to use a brand), with periodic renewal. At the point of renewal, of course, terms can change...

Getting grubby with ZFS - GPLv2 or later legality

Posted Dec 18, 2010 2:28 UTC (Sat) by giraffedata (guest, #1954) [Link]

Are you saying you believe the legal doctrines of ex post facto and grandfathering apply to the issue of a "GPLv2 or later" clause in a copyright license?
In effect, yes; insomuch that it, as a concept, seems a necessary prerequisite of a "meeting of the minds," applicable to any contract. Surely we agree that a contract can't be modified by a single party without the consent of the other.

Then I think what you're really looking at is the doctrines behind ex post facto and grandfathering. I like to think all legal doctrines are based on a consistent set of underlying principles, so I have no problem saying the underpinnings of ex post facto also stop people from unilaterally defining contract terms after they're written. But as the terms are normally used, "ex post facto" and "grandfathering" refer to the effect of those principles in other areas (to wit, criminal law).

[...] but a license is just a grant. [...] It is binding only on the licensor.
I assume you mean licensee. If not, I am simply incredibly confused about this whole law thing altogether.

Nope, I meant binding on the licensor, and that's a crucial point. A license waives the licensor's rights under copyright law. Having given a license, he is bound to waive those rights. He can't change his mind later and demand royalties. The licensee, on the other hand, isn't bound to anything. He's licensed to copy, but he doesn't have to copy. Unlike a contract, a license is a one-sided thing.

I know what you're thinking. The GPL licensee is required to make source code available. Well, no he isn't. Unless he makes provisions for source code, he isn't a licensee. The license doesn't exist. It's a conditional license.

If you think that's just two ways of saying the same thing, think what happens if I distribute "GPL" code you wrote, without source. If we had a contract, you'd be able to get a court to force me to distribute source code (or financial equivalent). But since all there is is your offer of a conditional GPL license, and I didn't meet it's conditions, so I don't have any license, all I am is a copyright violator. I broke a rule Congress made, not one you and I made. Congress said in that case you can make me pay royalties, or possibly have me put in jail, but you can't make me distribute source code.

... where the supplier of a piece of software is bound to unspecified conditions based on the actions of the licensee.

Can't happen. Conditions are for the licensee, not the licensor (supplier). All the licensor stands to lose by saying "or later" is his copyright. E.g. GPL 4 might say source code is optional and now the supplier's code is flying around doing nothing to advance free software in spite of the supplier's wishes.

If GPL 4 adds a "contribute all your patents" condition, that just means nobody will choose to be a licensee under GPL 4. It doesn't cost people who have already distributed software with an "or later" clause anything.

Getting grubby with ZFS

Posted Dec 8, 2010 9:16 UTC (Wed) by pbonzini (subscriber, #60935) [Link] (1 responses)

"or later" licensing can only add permissions to downstream users or developers: anything GPLv2 permits but GPLv3 forbids is permitted by a GPLv2-or-later license and vice versa.
IANAL, but it is not at clear to me that this is the case when you create derivative works by mixing GPLv2+ and GPLv3 code. What you say is certainly true if you separate again the GPLv2+ parts and distribute them only, but I'm not sure about what happens when you distribute the two parts together.

Getting grubby with ZFS

Posted Dec 10, 2010 8:09 UTC (Fri) by jmalcolm (subscriber, #8876) [Link]

The only legal way to combine GPL 2+ code with GPL3 code is to distribute under the GPL3. So, the entire derived work would have to be GPL3 licensed.

This is the license that your new derived work would be distributed under. However, this does not somehow force the party that distributed the GPL 2+ code to begin with to switch to GPL3 themselves.

Getting grubby with ZFS

Posted Dec 8, 2010 1:30 UTC (Wed) by cyd (guest, #4153) [Link] (2 responses)

It should be noted that the FSF's copyright assignment guidelines are not inflexible. Emacs, for instance, contains code and files that are (C) the Japanese government, the W3C, the Unicode Consortium, etc. Exceptions are handled on a case by case basis, but they're not really rare.

Getting grubby with ZFS

Posted Dec 8, 2010 1:43 UTC (Wed) by JoeBuck (subscriber, #2330) [Link]

They are a lot less flexible with code that will be linked into the application that is not part of a standard library; ordinarily they want to own that.

Getting grubby with ZFS

Posted Dec 9, 2010 10:50 UTC (Thu) by wingo (guest, #26929) [Link]

As another example, Bazaar is GNU but its copyright is assigned to Canonical. The Canonical contributor agreement that you have to sign to get code into GNU Bazaar even expressly allows for your contribution to be used in proprietary software.

So the FSF is indeed flexible when it wants to be.

(FWIW, I consider the bzr case to be a fairly important error that needs to be corrected.)

<off-topic> Porting filesystems to different OS </off-topic>

Posted Dec 8, 2010 5:18 UTC (Wed) by nikanth (guest, #50093) [Link]

Filesystems represent an on-disk format. And filesystem code on how to handle the disk depends on the on-disk format, as well as, how the OS deals with filesystems i.e., the VFS, the page-cache techniques, write-back strategy, memory management etc.. Unless all OSes(unices?) are almost the same, using the same code across OSes with minimal changes may not be optimal?

Getting grubby with ZFS

Posted Dec 8, 2010 7:20 UTC (Wed) by iabervon (subscriber, #722) [Link]

I don't know how modular GRUB's code actually is, but I think it would be hard to write a maintainable bootloader which supported a bunch of different filesystems and didn't have the code for handling each filesystem pretty well isolated from the code that does everything else; this would mean that any likely infringement would infringe the various parts that the FSF owns, unless someone wants to steal just the ZFS code for their own ZFS reader of some sort. And it that situation, I don't think the FSF would care particularly much, since they could just steal the out-of-tree version, and Oracle would presumably take care of any necessary enforcement.

Having important files that were copyright FSF become copyright FSF, Oracle might be an issue, since it requires the legal system to make a conclusion about which parts of the file the FSF actually has enforcement rights to, but if each part is clearly marked, and the FSF can just write off the parts they don't own and still make a good case, it's not so big a deal.

Getting grubby with ZFS

Posted Dec 8, 2010 9:54 UTC (Wed) by jamesh (guest, #1159) [Link] (4 responses)

The quoted announcement email also states that they believe that the next version of OpenSolaris will ship with GRUB 2.

If that happens, then Oracle will have explicitly distributed the code in question under the GPLv3, removing the possible ambiguity (not that I'm convinced it exists here).

Getting grubby with ZFS

Posted Dec 9, 2010 2:47 UTC (Thu) by brouhaha (guest, #1698) [Link] (3 responses)

Last I heard, OpenSolaris was dead, and thus there isn't going to be a "next version" of it released. Am I missing something?

Getting grubby with ZFS

Posted Dec 9, 2010 3:41 UTC (Thu) by k8to (guest, #15413) [Link]

Also curious.

Getting grubby with ZFS

Posted Dec 9, 2010 4:34 UTC (Thu) by jamesh (guest, #1159) [Link] (1 responses)

My mistake. The exact text from the linked announcement is "Our understanding is that next version of Solaris will ship with GRUB 2".

Getting grubby with ZFS

Posted Dec 10, 2010 8:14 UTC (Fri) by jmalcolm (subscriber, #8876) [Link]

Your original point remains valid though. If Oracle ships GRUB2 with the new code then they are explicitly licensing the ZFS stuff under GPL3.

"I forgot to run LILO"

Posted Dec 9, 2010 11:18 UTC (Thu) by nofpu (guest, #56044) [Link] (15 responses)

"I forgot to run LILO and my new kernel won't boot"

is there some inherent limitation of LILO that prevents the 'automatic' MBR writing that grub spoils us with? I miss 'lilo' because it is not called 'grub'.

"I forgot to run LILO"

Posted Dec 9, 2010 11:30 UTC (Thu) by nix (subscriber, #2304) [Link] (14 responses)

This is a fundamental architectural difference, not something you can change easily. LILO's bootloader contains explicit references to the location of a 'map file' which itself points at the kernel's location on disk: both must change whenever the kernel is rewritten. GRUB doesn't need a hardwired reference to the kernel's location, because it understands filesystem layouts.

Disclaimer: I'm still using LILO because, well, it still works perfectly well for my purposes and I have better things to do than mess with bootloaders. Also, last I encountered it, all the GRUBs required deep magic to dump its bootloader on both disks of an md-raid-1 set and to boot from kernels on such an array. This may well have changed, as that was years ago.

I have never once forgotten to rerun LILO because my kernel building script does it for me automatically (and, no, this doesn't mean I compile the kernel as root). Doesn't everyone's?

"I forgot to run LILO"

Posted Dec 9, 2010 21:07 UTC (Thu) by dlang (guest, #313) [Link] (10 responses)

I run lilo on my servers as I've been bit one too many times by grub trying to figure things out, but not getting it right.

If you have a simple desktop with a single drive, grub 'just works', but if you have multiple drives of different types, and your boot drive is something like /dev/sdm, grub won't even look at the drive.

"I forgot to run LILO"

Posted Dec 10, 2010 11:44 UTC (Fri) by stevem (subscriber, #1512) [Link] (9 responses)

ACK. lilo is simple and so has simple failure modes - it's easy to get things right repeatably.

Grub 1 broke too many times for me; when I looked at the source to try and fix a bug I was so scared that I deleted the source and switched back to lilo for all my systems.

Grub 2 is slightly better, but still *far* too complex for my liking.

There are now new maintainers for lilo, so I'm hopeful for continuing maintenance. Otherwise, extlinux looks like a good simple replacement.

"I forgot to run LILO"

Posted Dec 10, 2010 12:27 UTC (Fri) by etienne (guest, #25256) [Link] (8 responses)

> Otherwise, extlinux looks like a good simple replacement.

Ever tried Gujin (at sourceforge)?
Either the full blown interface you get when installing the whole package, or the new "boot the newest vmlinuz/initrd you found in /boot and do not ask any question" mode?
In short, to test, install the precompiled package associated with your distribution, and reboot: you are running the main Gujin bootloader.
Once rebooted, desinstall the package, it restores the previous bootloader automatically.
To test the new "do not ask any question mode" (and if you only have a single Linux distribution on your PC), before uninstalling the package, type on a terminal as root:
/sbin/gujin -t tinyext4.bin /boot/minigujin.ebios
and reboot, it will loads Linux without any question.
To remove that new simplified mode, just type as root:
/sbin/gujin --remove /boot/minigujin.ebios
That will bring you back to the previous bootloader, i.e. full Gujin interface, that you can remove if you want to by uninstalling the package.

Gujin do not work if your kernels are on a LVM slice, and it only recognises few filesystems, but ext*fs, vfat or iso9660 are fine.

"I forgot to run LILO"

Posted Dec 11, 2010 9:03 UTC (Sat) by dlang (guest, #313) [Link] (7 responses)

how does it deal with complex environements (lots of drives, multiple partitions with installs on them, etc)

this is where grub falls down and the simplicity of lilo makes it still usable.

lilo may not be simple to setup in such a situation, but it's simple enough that it's failures are simple and so you can fairly easily work your way through the issues to get a working system. With Grub it's hard enough to figure out what grub is really having problems with (what's it trying to do exactly??) that the result is (on a complex configuration) it crosses over to the unusable category.

"I forgot to run LILO"

Posted Dec 13, 2010 13:10 UTC (Mon) by etienne (guest, #25256) [Link] (4 responses)

I would say, it depends what you call lots of drives.
Things like 4 to 8 drives (whatever their BIOS numbers, i.e. IDE or USB) would be treated without problems.
The compiled-in limit are 10 IDE interfaces, 15 disks, 64 partitions per disks (including extended partitions, i.e. 34 useable).
The real limit is that the number of "ways to boot", i.e. kernels and DOS/windows MBRs should be lower than 60, but it is true that if you want to analyse the max number of filesystems to search for all possible kernels and initrd, it will start slowly.

There is for instance no problem having Fedora, Ubuntu and debian distributions in both 32 and 64 bits installed on the same PC (i.e. 6 distributions in 6+ different partitions), plus kind of 10-20 iso images of live CD distributions.
One problem with other bootloaders is that when you boot from a USB key, some PC shift all BIOS drives numbers, so that number cannot be safely written in a static configuration file.

For instance, if you have a distribution on a USB disk, distribution containing it own /boot/gujin.cmd to supply its own command line to its own kernel, you can boot your PC with or without this disk connected; Gujin will automatically recognise that way to boot and display a line in the menu.
It doesn't matter if Gujin came from the hard disks or the USB disk.

"I forgot to run LILO"

Posted Dec 15, 2010 4:44 UTC (Wed) by dlang (guest, #313) [Link] (3 responses)

my home server has 3 SCSI drives,2 SATA drives, and 12 IDE drives, at work I've had single systems with up to 46 drives visible to the OS (16-18 drives is fairly common in a 3u chassis)

your description of the many-OS system can still be done with very few drives

"I forgot to run LILO"

Posted Dec 15, 2010 10:39 UTC (Wed) by etienne (guest, #25256) [Link] (2 responses)

> my home server has ...

Well, the 15 disks limit was done because it is said that some BIOS would have a problem - and BIOS disk 0x90 was the same as BIOS disk 0x80...
But as long as your vmlinuz/initrd pair is located in one of the first 15 disks Gujin should still work.
Moreover, I assume that you start your system with some disk in "power on standby mode" - or else you have a massive power supply; those disks will not contain the /boot partition.
Gujin has been tested with disks in "power on standby mode".
With such a system, if your main MBR is corrupted and you try to boot from a USB key, and that key is mapped by the BIOS as disk 0x80 (shifting all other disks numbers by one), your preconfigured mapping in either Grub or LILO will be wrong (trying to load from the wrong disk).
Increasing the default number of disk supported in Gujin is a single "#define NB_DISK" change, maybe I'll increase the default.

> your description of the many-OS system can still be done with very few drives

One drive is enough, but the complexity to manage the six Grub configurations in six partitions is a nightmare...

"I forgot to run LILO"

Posted Dec 15, 2010 19:53 UTC (Wed) by dlang (guest, #313) [Link]

actually no, my boot disk is one of the SCSI drives, which the system puts out at drive /dev/sdo (or thereabouts).

the IDE drives are connected to 3-ware raid cards (but not using the raid features of the cards), not directly to the motherboard.

"I forgot to run LILO"

Posted Dec 20, 2010 13:58 UTC (Mon) by nix (subscriber, #2304) [Link]

Most controllers which permit the attachment of >3 disks also have a mode (often the default), whereby the controller powers up the drives in sequence, not simultaneously (but still powers them all up in POST, rather than having some strange mode where it powers only some of them up until receiving a request from software to power up the rest).

"I forgot to run LILO"

Posted Dec 13, 2010 15:26 UTC (Mon) by nix (subscriber, #2304) [Link] (1 responses)

... partitions on RAID arrays...

Not being able to boot off LVM might be annoying, as LILO can boot off LVM as long as it's not also RAIDed, but not being able to boot off any live RAID-1 partition would be a killer.

(disclaimer: horrible flu so have not even looked at gujin, preferring to randomly pontificate: this *is* the internet).

"I forgot to run LILO"

Posted Dec 15, 2010 10:45 UTC (Wed) by etienne (guest, #25256) [Link]

Well, you can boot RAID-1 if the partition type is not set to "linux raid auto" - but I bet that is not the answer you want.
Dectecting RAID would not be difficult - after all Gujin already open filesystems inside ISO/FAT/Ext*fs filesystem images, just time needed to code and test - patch welcomed.

"I forgot to run LILO"

Posted Dec 17, 2010 16:56 UTC (Fri) by Duncan (guest, #6647) [Link] (2 responses)

> Disclaimer: I'm still using LILO because, well, it still works perfectly well for my purposes and I have better things to do than mess with bootloaders.

Understood. I continued for quite some time with LILO for that reason, tho I eventually switched to GRUB... at the same time I switched to md/RAID, FWIW.

> Also, last I encountered it, all the GRUBs required deep magic to dump its bootloader on both disks of an md-raid-1 set and to boot from kernels on such an array. This may well have changed, as that was years ago.

As hinted above, that has indeed changed. FWIW this is still grub-1 (0.97 with various distribution patches) I'm discussing here as I've not upgraded to grub2 yet.

Basically, it's a simple matter of first copying the stage-X and filesystem module files to /boot/grub if necessary (that's done using normal copy procedures, so if it's an md/RAID-1, just make sure it's mounted and cp to it as normal), then for each physical device, start the interactive grub session (the grub-install script isn't smart enough to figure it out), tell grub where to point the mbr install at when you install it using the root directive, do that actual install using the setup directive, and exit the interactive shell. So something like this:

grub
root (hd0,2)
setup (hd0)
exit

grub
root (hd1,2)
setup (hd1)
exit

...

(grub1 is zero-based and uses hd notation for drives other than floppies regardless of sata/scsi/ide/usb-thumb/whatever so for that example, /boot is on an md/RAID-1 composed of, assuming we're not dealing with legacy non-libata ide) /dev/sda3 and /dev/sdb3.)

Then you ensure your emergency boot disk is available just in case, and reboot, disabling all drives but the one you want to test. By disabling all drives instead of simply changing the BIOS boot selector, you catch any mistakes such as root (hd0,2) setup (hd1), pointing the mbr of the second BIOS drive at the third partition of the first BIOS drive, instead of its own third partition.

While that might be "deep magic" for the point-n-click types not comfortable at the command line, it should be fine for an admin comfortable with typical admin tasks such as installing their own kernels and editing their own bootloader configs.

"I forgot to run LILO"

Posted Dec 21, 2010 18:30 UTC (Tue) by nix (subscriber, #2304) [Link]

I have to say, compared to

boot = /dev/md0
raid-extra-boot

in lilo.conf, that is pretty bloody hideous. It is plain that GRUB has no actual support for this use-case at all, so you're having to in effect reimplement it by installing multiple GRUBs by hand, one in each boot sector. And if you typo you have a silent failure you won't notice until it's too late, while with LILO the stanza above always works (assuming your boot RAID-1 array is /dev/md0 that is).

I'll give it a miss.

"I forgot to run LILO"

Posted Dec 27, 2010 11:25 UTC (Mon) by mfedyk (guest, #55303) [Link]

this ends up only covering some failure modes. what happens if hd0 is removed? on the next boot what was hd1 is now hd0, but the mbr says read from hd1, so the boot fails.


Copyright © 2010, Eklektix, Inc.
This article may be redistributed under the terms of the Creative Commons CC BY-SA 4.0 license
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds