Skip to content

Instantly share code, notes, and snippets.

@zbraniecki
Last active December 15, 2021 05:42
Show Gist options
  • Save zbraniecki/c42d24eb55983904cf4f2a3d3b59ea2a to your computer and use it in GitHub Desktop.
Save zbraniecki/c42d24eb55983904cf4f2a3d3b59ea2a to your computer and use it in GitHub Desktop.
ICU4X Licenses (Dec 2021)
## Current Library Structure in the repo
//
├─ components/
│ ├─ component1/
│ │ ├─ src/
│ ├─ component2/
│ │ ├─ src/
│ │ ├─ data/
│ │ │ ├─ from_unicode/
│ ├─ component3/
│ │ ├─ src/
│ │ ├─ tools/
│ │ │ ├─ from_icu/
├─ utils/
│ ├─ util1
│ │ ├─ src/
│ ├─ util2
│ │ ├─ src/
LICENSE-FULL = Apache+MIT + ICU for imported + Unicode for data
==========================
In this scenario, only library called `component2` has data from Unicode and only `component3` has code from ICU.
This means that the LICENSE as written is APACHE+MIT on everything plus ICU for `component3` and Unicode for `component2`.
But the way we distribute all of those libraries is this:
//
├─ components/
│ ├─ component1/
│ │ ├─ src/
│ │ ├─ LICENSE-FULL.txt
│ ├─ component2/
│ │ ├─ src/
│ │ ├─ data/
│ │ │ ├─ from_unicode/
│ │ ├─ LICENSE-FULL.txt
│ ├─ component3/
│ │ ├─ src/
│ │ ├─ tools/
│ │ │ ├─ from_icu/
│ │ ├─ LICENSE-FULL.txt
├─ utils/
│ ├─ util1
│ │ ├─ src/
│ │ ├─ LICENSE-FULL.txt
│ ├─ util2
│ │ ├─ src/
│ │ ├─ LICENSE-FULL.txt
LICENSE-FULL = Apache+MIT + ICU for imported + Unicode for data
That means that we ship two utils and three components each saying that they're Apache+MIT
plus ICU *if there is data* and Unicode *if there is imported ICU code*. Those `ifs` are true
just for `component2` and `component3` but we carry them in each library and let the user notice
that nothing is covered by those last two parts.
===== PROPOSAL ====
//
├─ components/
│ ├─ component1/
│ │ ├─ src/
│ │ ├─ LICENSE-APACHE-MIT.txt
│ ├─ component2/
│ │ ├─ src/
│ │ ├─ data/
│ │ │ ├─ from_unicode/
│ │ ├─ LICENSE-FULL.txt
│ ├─ component3/
│ │ ├─ src/
│ │ ├─ tools/
│ │ │ ├─ from_icu/
│ │ ├─ LICENSE-FULL.txt
├─ utils/
│ ├─ util1
│ │ ├─ src/
│ │ ├─ LICENSE-APACHE-MIT.txt
│ ├─ util2
│ │ ├─ src/
│ │ ├─ LICENSE-APACHE-MIT.txt
LICENSE-FULL = Apache+MIT + ICU for imported + Unicode for data
LICENSE-APACHE-MIT = Apache+MIT
With this change, we now distribute `util1`, `util2` and `component1` with zero friction with
the Rust community under dominant license scheme and only the relevant `component2` and `component3`
are affected by our unique licensing scheme.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment