From 60430ee6dfffbeb220a3e8fee7336d54313467bc Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Tue, 5 Feb 2019 20:30:13 -0400 Subject: Folded license-making program (legislator) into the Lux project proper (as licentia). --- .../source/program/licentia/license/extension.lux | 168 +++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 stdlib/source/program/licentia/license/extension.lux (limited to 'stdlib/source/program/licentia/license/extension.lux') diff --git a/stdlib/source/program/licentia/license/extension.lux b/stdlib/source/program/licentia/license/extension.lux new file mode 100644 index 000000000..1ce3bfccc --- /dev/null +++ b/stdlib/source/program/licentia/license/extension.lux @@ -0,0 +1,168 @@ +(.module: + [lux #* + [data + ["." text + format] + [collection + [list ("list/." monoid)]]]] + ["." // (#+ Extension) + ["_" term] + ["." grant] + [time (#+ Months Period)] + [// + ["$" document]]]) + +(def: #export sharing-requirement + (List Text) + (let [on-extension (let [constraint (let [because "In consideration of, and as an express condition to, " + source (format "the licenses granted to " _.recipient + " under " _.license)] + (format because " " source)) + duty (format _.recipient + " hereby agrees that any " _.extension + " that " _.recipient + " creates or to which " _.recipient + " contributes are governed by the terms of " _.license)] + (format constraint ", " duty)) + on-deployment (format _.recipient " may only " _.deploy + " an " _.extension + " that " _.recipient + " creates under the terms of " _.license) + on-sharing (format _.recipient + " hereby grant to " _.licensor + " and all third parties a " ($.and grant.grant-characteristics) + " license under those intellectual property rights " _.recipient + " owns or controls to " ($.or grant.copyright-grant-rights) + " " _.work + " in any form") + on-license-propagation (format _.recipient + " must include a copy of " _.license + " or directions on how to obtain a copy with every copy of an " _.extension + " " _.recipient " distributes") + on-license-protection (format _.recipient + " agrees not to offer or impose any terms on any " _.source-code-form + " or " _.object-form + " of the " _.work + ", or its " _.extension + " that alter or restrict the applicable version of " _.license + " or the recipients' rights hereunder")] + (list on-extension + on-deployment + on-sharing + on-license-propagation + on-license-protection))) + +(def: #export license-conflict-resolution + (List Text) + (let [on-other-licenses (let [circumstance (format "Where any portion of an " _.extension + " created by " _.recipient) + consequence "fall under the terms of another license" + duty "the terms of that license should be honored"] + (format circumstance " " consequence ", " duty)) + on-this-license (format "However " _.recipient + " must also make the " _.extension + " available under " _.license) + on-licensor-judgement (let [condition (format "the terms of " _.license " continue to conflict with the terms of the other license") + right (format _.recipient " may write " _.licensor " for permission to resolve the conflict") + characteristic (format "a fashion that remains consistent with the intent of " _.license)] + (format "If " condition ", " right " in " characteristic)) + on-licensor-discretion (format "Such permission will be granted at the sole discretion of " _.licensor)] + (list on-other-licenses + on-this-license + on-licensor-judgement + on-licensor-discretion))) + +(def: #export distinctness-requirement + ($.paragraph (list (format "Any " _.extension + " " _.recipient + " does make and " _.deploy + " must have a distinct title so as to readily tell any subsequent user or " _.contributor + " that the " _.extension + " is by " _.recipient)))) + +(def: news-sources + (List Text) + (list "news groups" + "mailing lists" + "weblogs" + "other sites")) + +(def: #export (notification-requirement [start end]) + (-> (Period Months) Text) + (let [on-availability (format _.recipient + " must notify the software community of the availability of the " _.source-code-form + " to any " _.extension + " created by " _.recipient + " within " (%n start) + " month(s) of the date " _.recipient + " initially does " _.deploy + ", and include in such notification a description of the " _.extension + ", and instructions on how to acquire the " _.source-code-form + " via an " _.electronic-distribution-mechanism) + on-duration (format "The " _.source-code-form + " must remain available via an " _.electronic-distribution-mechanism + " for no less than " (%n end) + " month(s) after the date " _.recipient + " ceases to " _.deploy) + on-responsibility (format _.recipient + " is responsible for ensuring that the " _.source-code-form + " to each " _.extension + " " _.recipient + " does " _.deploy + " remains available even if the " _.electronic-distribution-mechanism + " is maintained by a third party") + on-costs (format _.recipient + " may not charge a fee for any copy of the " _.source-code-form + " in excess of the actual cost of duplication and distribution of said copy that " _.recipient + " incurs") + on-changes (format "Should such instructions change, " _.recipient + " must notify the software community of revised instructions within " (%n start) + " month(s) of the date of change") + on-accesibility (format _.recipient + " must provide notification by posting to appropriate " ($.or news-sources) + " where a publicly accessible search engine would reasonably be expected to index a post in relationship to queries regarding " _.work + " and/or an " _.extension + " created by " _.recipient)] + ($.paragraph (list on-availability + on-duration + on-responsibility + on-costs + on-changes + on-accesibility)))) + +(def: #export description-requirement + Text + (let [on-duty (let [basic (format _.recipient + " must cause any " _.modification + " that " _.recipient + " creates, or to which " _.recipient + " contributes, to be documented in the " _.source-code-form) + modification-types (: (List Text) + (list "additions" + "changes" + "deletions")) + details (format "clearly describing the " ($.and modification-types) + " that " _.recipient " made")] + (format basic ", " details)) + on-notice-location (let [statement-locations (: (List Text) + (list (format "in the " _.source-code-form) + (format "in any notice displayed by " _.work + " " _.recipient + " distributes") + (format "in related documentation in which " _.recipient + " describes the origin or ownership of " _.work)))] + (format _.recipient + " must include a prominent statement that the " _.modification + " is derived, directly or indirectly, from " _.work + " and include the names of " _.licensor + " and any " _.contributor + " to " _.work + " " ($.and statement-locations))) + on-notice-preservation (format _.recipient + " may not modify or delete any pre-existing copyright notices, change notices or the text of " _.license + " in " _.work + " without written permission of " _.licensor + " or the respective " _.contributor)] + ($.paragraph (list on-duty + on-notice-location + on-notice-preservation)))) -- cgit v1.2.3