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). --- stdlib/source/program/licentia/license/grant.lux | 128 +++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 stdlib/source/program/licentia/license/grant.lux (limited to 'stdlib/source/program/licentia/license/grant.lux') diff --git a/stdlib/source/program/licentia/license/grant.lux b/stdlib/source/program/licentia/license/grant.lux new file mode 100644 index 000000000..1725755b7 --- /dev/null +++ b/stdlib/source/program/licentia/license/grant.lux @@ -0,0 +1,128 @@ +(.module: + [lux #* + [data + ["." text + format]]] + [// + [time (#+ Days)] + ["_" term] + ["." definition] + [// + ["$" document]]]) + +(def: grant-header + (format "Subject to the terms and conditions of " _.license + ", each " _.contributor + " hereby grants to " _.recipient)) + +(def: #export grant-characteristics + (List Text) + (list "perpetual" + "world-wide" + "non-exclusive" + "no-charge" + "royalty-free" + "irrevocable")) + +(def: #export copyright-grant-rights + (List Text) + (list "use" + "reproduce" + "display" + "perform" + "modify" + (format "create an " _.extension " of") + "sublicense" + "distribute")) + +(def: #export copyright + ($.sentence (format grant-header " a " ($.and ..grant-characteristics) + " copyright license to " ($.or ..copyright-grant-rights) + " " _.work + " and such an " _.extension + " in a " _.source-code-form + " or an " _.object-form))) + +(def: #export (patent retaliation?) + (-> Bit Text) + (let [grant (format grant-header " a " ($.and ..grant-characteristics) + " patent license to " ($.or definition.patent-rights) " " + _.work + ", where such license applies only to any " _.patent-claim + " that is necessarily infringed by their " ($.plural _.contribution) + " alone or by combination of their " ($.plural _.contribution) + " with " _.work) + retaliation-clause (format "If " _.recipient " institutes patent litigation against any " _.legal-entity + " (including a cross-claim or counterclaim in a lawsuit) alleging that " + _.work " or a " _.contribution + " incorporated within " _.work " constitutes direct or contributory patent infringement" + ", then any patent licenses granted to " _.recipient + " under " _.license + " for " _.work + " shall terminate as of the date such litigation is filed")] + ($.paragraph (list& grant + (if retaliation? + (list retaliation-clause) + (list)))))) + +(def: #export date + ($.sentence (format "The licenses granted in " _.license + " with respect to any " _.contribution + " become effective for each " _.contribution + " on the date the " _.contributor + " first distributes such " _.contribution))) + +(def: restoration-scope "an ongoing basis") + +(def: #export (grant-restoration-clause termination-period) + (-> Days Text) + (let [restoration-condition (format _.recipient " becomes compliant") + restored-grants (format "the rights granted under " _.license + " from a particular " _.contributor) + invalidation-condition (format "such " _.contributor + " explicitly and finally terminates the grants to " _.recipient) + complaint-period-condition (format "such " _.contributor + " fails to notify " _.recipient + " of the non-compliance by some reasonable means prior to " (%n termination-period) + " " ($.plural "day") " after " _.recipient + " has come back into compliance")] + (format "However, if " restoration-condition ", then " restored-grants " are reinstated provisionally" + ", unless and until " invalidation-condition + ", and on " ..restoration-scope ", if " complaint-period-condition))) + +(def: #export (grace-period-clause grace-period) + (-> Days Text) + (let [the-grants (format "grants to " _.recipient " from a particular " _.contributor) + automatic-restoration-conditions (let [notification (format "such " _.contributor + " notifies " _.recipient + " of the non-compliance by some reasonable means") + first-offense (format "this is the first time " _.recipient + " has received notice of non-compliance with " _.license + " from such " _.contributor) + prompt-compliance (format _.recipient + " becomes compliant prior to " (%n grace-period) + " " ($.plural "day") " after reception of the notice")] + ($.and (list notification + first-offense + prompt-compliance)))] + (format "Moreover, " the-grants + " are reinstated on " ..restoration-scope + " if " automatic-restoration-conditions))) + +(def: #export (termination termination-period grace-period) + (-> Days Days Text) + (let [on-violation-of-terms (let [what (format "The rights granted under " _.license) + when (format _.recipient " fails to comply with any of its terms")] + (format what " will terminate automatically if " when))] + ($.paragraph (list on-violation-of-terms + (..grant-restoration-clause termination-period) + (..grace-period-clause grace-period))))) + +(def: #export no-retroactive-termination + (let [situation "In the event of termination" + coverage "all end user license agreements" + exclusions "(excluding licenses to distributors and resellers)" + source (format "that have been validly granted by " _.recipient " or any distributor") + scope "hereunder prior to termination" + effect "shall survive termination"] + ($.paragraph (list (format situation ", " coverage " " exclusions " " source " " scope " " effect))))) -- cgit v1.2.3