aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/program/licentia/license/grant.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/program/licentia/license/grant.lux')
-rw-r--r--stdlib/source/program/licentia/license/grant.lux128
1 files changed, 128 insertions, 0 deletions
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)))))