fontforge / fontforge

Free (libre) font editor for Windows, Mac OS X and GNU+Linux
http://fontforge.github.io/
Other
6.13k stars 681 forks source link

Clean up Licensing #4077

Open skef opened 4 years ago

skef commented 4 years ago

Apparently there is a desire to eventually get FontForge back to a BSD-compatible state. This is something the project has recently made great, but seemingly un-noted, progress towards. And the current state of the messaging is a little embarrassing.

Given the desire, this is what the current LICENSE file says about GPL:

These files were created under the GPL License:

fontforge-20120731-b/
aclocal.m4      configure.dynamic       configure.static.in
config.guess    configure.dynamic.in    ltmain.sh
config.sub      configure.in            Makefile.dynamic.in
configure       configure.static        Makefile.static.in

fontforge-20120731-b/fontforge:
Makefile.dynamic.in     Makefile.static.in

fontforge-20120731-b/gdraw:
Makefile.dynamic.in     Makefile.static.in

fontforge-20120731-b/gutils:
giomime.c       Makefile.dynamic.in     Makefile.static.in

fontforge-20120731-b/inc:
fontforge-config.h.in

fontforge-20120731-b/plugins:
ANALYZE_MAP.COM Makefile.in

fontforge-20120731-b/Unicode:
Makefile.dynamic.in     Makefile.static.in

Obviously almost all of these have been removed by @jtanx's CMake work.

fontforge-config.h.in now claims a BSD license at the top, in contrast with the statement in LICENSE, but has commented out lines at the end that presumably aren't BSD, strictly speaking. Perhaps those could be removed?

giomime.c is now g_giomime.c and may be the only remaining stumbling block. The authors, and therefore copyright holders, of each commit from when @JoesCat moved the function out of giomime.c are:

Suppose we add a section to LICENSE for copyright holders of g_giomime.c to re-license their portion as BSD by adding a statement of agreement via a PR. Then we ask each author above to do so. Then, assuming that has happened, we change the license at the top of the file to BSD with a note that it is also available under GPL and pointing to the LICENSE file notations. Assuming the Open Group License is more or less BSD equivalent, would the project then be validly BSD, at least by its own standards?

jtanx commented 4 years ago

For clarification, all my contributions can be taken to be under the original BSD license or whatever permissive license is most suitable. I also support trying to relicense FontForge under the more permissive license over GPLv3.

But I think we're going to have more problems than just that giomime file, if you search for GNU:

$rg  GNU.*General -l
COPYING.gplv3
fontforge/bezctx_ff.c
gdraw/ggdkdrawP.h
gutils/g_giomime.c
fontforgeexe/fontlint.pe
inc/ffglib.h
fontforgeexe/sfundo.c
fontforgeexe/sfundo.h
fontforgeexe/wordlistparser.c
fontforgeexe/wordlistparser.h
doc/html/faq.html
pycontrib/FontCompare/fontcompare
pycontrib/FontCompare/setup.py
doc/html/index.html
tests/fonts/NimbusLGCUni-Regular.sfd
Packaging/debian/cp-src/copyright
pycontrib/FontCompare/fc/BitmapHandler.py
pycontrib/FontCompare/fc/DocCompare.py
pycontrib/FontCompare/fc/FontCompare.py
pycontrib/FontCompare/fc/GlyphConsistency.py
pycontrib/FontCompare/fc/main_ui.py
pycontrib/FontCompare/fc/mockify.py
pycontrib/FontCompare/fc/__init__.py
pycontrib/FontCompare/unittests/unittests.py
khaledhosny commented 4 years ago

All my contributions since the license change (basically since George Williams left) are under GPLv3 and I have no desire to relicense them and I would no longer contribute to FontForge if it were to be relicensed under a non-copyleft license.

ctrlcctrlv commented 4 years ago

Noted. I still think this is worth pursuing. It was always in my mind inevitable that in the pursuit of reversion to BSD we'd need to either remove or rewrite some people's contributions, either due to refusal to relicense or inability to make contact.

jtanx commented 4 years ago

fontforge-config.h.in now claims a BSD license at the top, in contrast with the statement in LICENSE, but has commented out lines at the end that presumably aren't BSD, strictly speaking. Perhaps those could be removed?

I rewrote fontforge-config.h myself, so I'd say the license is accurate. The reason for that GPL license was probably because the .in file used to be generated by autoconf, which is now no longer the case.

but has commented out lines at the end that presumably aren't BSD, strictly speaking

These would have been written by GW - https://github.com/fontforge/fontforge/blob/v20120731-b/fontforge/configure-fontforge.h which is BSD licensed.

skef commented 4 years ago

All my contributions since the license change (basically since George Williams left) are under GPLv3 and I have no desire to relicense them and I would no longer contribute to FontForge if it were to be relicensed under a non-copyleft license.

See, this is what I was talking about over in #677. Is the statement in the LICENSE file alone enough to mean that this isn't @khaledhosny's decision when it comes to other contributions, because the license at the top of the file governs the contribution? What happens when copyright holders raise objections like this?

If every contribution in the past 6 years is maybe-GPL and maybe-BSD the whole idea of a switch seems pretty hopeless.

jtanx commented 4 years ago

From LICENSE:

  • Contributions to existing files must be made under the existing license for that file
skef commented 4 years ago

Right, so the question is: if someone never read that and made a contribution, does it apply?

jtanx commented 4 years ago

Right, sorry I misread your question.

I dug back, and it's been there since 2012 (#165), which was around where it was relicensed as a whole to GPLv3.

I'm not a lawyer of course, but I'd say so; the wording is pretty clear cut.

ctrlcctrlv commented 4 years ago

Obviously it applies because they're releasing their contributions under the license we've included.

skef commented 4 years ago

Well, if that's right, and the project is prepared to refer any contributor who thought the arrangement was different to that language, let me go through the rest of this stuff.

Only the g_giomime.c and @monkeyiq files on here are non-trivial. The latter we would have to work out what the rights are or ask him to relicense.

jtanx commented 4 years ago

gdraw/ggdkdrawP.h: Use of G_GNUC_PRINTF(5, 6) for LogEx(). Seems trivial to work around

I think this was just an issue with my search, I was searching for GNU.*General which matched

GNUC_PRINTF(5, 6);   // General

glib is LGPL licensed, so it should be fine as is.

giomime should be trivial enough to rewrite.

frank-trampe commented 4 years ago

Per Fred's comment, the top-level license is necessarily derivative of the per-file licenses. It was only possible to switch to GPLv3 because it was compatible with the per-file BSD licenses. It did not change the actual licenses on those files; it just stated terms (non-exclusive) under which the project could be used and established a default for the future.

ctrlcctrlv commented 4 years ago

So this is all good news, we can switch soon! We should immediately send a message to the fontforge-devel list reminding people of this. Then we should get a PR through which will switch the "main" license back to the GW BSD license.

Exciting!

frank-trampe commented 4 years ago

@khaledhosny, could you explain your root concern here? To be clear, the top-level license is mostly nominal as I stated before. Even after a reversion of that license to the original BSD license, you would still be able to use any code in the project under a license compatible with the file in which it is located. Specifically, you would still be able to use and to distribute the entire project under GPLv3 terms, as far as I can tell, or this change would at least not make you unable to do so.

skef commented 4 years ago

So the overall legal argument might be restated this way:

  1. The project was basically entirely BSD in the GW era, which ended around 2012.
  2. At that point there was a switch to distributing under GPL, which was possible because BSD compatible with that license.
  3. At the same time, the top-level LICENSE file clarified that contributions to individual files would continue to be governed by the license appearing at the top of each file.

Therefore even if it might be possible to switch from BSD to GNU and have future contributions to a given file then be GPL licensed, FontForge was explicit about the file-level license situation from the start of the GPL phase.

Therefore (the argument goes) all that is necessary now to distribute under BSD again is to address whatever files carry a GPL or otherwise non-BSD-like license. Which is probably pretty close to the list above.

frank-trampe commented 4 years ago

@skef, that all seems right to me.

I'm in bed and can't do a line-by-line blame review, but most of Ben's code was collab stuff (removed) and word list parser (heavily rewritten since), right? Is there actually significant code of his remaining?

skef commented 4 years ago

@frank-trampe what's confusing about his message? He indicated he prefers contributing to copyleft projects, probably because he supports the kind of restrictions that @twardoch objects to. That's sort of the point of "full" GPL.

skef commented 4 years ago

@frank-trampe I listed the five files as I described them: inc/ffglib.h, fontforgeexe/sfundo.c, fontforgeexe/sfundo.h, fontforgeexe/wordlistparser.c, fontforgeexe/wordlistparser.h. All of these carry GPL license notices and Ben copyrights. Given the top-level license file any subsequent changes will also be GNU, so we'd have to look at those.

frank-trampe commented 4 years ago

@skef, I know it's unlikely, but there are often strategic calculations on other priorities that inform a preference for copyleft license rather than a general distaste for permissive licenses. (The CDDL on the Solaris kernel is my favorite example of this.) I want to be absolutely sure that there's not a make-everybody-happy button here before I give up on its existence.

By the way, maintainers of two other rather significant projects (one commercial and one permissively licensed) have previously expressed strong interest in using functionality in FontForge, particularly the overlap removal, should it ever adopt compatible licensing terms.

skef commented 4 years ago

@frank-trampe that's reasonable. And I shouldn't speak for @khaledhosny.

I've "blamed" those five files. It's mostly Ben with subsequent fixes by core project members with a few stray lines from others. If @JoesCat is willing it shouldn't be a big deal assuming we can deal with the Ben authorship one way or another.

ctrlcctrlv commented 4 years ago

I would argue that switching this project to GPL was pretty much a hijacking. That was never George's intent. In 2012 99% of the code was George's. For twelve years, at that time, BSD was in use.

It's our consensus to bring it back and that the change was (a) not positive; I'd say some of us even agree the change was (b) done in an underhanded way.

frank-trampe commented 4 years ago

I was similarly not happy about it at the time.

ctrlcctrlv commented 4 years ago

Certain people pretty much took advantage of the fact that the project's governance was in limbo to impose their own vision on the project which was never George's, and which no rational observer would have believed to have been George's.

frank-trampe commented 4 years ago

@skef, regarding sfundo files, are you sure a lot of that wasn't just moved out of other existing files?

twardoch commented 4 years ago

Contributing to code without reading the license terms is like signing a contract without reading it. It's still binding, because the assumption is that you're a sane individual who is resposible for your own actions.

I think that in software development, there is a common understanding that the legal structure follows the physical organization of the code. So if something is in a file, and that file has a particular license, then the contributed changes also fall under this license. If there is a folder A and subfolders and there is no explicit licensing info in the sub-folders or files with, but there is a license attached to that folder A, that license applies to the files and subfolders inside that folder A.

It's a simple cascading logic, similar to how CSS works. And licenses are really just a system of granting and removing rights, or of permissions and limitations — that ultimately could be “compiled” in the software sense.

I never thought of law as much different as programming code. It's code that is interpreted and executed by human brains, but could also be made to be interpreted and executed by machines.

In my view, the license of a piece of a software program is very much an integral part of the program. If there are two pieces of software that cannot be made interoperable due to legal restrictions, it's exactly the same as if those two pieces of software were worth in two different programming languages that aren't compatible. In a way, it's very similar, both are “technical” problems.

Personally, I’d very much applaud the effort of consolidating the FontForge license back into the form that expresses the spirit and intentions of the program’s original creator, George Williams. This current mixed setup feels to me like when some software is written in C++ but suddenly gets contributions in Python and JS that make a complex beast with tons of dependencies out of something originally pure.

I think that creators of original work have full rights to set the permissions and limitations any way they feel. But I've always felt that when you're adapting, extending and maintaining, it's most ethically correct to follow the original author’s intentions — unless there are some very good reasons why additional limitations or additional permissions are added.

I have not followed the FontForge project close enough to know what the rationale behind introducing additional limitations via GPL3 was, and what benefit it gave to the software itself. Perhaps there was some benefit I hadn’t seen.

But because I like simplicity and predictability, I’d welcome it if FontForge were licensed in a simple and predictable way, i.e. the same license, compatible with the original author’s intent.

Optional components that, ideally, exist in separate repos, and which can be omitted when building FontForge, could of course be licensed any other way.

skef commented 4 years ago

@ctrlcctrlv some vendor who wants to include parts of FontForge in a product based on its BSD licensing is not going to want to hang their legal hat on our views about GW's intent.

@frank-trampe They don't seem to have been "moved" in the sense that git blame -C reveals a prior location. So they're likely rewritten enough to reset the copyright and therefore the licensing.

frank-trampe commented 4 years ago

Agh, okay. I'll look at those a bit more tomorrow.

ctrlcctrlv commented 4 years ago

I think we should send this letter to fontforge-devel:

Greetings: We write to remind contributors that the main license of the FontForge project has always been a BSD-compatible license. Most contributions are under this license. In 2012, when George left the project, certain individuals who stepped in to fill the power vacuum imposed a GPL dual-licensing scheme. This is because the BSD is GPL-compatible, but GPL code is not BSD-compatible. Even now, in 2019, however, only a very small minority of commits are licensed only under the GPL license. We announce: * It is our goal that the code be once again consist of 100% BSD-licensed code. * No pull request accepted after the date of this announcement may be GPL-only. Certain individuals may get an e-mail from us asking them to kindly re-license their contributions under the original BSD license. Failure to do so may result in your changes being removed. This announcement summarizes the consensus view of the majority of FontForge's active maintainers.
skef commented 4 years ago

I suppose the summary point, though, is that this looks very tractable already if a certain small set of people play ball.

ctrlcctrlv commented 4 years ago

From my view of things, the most important vote right now is @JoesCat's. If he agrees we could be 100% BSD again by the New Year.

jtanx commented 4 years ago

I'm not sure about that, I don't see how this can be trivially undone without getting permission from @monkeyiq:

inc/ffglib.h, fontforgeexe/sfundo.c, fontforgeexe/sfundo.h, fontforgeexe/wordlistparser.c, fontforgeexe/wordlistparser.h: 2013-5ish @monkeyiq stuff. If this was payed work then it shouldn't be the author's decision how it's licensed, but that doesn't mean it isn't his decision.

ctrlcctrlv commented 4 years ago

@skef and I agreed in the past that the word list parser needs rewriting, so we just have to bump up the priority of that

ctrlcctrlv commented 4 years ago

By all means though let's get @monkeyiq to agree if we can

skef commented 4 years ago

@ctrlcctrlv if the nominal powers that be want to do this, then the remaining problem isn't a vote, it's getting each remaining copyright holder of a line in a GNU file to relicense, or alternatively to otherwise-implement the code.

frank-trampe commented 4 years ago

@ctrlcctrlv, we may get more volunteers if we word the note to the mailing list a little more plaintively. I'm too tired to write anything right now, but I will post a draft tomorrow.

twardoch commented 4 years ago

some vendor who wants to include parts of FontForge in a product based on its BSD licensing

...or some vendor who wants to contribute to FontForge or fund contributions to FontForge, while entertaining the notion that they potentially could include parts of it in a product based on its BSD licensing in future.

skef commented 4 years ago

If I feel like it I may prepare a PR this evening that will get the LICENSE file sections current and create an area for "relicensing statements". I'm presuming that a PR submitted by the same github user, approved without squashing, will be as good a record as what we have for copyright now, and therefore sufficient.

frank-trampe commented 4 years ago

That seems logical to me. If it's sufficient to accept the original license from the contributor that way, we can surely take amendments in the same fashion.

twardoch commented 4 years ago

@frank-trampe what's confusing about his message? He indicated he prefers contributing to copyleft projects, probably because he supports the kind of restrictions that @twardoch objects to. That's sort of the point of "full" GPL.

Yes, I totally get it. I prefer to steer my own resources and those I have some influence of towards the projects that don't impose many restrictions today onto my potential use of those projects in future in ways that I haven't perhaps even thought of yet.

From my point of view, that's a fair allotment of my resources. So I personally prefer permissive models where I don't have to track my legal obligations (i.e. restrictions) ad infinitum, or where I can keep those obligations at the minimum. I already have numerous subscriptions for electricity, gas, internet and software, and I prefer to keep that list short. 🙂

Others have other preferences, and I fully respect that.

JoesCat commented 4 years ago

Hi everyone - seems the messages are flying fast and furious at the moment here. My first suggestion - read the laws on copyright, I would suggest US Copyright law. Every single license regardless of what it says, goes back to copyright law. Once you understand Copyright Law (first), then the rest makes sense.

For example, take libspiro as a good example. This all started from libspiro 20071029, based on Raph's work. Raph re-introduced his code under a new license 20071029. This change is 100% legal and okay, because Raph was 100% author for "all" that code in 20071029, and he is legally entitled to put it under whatever licence he wants, and even multiple licences if he wishes.

The Libspiro fork we have here - no - cannot be done, even Raph cannot change the license himself, with one exception. The only way anyone can change the licence for this fork is to go to all authors involved in this fork, request everyone's permission - everyone must agree. Even for a small library with very few authors, this can still be a very difficult task to do. The alternative is to restart with Raph's 20071029 code, and blackbox all the fontforge_libspiro patches, and hope what you write runs same or better than the fontforge_libspiro_fork.

Now for FontForge's GPL3 license - there are two possible choices: 1 - start with the code before the GPL3 license was introduced in 2012, blackbox everything beyond that point, and write code, hopefully, what you make is the same, similar, or better. @jtanx - sorry, but declaring all your contributions as BSD counts for nothing, it also goes into the black box too, because if there are patches done before your code, your code therefore relies on whatever improvements were added earlier. I believe this is your easier solution for going back to a BSD3 license. 2 - Assuming that you want to go back to BSD3, then you'll need to ask permission from each and every author that provided a patch, fix, code, etc. That is a lot of authors between 2012 and today that you need to get written permission from.

If you want some idea of how huge a task this is....consider this: code added under monkeyIQ is all GPL3 - in fact we seem to still be adding patches under that branch even today. MonkeyIQ copied giomime from @khaledhosny and I had to recode it as GPL to help keep the peace because it was licensed wrong. Several patches are based on, or got pulled in from FontAnvil code - you'll have to ask permission. Building the charsets in Unicode is mostly based on the code now in the Unicode charset subdirectory - you'll have to redo that too. Language translations, and much of the icons, including the tango icons, you'll need to ask all authors involved. Many early patches are based on sortsmill improvements - you'll have to ask @khaledhosny if that is okay or need to remove them. is_Ligatures started from Barry's is_Ligatures, and there are a number of edits/erasures/etc done by him when autoconf was added, so you'll need to take a close look there too. last, but not least, you'll also need to deal with all authors (since 2012) that contributed because it was copyleft. The decision to go from BSD3 to GPL3 was also based on the fact that there were limitations under the BSD3 license where you couldn't connect with or re-use other code that was desirable at the time - example libspiro is one, but there are others. The decision wasn't done by one person, but done as a group decision between several people.

@khaledhosny already gave his answer - no. In summary, all contributions from that point on for patches based on his code is GPL3 - you'll need to start pulling out code from 2012.....

I suggest do - 1 - You'll need to look at starting with 2012 code and blackboxing everything after that as the easier road to follow.

What's the reason for asking to change the license?

ctrlcctrlv commented 4 years ago

@jtanx - sorry, but declaring all your contributions as BSD counts for nothing

This is inaccurate. Any contributor can dual-license their contribution. @jtanx isn't saying his patches are non-GPL, he's saying they're both GPL and BSD.

skef commented 4 years ago

Now for FontForge's GPL3 license - there are two possible choices:

@JoesCat the claim is that regardless of whether the project as a whole was being distributed under a GPL, all updates to previously BSD-licensed files continued to be BSD-licensed given 1) the per-file license at the top and 2) the note in LICENSES.

The current note in LICENSES is a copy of the note added in 2012 update 4f871f469e by ... you.

JoesCat commented 4 years ago

Read copyright law first, then tell me otherwise. Law is law. Licenses are based on Copyright, not the other way around. I can dig around for some old emails where @davelab6 pointed out wrappers.

example.... GPL blah, blah, blah... ...indent...BSD3 blah, blah, blah...

Sorry, but law is law.

skef commented 4 years ago

Tell you otherwise about what? What are you disputing?

Are you claiming that if a project has a single license file stating that all contributions will be treated under that license, and an individual contributor later disputes that their code falls under that license, their claim trumps the project's claim?

skef commented 4 years ago

(The obvious reason to be skeptical about such a claim being that it would basically make all purported licensing of open-contribution projects moot.)

ctrlcctrlv commented 4 years ago

Any contributor can dual-license his patches...dual-licensing is a common practice in open source. "Law is law" does nothing to erase this.

jtanx commented 4 years ago

I'm fairly sure no one in this thread is a lawyer (but prove me otherwise). So I'm a little dubious of blanket statements like:

Sorry, but law is law. sorry, but declaring all your contributions as BSD counts for nothing

I'm pretty sure at the least I can license my code however I like, assuming it's compatible with the overarching license.

skef commented 4 years ago

Reading through the long comment again, the reasoning goes further in "the other direction" than I find plausible. I can certainly accept the possibility that the license of various contributions may be disputable, and if that were correct then that could cause problems down the road.

@JoesCat's view is much stronger: that all contributions since 2012 are GPL/copyleft and therefore (at a minimum) all such authors would have to approve a change. Unless that reasoning rests on authorial intent I see no support for it. The individual files have their individual license notices. The LICENCE file defers to those. The text of the GPL license is included in a different file for reasons also explained in the LICENSE file. What in particular would make BSD not apply but GPL apply to a change added to, for example, fontforge/splinefont.h?

twardoch commented 4 years ago

A patch is an instruction which portions of some original work to remove and which portion to add. A complete replacement of the work with something else is "the ultimate patch".

I don't think that the act of removal of some portions of copyrighted work is subject to that work's license — if that were so, you wouldn't be able to remove any GPL software from your computer. No, the act of destruction isn't the same as the act of creation.

Then you have instructions that say "in this place, insert this text (code), which is written by me. Now, I can also publish these instructions under any license I want.

Only when I apply the patches and want to distribute the result — that modified work needs to fulfill the terms of the original work.

If 99% of the authors agree to a license change, or to dual-licensing or whatever, for their patches, then the instructions contained in those patches that say what to remove are not subject to copyright buy the additions by those authors are now relicensed.

And then you need to find a version of the work that also matches those relicensed terms and re-apply the patches. If there are some blockers (the instructions are invalid because the structure has changed), you need to adapt.

Ultimately, the final work must not contain any text written by the authors who did not agree to the relicensing.

In other words:

twardoch commented 4 years ago

The stability of the legal system on the whole relies on the fact that you can trust the information provided, that the information has been provided to you responsibly. The explicit trumps the implicit.

If I only download some some file that clearly states the license terms and the author in the header, I should be able to trust that those license terms plus general law applies to this file. If no information about the legal status is given, then I should seek information about the legal status on a higher level (a collective work where this file originates from).

This is standard practice in all software development. I may not have access to the change history, so I should be able to trust the information I have.

From this I understand that if a patch author did not explicitly annotate the patch with different terms, I may trust the next-level-up source of legal status, which would be the info in the file, if absent then the info in the current folder, if absent then the info in a higher-up folder and so on.

Software programs are collective works made by different authors, but I think the principles are pretty clear.