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