License Property

Zzeel8/10/2021
@ghost @flamewave000 @corporat he/him @KaKaRoTo

But if we do want to talk Manifest+, we should do that over here.

We can even thread it!
Zzeel8/10/2021
👋
KKaKaRoTo8/10/2021
This was what I responded with regards to the facets/license proposal from @corporat he/him https://discord.com/channels/732325252788387980/755620260895391754/824818361824968755
KKaKaRoTo8/10/2021
I remember one thing being discussed which was "is this supposed to indicate the license of the content, or under which license you are using it"
Zzeel8/10/2021
I think one original fear was "OMG this data structure is going to be super over-complicated"
KKaKaRoTo8/10/2021
i.e: "I wrote this" vs "I have authorization from the content creator to use it in commercial products"
vs "MIT license" vs "Commercial license X"
KKaKaRoTo8/10/2021
yeah
KKaKaRoTo8/10/2021
I thought the facets idea was solving the complexity of it to some extent
Zzeel8/10/2021
@corporat he/him
UUUnknown User8/10/2021
Message Not Public
Sign In & Join Server To View
Ccorporat8/10/2021
I apparently suggested this in March, but now that I'm aware of existing standards like REUSE https://reuse.software/, I think we can suggest using REUSE instead
UUUnknown User8/10/2021
Message Not Public
Sign In & Join Server To View
KKaKaRoTo8/10/2021
does reuse not have scripts to generate a license file/summary out of all that ?
KKaKaRoTo8/10/2021
I thought that was the point 🤔
UUUnknown User8/10/2021
2 Messages Not Public
Sign In & Join Server To View
Fflamewave0008/10/2021
Yeah, I'm just looking at it now. It's definitely a nice system, but not really conducive to being used on services like FHub. It also appears to require quite a lot of effort from the dev to setup properly
UUUnknown User8/10/2021
3 Messages Not Public
Sign In & Join Server To View
KKaKaRoTo8/10/2021
oh, I like it, but I fully expect 95% of devs to ignore it
KKaKaRoTo8/10/2021
we still get a ton of module devs that don't include a license at all, and don't understand the very concept of it
KKaKaRoTo8/10/2021
(I mean, who does anyway? 😛 )
Ccorporat8/10/2021
the problem with declared metadata: it's not maintained. It's always garbage
UUUnknown User8/10/2021
2 Messages Not Public
Sign In & Join Server To View
Fflamewave0008/10/2021
yeah not really
Fflamewave0008/10/2021
honestly, before today's discussions, I never really thought about it much myself since I rarely ever make publicly available software. My professional side rarely uses open source anything, we make most everything in-house
KKaKaRoTo8/10/2021
if devs were lawyers.... they might care
Ccorporat8/10/2021
ON TOPIC: What would a Manifest Plus license property look like/contain? How would a manifest+ license property be consumed by Forge and FoundryHub (cc @JDW)?

OFF TOPIC: Any discussion not related to Manifest Plus
Ccorporat8/10/2021
Just to keep this orderly, I'm going to pick out some comments from here and put them in #874445116264312842 (ping to get added to that)

Edit: I think I was the only off-topic poster 😶
UUUnknown User8/10/2021
Message Not Public
Sign In & Join Server To View
Ccorporat8/10/2021
I believe "license" is core (though it's unevenly documented)
Ccorporat8/10/2021
it accepts a link. I don't think anything consumes it yet?
UUUnknown User8/10/2021
Message Not Public
Sign In & Join Server To View
Ccorporat8/10/2021
my original hope was for you to be able to mark packages as containing OGL or Creative Commons content, for those who care
Ccorporat8/10/2021
FHub doesn't need to care about code licenses though
BBadIdeasBureau8/10/2021
A license property which is "pick a license name from the list" only works for licenses with a canonical version (i.e. GPL, but not MIT). I would suggest that an M+ license property have at least the ability to point to a file (or files) in the distributed module and/or on the module repo, rather than just relying on name. (as the core "license" property does, with a link)

So my preference would be the current license property, but as an object that can specify different licenses for different parts.

(REUSE and SPDX are partial solutions to this, but not complete - e.g. SPDX indicates optional and replaceable parts of various licenses, but you can change the meaning significantly with those replacements and still be within spec)
BBadIdeasBureau8/10/2021
(also documentation to make clear that it's "what license is the end user granted for this" rather than "what license is the developer using it under")
BBadIdeasBureau8/10/2021
There's at least one! (though I barely care and don't have to do much of this in my day job and have others in the firm I can throw the problem at)
Ccorporat8/10/2021
my own feelings about this come from a similar place. I don't want people to use an SPDX tag declaratively, as has happened so many times, so as to say "it's MIT licensed because I wrote MIT in the text box"
BBadIdeasBureau8/10/2021
"point to a file in the zip" is less useful for external consumers, now that I think about it - but will make people bundle their licensing with their distribution, which is probably a plus (and required for a bunch of things).
Ccorporat8/10/2021
I don't agree with your points about SPDX text replacements, but moreso because I trust the RedHat lawyers who volunteer their professional expertise to SPDX. Edit: whoops offtopic
CCalego8/10/2021
Oh really? I had no idea this existed
Ccorporat8/10/2021
I was also recently told of this 😐
CCalego8/10/2021
I reckon that's new, it is on the docs though
CCalego8/10/2021
CCalego8/10/2021
4 months 'new'
Fflamewave0008/10/2021
The license field has been there since I started developing mods last summer
CCalego8/10/2021
:mindblown:
Fflamewave0008/10/2021
It also is expected to be either a relative path to a file within the package, or a url
CCalego8/10/2021
So what we're considering then is a new field: licenses

This field would be an array of objects.

Spitballing:
"licenses": [
  {
    "directory": "some/directory/or/file",
    "license": "url/to/license/file"
  }
]
CCalego8/10/2021
I agree simple SPDX is not sufficient, though allowing it as well might be nice to have:
{
    "directory": "some/directory/or/file",
    "license": "url/to/license/file",
    "spdx": "MIT"
}
Fflamewave0008/10/2021
Is the directory meant to be the target of the license? If so it should also accept an array. I also would maybe call it target instead of directory
Fflamewave0008/10/2021
That way it can be a file/folder or verbose statement
CCalego8/10/2021
My mental model has "directory"/"target" as the first class citizen, with a license attached to it.
So multiple directories would require multiple entries in the array.
CCalego8/10/2021
That's probably inverted from ideal though, thinking about it
CCalego8/10/2021
Instead, first class should be the license, then directories/files it applies to are attached to that?
Fflamewave0008/10/2021
What exactly do you mean by first class? Just the ordering of the fields? If they're both in the same object, their basically equal
CCalego8/10/2021
first class from a conceptual standpoint
CCalego8/10/2021
"I have a list of directories and the licenses those apply to"
vs
"I have a list of licenses and they apply to directories"
CCalego8/10/2021
still spitballing
"licenses": [
  {
    "license": "url/to/license/file",
    "targets": ["some/directory/or/file", "some/other/directory/or/file],
    "spdx": "MIT"
  }
]
Fflamewave0008/10/2021
Ok, I honestly think they're kind of equal either way.
Fflamewave0008/10/2021
Subjectively, the second option sounds better to my ear lol
BBadIdeasBureau8/10/2021
Yes, I would expect to say "here is all the files/directories licensed under MIT", and I think that's going to get less messy in edge cases.
Fflamewave0008/10/2021
This looks good 👍🏼
BBadIdeasBureau8/10/2021
(plus that then gives a canonical list of things referenced under each license, which might be possible to refer to within each license as appropriate, if it has replaceable text for the covered stuff).
Ccorporat8/10/2021
looking back on my original proposal, my main concern here (maybe BIB's too) is for the authors to also have "targets"/"paths"/"facets"
Fflamewave0008/10/2021
I would add a verbose string example as well though.
"All Items of Type" or something
Ccorporat8/10/2021
maybe just mine. I'm keying off of a conversation about copyright notices and declaring/disclaiming authorship of various components
Fflamewave0008/10/2021
So target's can just be a list of paths/urls/verbose strings, there could also be an optional field for facets since that's a thing

Edit: mobile typing hard
Ccorporat8/10/2021
like, the whole point of multiple licenses is that you don't own the art you used but there's a free license to use it
Ccorporat8/10/2021
someone's going to see Creative Commons icons in your module and take them from there
Ccorporat8/10/2021
it's going to happen
Ccorporat8/10/2021
so now we have to make sure they attribute the actual author, not you
Ccorporat8/10/2021
how do we introduce a system that accounts for all the ways people will reuse the code, or the art, etc. because that's the point of these licenses in the first place
Fflamewave0008/10/2021
Right, and that's where paths and verbose strings come in handy
BBadIdeasBureau8/10/2021
Possibly an "author" field within each license object? Maybe optional with the assumption being that the main module author is the author of each file unless specified.
Ccorporat8/10/2021
let me copy my original proposal to the thread
Ccorporat8/10/2021
{
//....
    "licenses": {
        "core": "GPL-3.0",
        "docs": "CC-BY-4.0",
        "compendium": "OGL-1.0a"
    },
//...
    "authors" : [
        {
            "name" : "John Doe",
            //....
            "facets" : ["core", "docs"]
        },
        {
            "name" : "Wizards of the Coast",
            //...
            "facets" : ["compendium"]
        }
    ]
//...
}
Ccorporat8/10/2021
I would now revise this to:
{
//....
    "licenses": {
        "core": "/path/to/file/LICENSE",
        "docs": "https://creativecommons.org/licenses/by/3.0/",
        "compendium": "/path/to/file/OGL.txt"
    },
//...
    "authors" : [
        {
            "name" : "John Doe",
            //....
            "facets" : ["core", "docs"]
        },
        {
            "name" : "Wizards of the Coast",
            //...
            "facets" : ["compendium"]
        }
    ]
//...
}
Ccorporat8/10/2021
now elsewhere in the manifest, core manifest properties, we might find a "facets" sub-property attached to scripts or something
BBadIdeasBureau8/10/2021
... looking at that attribution of WoTC as the authors of the compendium, I'm actually kinda skeptical that such an attribution exercise can work in this kind of standardised and machine readable form. The compendium is a combination of works of Foundry (for the base software structure), WotC (for the text content), and potentially the compendium creator (where there are implementation decisions which rise to the level of being creative, eg embedded macros in DAE SRD).
Ccorporat8/10/2021
there are lots of problems needing solving, proper attribution of all persons is my foremost concern in terms of Foundry modules
Fflamewave0008/10/2021
I don't like making facets the primary field in there. It makes more sense the way @Calego (ElfFriend) suggested. We can add a facets field to his proposal to cover your use case with the authors though
Fflamewave0008/10/2021
"licenses": [
  {
    "facets" : ["core"],
    "license": "url/to/license/file",
    "targets": ["some/directory/or/file", "some/other/directory/or/file"],
    "spdx": "MIT"
  }
]
CCalego8/10/2021
My thinking is that ultimately this needs to point at something more official. It can't be a substitute to actually properly noting your license in-repo/files

The URL/path to a file is the ultimate
CCalego8/10/2021
Authors can be noted more accurately there.

I can't see (nor would I want) any consumer of this field doing some sort of reverse engineering to build a table of licenses or whatever.
CCalego8/10/2021
This would be useful as a "licenses: MIT, CC, +1 more" label on the listing, which links to the appropriate license file
CCalego8/10/2021
Which, if I'm honest, doesn't really make this feel very useful.

We need to answer these questions:
What will consume this manifest property and how?

What problem are we trying to solve that the manifest can solve?
CCalego8/10/2021
The problem of a codebase that includes icons under a different license isn't something I see a manifest as being a solution to
Ccorporat8/10/2021
we already got pushback from JDW
Ccorporat8/10/2021
for anything other than what exists already
Zzeel8/10/2021
FHub, The Forge, and to a lesser extent Leo are the only proper M+ consumers IIRC.
Zzeel8/10/2021
I can tell you that Leo has precious little space for displaying metadata, so anything beyond "MIT" or "GPLv3" is not likely to be shown visually.
Zzeel8/10/2021
If license is a valid manifest field already, the only think I really feel is missing is some sort of "licenseLabel" string so that consumers don't need to do any parsing to display some sort of label. If it's just a string, the author can say anything they want:

"licenseLabel": "MIT (code), CC-BY-4.0 (Icons)"

"licenseLabel": "GPLv3 (all your base)"


Etc.
Zzeel8/10/2021
This would be useful to consumers, but not overly complicated. Yes, it means the formatting can be all over the place.
Zzeel8/10/2021
But it allows someone to "cover" their bases however they feel is nessesary.
UUUnknown User8/10/2021
2 Messages Not Public
Sign In & Join Server To View