[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Can or rather is a macro package be licensed?
From: |
G. Branden Robinson |
Subject: |
Re: Can or rather is a macro package be licensed? |
Date: |
Sun, 13 Oct 2024 10:13:18 -0500 |
Hi Matthew,
At 2024-10-13T12:11:24+0000, Matthew Polk wrote:
> I want to in the future sometime, submit a nice macro package I'm
> creating to savannah.
Good to hear! I'm curious--do you mean for distribution with groff or
as an independent Savannah project?
> However, can the macro package itself be licensed
With the important caveats that (a) I am not a lawyer and (b) this is
not legal advice, I will offer my lay understanding of the issues.
Every software developer requires some awareness of copyright law to do
their job right, in my opinion.
So to answer in terms of that lay understanding:
Yes. Anything you create and fix in tangible form (say by putting up a
web page or even just storing it to your hard drive, privately) that
manifests your "original expression", in the United States, carries your
copyright.
> and if yes, you must also use the same license like other types of
> programs say python (Where if you import a GPL licensed script, that
> too must be GPL)?
This is a tricky question to answer in generality. Here are a couple of
principles.
1. Your work's use of a programming interface does not cause the
copyright of an implementation of that interface to "stick" to your
work. This principle was most recently upheld at the U.S. Supreme
Court in the notorious Google v. Oracle case.[1]
2. How copyright affects the combination of a work and the APIs it
uses, or the combination of a programming language's compiler or
interpreter with a program in that language, depends on details of
how the combination manifests. The "fixture" of the combination in
"tangible form" is the ground upon which many battles over this
question are fought, and as far as I know there is no definitive
answer under law. Legislators have not bothered to specify the
matter in detail, nor have courts made many precedential rulings in
this area. This ambiguity has stayed stubbornly in place for my
entire career. I suspect it is a sort of stable equilibrium;
resolving the "linking issue" one way or the other could have large
financial consequences to firms that receive revenue predicated on
their copyright monopolies, or who avoid having to pay royalties on
same because their usage thereof is arguably transient. A large
firm will often play both roles, so before they can intelligently
spend money on campaign contributions to get Congress to enact their
will, they have to understand which outcome would put them ahead,
and whether any anticipated windfall would be large enough to make
the risk worth taking. One can't be certain what will happen in a
Congressional conference committee, or what an "originalist" Supreme
Court might decide about the application of copyright to software
given that, at the founding of the United States, the only works
thus protected were "maps", "charts", and "books".[2][3]
It's a Mexican standoff, with every Silicon Valley firm brandishing
its weapons at every other one like strapped hecatoncheires. (Argus
is boggling as we speak.)
That said, a popular interpretation among many Free Software
advocates, some software engineers, and others, is that if a
combination of works exists only "in RAM", it's "transient" and not
"fixed", whereas if the combination is written to long-term storage
(like hard drive platters or an SSD), it _is_ "fixed". Dynamic and
static linking of ELF objects are regarded as examples of each
of these, respectively, and the GNU Lesser General Public License is
written on the presumption that it is a valid interpretation.
So what about your macro package? Well, here I think the application of
the principles tends toward the pretty straightforward. All *roff
formatters known to me are interpreters. The combination of a document,
a macro package supporting that document, and the formatter that
interprets both exists only transiently, as an operating system process
that is born, runs, and dies in a span of a few seconds at most, in the
general case. The output that gets stored to disk is an output format
like PostScript, PDF, or other page description language.
(Occasionally, plain text output is stored.[4])
I am aware of no argument that documents formatted with a *roff system
necessarily carry the copyright of the formatter that prepared them *or*
of any macro packages involved in their production. Part of the reason
is that the original form of the document, and of any macro packages it
used, are utterly unrecoverable from the output format.[5]
With object files like ELF, things are sometimes not to simple. Two
examples of complication are "inline functions" that copy themselves (in
assembled form, of course) to an output binary, and "runtime libraries"
that are present to set up the support environment for the programming
language. (The C language historically obscured appreciation of this
point because, back in PDP-11 days, the C runtime library was so minimal
as to be almost imperceptible. 60 years later that is not quite so
true, and the C runtime is larded with things that disciples of Dennis
Ritchie would deride as "bloat", like `memset`, `memcpy`, and `setjmp`.)
This is why the licenses of the GNU C compiler has codicils like the
"GCC Runtime Library Exception".[6][7]
> It confuses me a bit how the licensing works for the macro package
> rather than the groff sources (C++) themselves.
Right. C++ programs and libraries tend to be compiled and stored
long-term, and are used as object files in combination with other object
files. *roff documents and macro packages are stored in source form, an
interpreted rather than compiled.
> This confusion arises from the license headers in the macro packages,
> much of it says the GPL, but say e.tmac (For the me macro package),
> it's under a permissive license rather than the GPL.
Right. The "LICENSES" file in groff's source repository attempts to
illuminate this.[10]
LICENSES:
Some files are part of groff but bear licenses in addition to the GPL,
or have been placed into the public domain, because they originated
elsewhere; often, the groff project has modified them, sometimes
extensively. These multi-licensed groff components are as follows.
Their file names are not always identical to those in their original
distributions, but we have kept them similar.
...
me macro package
================
"me" uses the BSD "three-clause" license; that is, it is subject to the
advertising clause rescission.
tmac/e.tmac
tmac/groff_me.man
doc/meintro.me
doc/meintro_fr.me
doc/meref.me
> So how does licensing work with macro packages? I want to ensure if I
> must use the GPL to ensure the macro package as well is under the GPL.
As long as you don't copy someone else's copyrightable, GPLed work into
your macro package, there is no reason it has to be under the GPL, as
far as I know.
> I also want to license freely my macro package so anyone can use it.
That's laudable! As long as your work is wholly original then I suspect
there are very few constraints on your choice of license.
Let me know if this helps, or doesn't. And--it should go without
saying--if you expect the answers to these questions to put your money
or your livelihood at stake, you should retain the services of an
attorney licensed in your jurisdiction and competent in copyright law.
Regards,
Branden
[1] https://en.wikipedia.org/wiki/Google_LLC_v._Oracle_America,_Inc.
[2] https://www.arl.org/copyright-timeline/
[3] All this is to say that if Apple, Oracle, Microsoft, et al. want to
ensure that James Madison and Thomas Jefferson had stored-program
digital computers and the Church-Turing thesis clearly in mind when
fighting the British and founding the republic, they'd be well
advised to offer members of the current Supreme Court majority some
swanky vacations.[8][9]
[4] Example: https://github.com/bminor/bash/blob/master/doc/bash.0
[5] Unless someone goes to the explicit trouble of "quining" the
document's own source into the output.
https://git.savannah.gnu.org/cgit/groff.git/tree/contrib/sboxes/sboxes.am?h=1.23.0#n45
[6] One might reasonably wonder whether translation of "higher-level"
programming language source to machine language (commonly via
assembly language) doesn't shed the cloak of copyright as the
internals of a *roff macro package or formatter would when a
document is transformed to output. I don't have an answer. One
could argue that the sorts of code that get inlined during
compilation or are simple enough to put in a runtime (in unambitious
programming languages) don't get scrambled to the point that they
could be meaningfully decompiled. But on the other hand, where
transformation of a piece of code is sufficiently "mechanical" that
it can be reliably reversed, it may also be the most obvious or only
efficient means of getting a particular job done, in which case,
under conventional understandings of copyright, "original
expression" is not possible and thus copyright protection cannot
attach in the first place. This was one of the points which Google
v. Oracle turned.
(I am presuming that a *roff formatter or macro package doesn't take
it upon itself to deliberately inject its own original expression
into the output, say by emitting a macro package author's sonnet.
The analysis would change for that case, but it's a contrived one.
Or maybe not--something like this is behind "digital watermarking"
schemes. Concealing one's copyrighted logo upon which one also
holds a trade mark is a particularly enticing prospect for copyright
rentiers, because you can whack "offenders" with multiple causes of
civil action at once. SLAPP your customers and collect the rent!)
[7] https://www.gnu.org/licenses/gcc-exception-3.1.en.html
[8]
https://www.newsweek.com/scotus-gifts-explained-3-charts-supreme-court-justices-clarence-thomas-1909482
[9] Yes, this is an allusion to the _Bruen_ decision, and more so to its
right-wing champions.
https://en.wikipedia.org/wiki/New_York_State_Rifle_%26_Pistol_Association,_Inc._v._Bruen
[10] https://git.savannah.gnu.org/cgit/groff.git/tree/LICENSES?h=1.23.0#n39
https://git.savannah.gnu.org/cgit/groff.git/tree/LICENSES?h=1.23.0#n115
signature.asc
Description: PGP signature