From: Markus Armbruster <armbru@redhat.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Victor Toso <victortoso@redhat.com>,
qemu-devel@nongnu.org, Eric Blake <eblake@redhat.com>,
John Snow <jsnow@redhat.com>,
Andrea Bolognani <abologna@redhat.com>
Subject: Re: [RFC PATCH v2 0/8] qapi: add generator for Golang interface
Date: Thu, 07 Nov 2024 13:36:49 +0100 [thread overview]
Message-ID: <87r07njk4e.fsf@pond.sub.org> (raw)
In-Reply-To: <ZyyZugciNAYmVjeP@redhat.com> ("Daniel P. Berrangé"'s message of "Thu, 7 Nov 2024 10:43:06 +0000")
Daniel P. Berrangé <berrange@redhat.com> writes:
> Bringing this thread back from the dead, since I had an in-person
> discussion on a key question below at KVM Forum this year and want
> to record it here.
[...]
> To recap the situation
>
> * The license of the code generator itself does not determine the
> license of the output generated code
For instance, GNU Bison is GPLv3+, but the parts the generator emits
(the parser skeleton) come with a special exception.
Such exceptions need to be granted by the copyright holder. As long as
the code generating Go is not a derived work, the copyright holder
situation should be simple enough to make this practical.
> * The license of the inputs to the code generator, may or may
> not, determine the license of the output generated code depending
> on use context
>
> The primary input to the code generator is the QAPI schema, which is part
> of QEMU and thus licensed GPL-2.0-or-later.
>
> The QAPI schema includes both the API definitions AND the API documentation
> text.
>
> We can make the case that as the QEMU public interface, consuming the
> API definitions in the QAPI schema for the purpose of generating code
> is "fair use", and thus the output generated code does NOT need to
> match the GPL-2.0-or-later license of the QAPI schema. We can choose
> the code license, and a maximally permissive license looks appropriate.
Having this argument confirmed by an actual expert seems advisable.
> We want to have API documentation for the Golang bindings and the obvious
> way to achieve this is to copy the API docs from the QAPI schema into the
> Golang code. It is NOT reasonable to class such *direct copying* of docs
> "fair use". IOW, copied docs will be under GPL-2.0-or-later.
>
> Thus if we pick MIT-0 for the Golang code, and copy across the QAPI docs,
> the resulting Golang QAPI project code would be under a compound license
> term "MIT-0 AND GPL-2.0-or-later".
>
> The concern was that this will limit the ability of downstream
> applications to consume the Golang bindings, if they don't want their
> combined work to contain GPL-2.0-or-later.
>
> Ignoring whether this fear of GPL-2.0-or-later is sane or not,
> in retrospect I believe that this concern in fact has no legal
> basis.
>
> The license of a compiled application binary is the union of all
> the object files linked into it.
>
> Notice I said "Object file" there, **NOT** "Source file".
>
> This is the crucial distinction that makes the presense of
> GPL-2.0-or-later docs a non-issue from a licensing POV.
>
>
> When the compiler takes the "MIT-0 and GPL-2.0-or-later" license
> .go source file, and builds an object file, it will be discarding
> all the API documentation comments. IOW, all the parts that were
> under GPL-2.0-or-later are discarded. The only parts of the source
> file that get "compiled" are the Go language constructs which were
> MIT-0 licensed [1].
>
> IOW, we have a "MIT-0 and GPL-2.0-or-later" .go source file,
> and an "MIT-0" object file.
>
> Thus while there may be a human perception problem with the Golang
> bindings being "MIT-0 and GPL-2.0-or-later", there are no legal
> licensing limitations, as the combined work for a library or
> application linking the bindings will only contain the MIT-0 part.
>
> The GPL-2.0-or-later docs won't influence the license of the
> combined work.
>
> Note, this interpretation applies only to languages which are
> compiled, not interpreted.
>
> If we are generating python code for example, the there is
> no "source file" vs "object file" distinction for licensing.
> The combined work in a python app is under the union of all
> the source file licenses.
>
>
> TL;DR: I think you can re-add the documentation comments to
> the Golang code generator, declare the resulting code as being
> "MIT-0 AND GPL-2.0-or-later".
>
> In the README.md file we need todo two important things:
>
> * Document our interpretation of the "combined work" license
> situation for applications consuming the project.
> * Declare that *ALL* manually written code contributions
> are exclusively MIT-0.
What code do you have in mind? Can you provide an example?
> With regards,
> Daniel
>
> [1] NB, there are languages where some code comments can have semantic
> impacts on the compiled out. I don't believe that to be the case for
> any human targetted API docs that we would be copying over from the
> QAPI schema though in the Golang case.
next prev parent reply other threads:[~2024-11-07 12:37 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-17 12:19 [RFC PATCH v2 0/8] qapi: add generator for Golang interface Victor Toso
2022-06-17 12:19 ` [RFC PATCH v2 1/8] qapi: golang: Generate qapi's enum types in Go Victor Toso
2022-06-17 12:19 ` [RFC PATCH v2 2/8] qapi: golang: Generate qapi's alternate " Victor Toso
2022-07-05 15:45 ` Andrea Bolognani
2022-08-17 14:04 ` Victor Toso
2022-08-19 16:27 ` Andrea Bolognani
2022-08-22 6:59 ` Victor Toso
2022-08-29 11:27 ` Markus Armbruster
2022-08-29 13:31 ` Victor Toso
2022-09-02 14:49 ` Victor Toso
2022-06-17 12:19 ` [RFC PATCH v2 3/8] qapi: golang: Generate qapi's struct " Victor Toso
2022-06-17 14:41 ` Daniel P. Berrangé
2022-06-17 15:23 ` Victor Toso
2022-06-17 12:19 ` [RFC PATCH v2 4/8] qapi: golang: Generate qapi's union " Victor Toso
2022-07-05 15:45 ` Andrea Bolognani
2022-07-05 16:35 ` Daniel P. Berrangé
2022-07-06 9:28 ` Andrea Bolognani
2022-07-06 9:37 ` Daniel P. Berrangé
2022-07-06 9:48 ` Daniel P. Berrangé
2022-07-06 12:20 ` Andrea Bolognani
2022-08-17 16:25 ` Victor Toso
2022-08-19 7:20 ` Victor Toso
2022-08-19 15:25 ` Andrea Bolognani
2022-08-22 6:33 ` Victor Toso
2022-08-17 16:06 ` Victor Toso
2022-06-17 12:19 ` [RFC PATCH v2 5/8] qapi: golang: Generate qapi's event " Victor Toso
2022-07-05 15:45 ` Andrea Bolognani
2022-07-05 16:47 ` Daniel P. Berrangé
2022-07-06 14:53 ` Andrea Bolognani
2022-07-06 15:07 ` Daniel P. Berrangé
2022-07-06 16:22 ` Andrea Bolognani
2022-08-18 7:55 ` Victor Toso
2022-08-18 7:47 ` Victor Toso
2022-06-17 12:19 ` [RFC PATCH v2 6/8] qapi: golang: Generate qapi's command " Victor Toso
2022-06-17 12:19 ` [RFC PATCH v2 7/8] qapi: golang: Add CommandResult type to Go Victor Toso
2022-07-05 15:46 ` Andrea Bolognani
2022-07-05 16:49 ` Daniel P. Berrangé
2022-08-17 15:00 ` Victor Toso
2022-06-17 12:19 ` [RFC PATCH v2 8/8] qapi: golang: document skip function visit_array_types Victor Toso
2022-06-27 7:15 ` [RFC PATCH v2 0/8] qapi: add generator for Golang interface Markus Armbruster
2022-06-27 12:48 ` Victor Toso
2022-06-27 15:29 ` Markus Armbruster
2022-08-18 8:04 ` Victor Toso
2022-07-05 15:46 ` Andrea Bolognani
2022-08-17 14:24 ` Victor Toso
2022-08-29 11:53 ` Markus Armbruster
2022-08-29 14:05 ` Victor Toso
2024-11-07 10:43 ` Daniel P. Berrangé
2024-11-07 12:36 ` Markus Armbruster [this message]
2024-11-07 13:06 ` Daniel P. Berrangé
2024-11-07 13:35 ` Daniel P. Berrangé
2024-11-07 14:18 ` Markus Armbruster
2024-11-08 9:43 ` Victor Toso
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87r07njk4e.fsf@pond.sub.org \
--to=armbru@redhat.com \
--cc=abologna@redhat.com \
--cc=berrange@redhat.com \
--cc=eblake@redhat.com \
--cc=jsnow@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=victortoso@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.