aboutsummaryrefslogtreecommitdiff
path: root/licentia/source/program/licentia/license/extension.lux
diff options
context:
space:
mode:
Diffstat (limited to 'licentia/source/program/licentia/license/extension.lux')
-rw-r--r--licentia/source/program/licentia/license/extension.lux166
1 files changed, 166 insertions, 0 deletions
diff --git a/licentia/source/program/licentia/license/extension.lux b/licentia/source/program/licentia/license/extension.lux
new file mode 100644
index 000000000..c6b368d33
--- /dev/null
+++ b/licentia/source/program/licentia/license/extension.lux
@@ -0,0 +1,166 @@
+(.module:
+ [lux #*
+ [data
+ ["." text
+ ["%" format (#+ format)]]]]
+ ["." // (#+ 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 " (%.nat 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 " (%.nat 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 " (%.nat 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))))