Skip to content

fix(license): ship the canonical CERN-OHL-W-2.0 text (the file carried the S preamble) - #177

Merged
aldoruizluna merged 1 commit into
mainfrom
fix/license-cern-ohl-w-text
Oct 10, 2026
Merged

aldoruizluna merged 1 commit into
mainfrom
fix/license-cern-ohl-w-text

Conversation

@aldoruizluna

Copy link
Copy Markdown
Contributor

What was wrong

The root LICENSE was titled CERN Open Hardware Licence Version 2 - Weakly Reciprocal, but everything under the title was the CERN-OHL-S-2.0 (Strongly Reciprocal) text. A diff against SPDX text/CERN-OHL-S-2.0.txt shows only three differences: the title line and two typographic variants (Modifying and licence). GitHub's licence detection matched the body and classifies this repo as CERN-OHL-S-2.0.

Examples of what the shipped text said, compared with what W says:

Clause Shipped (S) CERN-OHL-W-2.0
Preamble "CERN-OHL-W (weakly reciprocal) and this licence, CERN-OHL-S (strongly reciprocal)" "this licence, CERN-OHL-W (weakly reciprocal) and CERN-OHL-S (strongly reciprocal)"
Preamble "The CERN-OHL-S is copyright CERN 2020" "The CERN-OHL-W is copyright CERN 2020"
1.1 "'Licence' means this CERN-OHL-S." "'Licence' means this CERN-OHL-W."
1.8 External Material missing present (this is the weak-reciprocity carve-out)
4 Making and Conveying Products strongly reciprocal, with no External Material exception 4.2 lets you convey a Product with External Material without its source
8 General no W-to-S clause you may treat W source as S if all Available Components qualify under S

12 per-cartridge LICENSE files were byte-identical copies of the same bad root text.

Why it matters

Every manifest declares commons_license: CERN-OHL-W-2.0, and internal-devops ADR-011 records W as the ruled commons licence, matching fashion-cabinet. The text this repo actually shipped gave different, stronger reciprocal terms than the ruling and the manifests.

What changed

These 13 files were replaced byte-for-byte with SPDX license-list-data text/CERN-OHL-W-2.0.txt, with no header added. The root LICENSE never had a header, so there was nothing to keep.

  • LICENSE
  • book-fold-phone/LICENSE, clamshell-dual-screen-handheld/LICENSE, extrusion-hyperobject/LICENSE, hinge-hyperobject/LICENSE, keyv2/LICENSE, locking-mechanism-hyperobject/LICENSE, microscope-slide-holder/LICENSE, microscope-slide-holder/libs/microscope-slide-hyperobject/LICENSE, microscope-slide-hyperobject/LICENSE, polydice/LICENSE, rugged-box/LICENSE, stemfie/LICENSE

The rule was to change only files that were exact copies of the bad root text (same sha1). All 12 cartridge manifests involved, including the nested microscope-slide-holder/libs/microscope-slide-hyperobject, declare commons_license: CERN-OHL-W-2.0.

What was left alone, and why

The repo has 52 LICENSE*/COPYING* files. The other 39 are unchanged:

  • 27 short W notices. These are 8-line "licensed under the CERN-OHL-W v2" pointers: ab-drive, ab-front-idler, bed-extrusion-mount, captive-nut, commons-lib, corner-idler-bracket, din-rail-clip, faircap-filter, fasteners, framing-hyperobject, gears, glia-diagnostic, gridfinity, insert-jig, motor-mount, multiboard, parametric-connector, prosthetic-socket, rubiks-hyperobject, soft-jaw, thumb-screw, toolhead-proxy, x-carriage, xy-joint, z-belt-clamp, z-drive-housing, z-joint. They name the right licence. One small point: the URL is written https:/cern.ch/cern-ohl, with a single slash.
  • 2 full W texts. custom-msh and julia-vase carry the real CERN-OHL-W-2.0 body. They differ from SPDX only in wrapping, indentation and the same three typographic variants, so their terms are already right.
  • 10 files that need an owner decision. gear-reducer, implicit-lattice-hyperobject, maze, portacosas, relief, scara-robotics, spiral-planter, superformula, torus-knot and voronoi carry a 184-line file titled "Weakly Reciprocal". It is not the canonical text: it is a reworded, shortened version. For example, its 1.2(c) reads "work making Available Licencee's public licence grants the rights", which is not CERN wording. It is not the S defect this PR fixes, so it was not changed here. The same file sits at fashion-cabinet docs/licenses/CERN-OHL-W-2.0.txt and yantra4d docs/licenses/CERN-OHL-W-2.0.txt, which is why the FC copy was not used as the source. Fixing it is a separate decision for the owner, across all three repos.

How this was verified

  • Root LICENSE before the change, compared with SPDX CERN-OHL-S-2.0.txt: 3 lines differ (title, Modifying, licence). The same file compared with SPDX CERN-OHL-W-2.0.txt: 109 lines differ.
  • After the change: all 13 files have the same sha1 as SPDX CERN-OHL-W-2.0.txt (de1a34e1…).
  • The SPDX text was checked against the sheet-hyperobjects LICENSE (already verified against SPDX). Word for word they differ only in three typographic spots: CERN- OHL-W, modifying and license in SPDX, against CERN-OHL-W, Modifying and licence there.
  • The manifest bar from CI was run locally with the pinned keystone hyperobjects-spec@142db18, without a CAD kernel: y4d-spec check over every top-level cartridge with a project.json gave cartridges=512 failures=0 notes=36. The 11 changed top-level cartridges all print ok. The nested microscope-slide-holder/libs/microscope-slide-hyperobject is not in CI's glob. Run directly, it fails one rule about mode/part ids, which has nothing to do with the licence and is not touched here.
  • python -m pytest .github/scripts -q gave 59 passed.
  • Known gap: y4d-spec's declared-vs-shipped check (structure.shipped_license_rules) matches only the title line. That is why the S body passed CI under a W title. Making the check compare the body belongs in hyperobjects-spec and is not part of this PR.

GitHub's licence detection reads the default branch, so the repo badge changes from CERN-OHL-S-2.0 to CERN-OHL-W-2.0 only after this is merged.

🤖 Generated with Claude Code

…d the S preamble)

The root LICENSE and 12 per-cartridge copies were titled "Weakly
Reciprocal" but carried the CERN-OHL-S-2.0 body (preamble, 1.1, 1.2,
section 4, no External Material definition). GitHub classified the
repo as CERN-OHL-S-2.0, while every manifest and ADR-011 declare
CERN-OHL-W-2.0.

Replace those 13 files byte-for-byte with SPDX license-list-data
text/CERN-OHL-W-2.0.txt. Other licence files are left unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@aldoruizluna
aldoruizluna merged commit b299908 into main Oct 10, 2026
7 checks passed
@aldoruizluna
aldoruizluna deleted the fix/license-cern-ohl-w-text branch October 10, 2026 08:22
aldoruizluna added a commit that referenced this pull request Oct 10, 2026
…tice URL

Ten cartridges (gear-reducer, implicit-lattice-hyperobject, maze,
portacosas, relief, scara-robotics, spiral-planter, superformula,
torus-knot, voronoi) shipped a reworded 184-line text titled
"Weakly Reciprocal" that is not CERN's licence. Replace each with SPDX
license-list-data text/CERN-OHL-W-2.0.txt byte-for-byte (sha1 de1a34e1).

The 27 short W notices wrote the URL as https:/cern.ch/cern-ohl (one
slash, copied from a typo in CERN's own W how-to example). Correct it to
https://cern.ch/cern-ohl, the form CERN's how-to rule text gives.

Completes the fleet fix after #177 (merged b299908); different files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aldoruizluna added a commit that referenced this pull request Oct 10, 2026
…tice URL (#178)

Ten cartridges (gear-reducer, implicit-lattice-hyperobject, maze,
portacosas, relief, scara-robotics, spiral-planter, superformula,
torus-knot, voronoi) shipped a reworded 184-line text titled
"Weakly Reciprocal" that is not CERN's licence. Replace each with SPDX
license-list-data text/CERN-OHL-W-2.0.txt byte-for-byte (sha1 de1a34e1).

The 27 short W notices wrote the URL as https:/cern.ch/cern-ohl (one
slash, copied from a typo in CERN's own W how-to example). Correct it to
https://cern.ch/cern-ohl, the form CERN's how-to rule text gives.

Completes the fleet fix after #177 (merged b299908); different files.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant