Skip to content

List bundled third-party code in LICENSE and keep NOTICE to required notices - #1731

Open
papegaaij wants to merge 2 commits into
masterfrom
license-notice-third-party
Open

papegaaij wants to merge 2 commits into
masterfrom
license-notice-third-party

Conversation

@papegaaij

Copy link
Copy Markdown
Contributor

Fixes #1723

The source release bundles third-party code that the top-level LICENSE never mentioned. NOTICE was assembled at release time from every module's META-INF/NOTICE and was mostly attribution no license requires. This PR rebuilds both following the ASF licensing how-to.

What changes

  • LICENSE: the complete Apache License text. The old file stopped after section 9, which the Apache Trusted Releases platform's line-by-line comparison would reject. After it comes a section naming each bundled third-party component, with its version, location and license.
  • licenses/: the license texts that LICENSE points to.
    • Added: jQuery/OpenJS (MIT), Mockjax, Blanket.js 1.1.5, falafel, Prototype, Dojo (BSD), W3C, Asciidoctor.
    • Removed: the unreferenced ASM, JUnit, SLF4J and Yahoo texts.
  • NOTICE: only the ASF notice. The JRCS diff code is ASF code under ASL 1.1, and the standard ASF line is the acknowledgement that license asks for.
  • wicket-core and wicket-util jars: a META-INF/LICENSE that adds the third-party code bundled in that jar, with the full license texts.
    • wicket-core: jQuery 3.7.1 and 4.0.0, jQuery Migrate 4.0.2, MultiSelector.
    • wicket-util: JRCS under ASL 1.1, the XHTML DTDs under the W3C license.
  • Module NOTICE files: the hand-written ones (core, guice, tester, metrics) are removed, so those jars get the generated NOTICE with the current year. They said 2006-2023 and listed dependencies that aren't bundled.
  • LICENSE-binary: the binary release's LICENSE, covering what its jars bundle. release.sh previously copied the source LICENSE there.
  • release.sh: no longer concatenates NOTICE files; it only updates the copyright year.

Needs a human eye

These are judgement calls I could not settle from the files alone:

  • Behaviour 1.1 (examples/preview/behaviour.js) says only "entirely BSD licensed", with no license text. LICENSE quotes that statement instead of inventing a BSD text.
  • MultiSelector (MultiFileUploadField.js) is under "use this however/wherever you like" terms, not a recognised license. LICENSE quotes the terms. Whether that is acceptable may be a legal-discuss question.
  • SIL OFL fonts: OFL is Category B, which may be included in binary form only. The .woff/.ttf/.eot files are binary, but the .svg font variants in wicket-examples are text.
  • falafel (inside blanket.min.js) has no LICENSE file upstream any more. Its text in licenses/ is the MIT license with the copyright line from the bundled header.
  • Blanket.js: upstream added a use restriction to its LICENSE in 2020, which would make it Category X. The bundled 1.1.5 predates that, and its LICENSE-MIT at the v1.1.5 tag is plain MIT; that is the text used here.
  • Dojo 0.2.2 is dual AFL/BSD. The BSD text is Dojo's own, with the copyright line from the bundled file.
  • XHTML DTDs: they match W3C's originals apart from CVS keywords, so the change-notice condition of the W3C license does not apply.

Not covered

  • The examples war is deployed to Maven Central with about 60 third-party jars in WEB-INF/lib. Its LICENSE/NOTICE do not cover them. That is a separate decision: document all the jars, or stop deploying the war.
  • Sources jars carry no NOTICE. The generated NOTICE never reaches them. wicket-core's sources jar used to get the hand-written one; the other modules never had one.
  • Image provenance: images such as the tree theme icons in wicket-extensions can't be traced from the repository. Neither RAT nor the ATR checks them.

Verification

  • mvn clean verify -Pjs-test passes.
  • The built jars have the expected META-INF/LICENSE and META-INF/NOTICE.
  • RAT 0.18, run with the ATR's arguments on a git archive, finds no third-party license that LICENSE doesn't list. The RAT check itself is the follow-up PR.

🤖 Generated with Claude Code

papegaaij and others added 2 commits October 30, 2026 23:45
…notices

The top-level LICENSE held only the Apache License, and was cut off after
section 9: "END OF TERMS AND CONDITIONS" and the appendix were missing. It
said nothing about the third-party code the source release contains: jQuery,
jQuery Migrate, jQuery UI, QUnit, Mockjax, Blanket.js (with Esprima and
falafel), Prototype, Dojo, Behaviour, the JRCS-derived diff code, the W3C
XHTML DTDs, the SIL OFL fonts of the examples and Stickman's MultiSelector.
The ASF licensing guide asks for each of these to be listed in LICENSE. The
Apache Trusted Releases platform compares LICENSE line by line with the full
Apache License text, so the truncated file would also fail that check.

NOTICE was built at release time by concatenating every module's
META-INF/NOTICE. Most of what it collected was attribution that no license
requires: MIT and BSD code, dependencies that are not bundled at all (Guice,
AspectJ, SLF4J, Spring, ASM, ByteBuddy, jhighlight) and code that is no
longer in the tree (Script.aculo.us, HttpUnit). The JRCS attribution sat in
wicket-core although the code lives in wicket-util, and the module notices
still said 2006-2023.

Now:

- LICENSE is the complete Apache License followed by a section that names
  each third-party component, its version, its location and its license.
  The license texts are in licenses/, which no longer holds the unreferenced
  ASM, JUnit, SLF4J and Yahoo texts.
- NOTICE holds only the ASF notice. The JRCS code is ASF code under the
  Apache Software License 1.1, whose acknowledgement that line satisfies.
- wicket-core and wicket-util ship a META-INF/LICENSE that adds the code
  bundled in their jar, with the license texts in full. The hand-written
  NOTICE files of wicket-core, wicket-guice, wicket-tester and wicket-metrics
  are gone, so these jars get the generated NOTICE with the current year.
- The binary release gets LICENSE-binary, which covers what its jars bundle,
  instead of the source release's LICENSE.
- release.sh no longer assembles NOTICE; it updates the copyright year.

Applications see a different META-INF/LICENSE and META-INF/NOTICE in the
wicket-core and wicket-util jars, and nothing else changes for them. The
examples war, which bundles its dependencies, keeps its NOTICE and is left
for a separate change.

GitHub issue #1723

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The user guide's css/style.css is the Asciidoctor default stylesheet,
released under the MIT License. Running Apache RAT over the source tree
turned it up; it was missing from the list of third-party components.

GitHub issue #1723

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.

LICENSE does not cover the bundled jQuery, jQuery UI, QUnit and Mockjax

1 participant