sharp 0.35.4 carries a production-relevant librsvg advisory (GHSA-wq5f-xc86-pv6w). Its fix, sharp
0.35.5, loads @img/sharp-libvips-linux-x64 1.3.4, which ships no licence material either. This adds
the reviewed supplement for that exact package (ADR 0052) and moves the packager's native proof to
sharp 0.35.5, so a later 0.2.1 release can package it on linux-x64-glibc. Nothing in module-pack's
code changes: supplement selection is already by exact name, version, and content digest.
- Supplement: license-supplements/@img/sharp-libvips-linux-x64/1.3.4/
- content digest ekklesia-content-v1:sha256:2927fe11493461fa34847191d0b9b1c6441007c3e99f306e5708cb07fb0a5e59;
- 190 components and 146 hashed texts;
- assembled with the same method as 1.3.3's, from sharp-libvips v1.3.4's own inputs. That method
reproduces the 1.3.3 supplement byte for byte.
- PROVENANCE.md records:
- the 27 upstream archives and five build-time patches, by sha256;
- the librsvg 2.63.2 crate reproduction (cargo 1.99.0; Cargo.lock 5723e14c…);
- rustc 75a75c3e…;
- every change from 1.3.3.
- Notable: sharp-libvips v1.3.4 now states cairo is used under MPL 1.1, not MPL 2.0. cairo ships
that text itself, so the standard MPL 2.0 text is no longer added for cairo; selectors still
carries it.
- No legal conclusion: the LGPL and MPL source-availability determination stays open, as for 1.3.3.
- The 1.3.3 supplement is unchanged, and still proven: module-pack keeps sharp 0.35.4 as a test-only
devDependency alias (`sharp-0.35.4`). Each supplement is pinned against its real installed
libvips, and each matches only its own.
- Native proof fixture: sharp 0.35.4 → 0.35.5. The closure has the same shape: sharp, @img/colour,
detect-libc, semver, and @img/sharp-linux-x64 0.35.5 with @img/sharp-libvips-linux-x64 1.3.4.
The runtime read from the binaries is unchanged: Node-API 9, glibc >= 2.28, x86-64.
- Docs: the module guide's note on available supplements.
No version bump, no publication, no tag.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
15 KiB
Provenance: license supplement for @img/[email protected]
This is the human-readable record of how the reviewed material in supplement.json was assembled
(ADR 0052). The packager does not read this file. It reads only supplement.json and the texts that
file lists, each one named by its SHA-256.
Review of this supplement is project and code review of a build input. It checks that the material matches the sources named below. It is not legal review. It does not establish that every redistribution obligation for this binary is met. In particular, it does not decide whether or how the source-availability obligations of its LGPL and MPL components are met, which remains open.
The supplement for 1.3.3 beside this one is unchanged and still applies to that version. This one was assembled the same way, from 1.3.4's own inputs; Changes from 1.3.3 lists every difference.
The package
| Field | Value |
|---|---|
| Package | @img/sharp-libvips-linux-x64 1.3.4, from the npm registry |
| npm integrity | sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw== |
| Declared licence | LGPL-3.0-or-later |
| Content digest | ekklesia-content-v1:sha256:2927fe11493461fa34847191d0b9b1c6441007c3e99f306e5708cb07fb0a5e59 |
It is the libvips package sharp 0.35.5 loads on Linux x64 with glibc, through
@img/sharp-linux-x64 0.35.5.
The content digest is over the six files the packager copies: README.md, package.json,
versions.json, lib/index.js, lib/glib-2.0/include/glibconfig.h, and
lib/libvips-cpp.so.8.18.7. It was computed twice and gave the same result both times: once from
the copy pnpm installed, and once from the registry tarball extracted directly.
The package ships no licence text and no notices. Its README lists 29 libraries and the licence each
is used under, mostly as links. lib/libvips-cpp.so.8.18.7 is one shared object with those
libraries built into it. Like 1.3.3's, it dynamically links only the host's libstdc++.so.6,
libgcc_s.so.1, and glibc libraries, and needs no glibc symbol version newer than GLIBC_2.28.
What was built into the binary
The build is sharp-libvips v1.3.4:
- source:
https://github.com/lovell/sharp-libvips/archive/refs/tags/v1.3.4.tar.gz; - sha256:
a8e96acb479c9bc1a5b7950f8f25aa6c8e1ef3a19755b45cf2f00d506aeaccc0.
The build is defined by build/posix.sh, platforms/linux-x64/Dockerfile, and
versions.properties. Its versions.properties matches the package's own versions.json.
- C and C++ libraries. 27 libraries are built from the upstream archives below, at exactly the
URLs
build/posix.shfetches.proxy-libintlis listed inversions.jsonbut is built only for musl and macOS, not for linux-x64 (glibc). It is therefore not a component of this binary.- Highway is built, because
WITHOUT_HIGHWAYis unset for linux-x64.
- Build-time patches.
build/posix.shapplies five patches it downloads while building, listed under Build-time patches with the SHA-256 of each as downloaded for this record. GitHub generates.patchresponses on request, so a later download is not guaranteed to be byte-identical. None of them changes a licence, a licence file, or a Cargo manifest or lockfile. The librsvg patch is new in v1.3.4 (see below); the other four were applied by v1.3.3 too. - gvdb. glib is configured with
--force-fallback-for=gvdb, so the gvdb subproject shipped inside glib's archive is built in. Its LGPL-2.1-or-later files are taken from that archive. - librsvg's Rust crates.
- What the build does. It edits
rsvg/Cargo.tomlandlibrsvg-c/Cargo.toml, dropping thegifandwebpimage features and thepdfandpscairo features. It runscargo update --workspace, then applies GNOME/librsvg commit9106011db93d701728ac2c9da50c9ab2c1bb5dc6("Ensure embedded image memory limits are enforced"), which changesinclude/librsvg/rsvg.h,rsvg-convert.rst,rsvg/src/api.rs, andrsvg/src/document.rsonly. It then buildslibrsvg-cwithcargo cbuild --locked --release --target x86_64-unknown-linux-gnu, with neither the AVIF nor the pixbuf feature (no dav1d, pixbuf disabled). - How it was reproduced. In
rust:1-slim(cargo 1.99.0), with the same edits, librsvg 2.63.2's shippedCargo.lock(sha256e79e2a2735a0b5b151bb4133becd3008223fabedd34a8b787a872edab9854941) was updated withcargo update --workspace, and the patch was then applied; it applied cleanly.- That removed only the crates the edits drop (color_quant, gif, image-webp, and weezl). It changed no other version, so the compiled set follows from the shipped lockfile.
- The resulting
Cargo.lockhas sha2565723e14ce316e9058c76257848e18ab52624c98d16f758b5f8a73b5007b2ab8b.
- The crate set.
cargo tree -p librsvg-c --features capi --target x86_64-unknown-linux-gnu -e normallists the crates. Procedural-macro crates are included, which is conservative. - Where the files come from. Each crate's licence files are taken from its published
.cratefile. The crate's sha256 is thechecksumfrom thatCargo.lock. - Exceptions.
selectors0.40.0 (MPL-2.0) ships no licence file, so it carries the standard MPL-2.0 text.mutants0.0.4 (MIT) ships no licence file. It is a no-op attribute macro that runs only at compile time and contributes no code to the binary, so it is not a component.
- What the build does. It edits
- The Rust standard library.
- The binary records
/rustc/75a75c3e0a67d3fa3d03982775f5bb0356e7b510/…paths. That is a nightly rustc commit, merged on 2026-09-26, the day before the sharp-libvips v1.3.4 sources are dated. - Its std lockfile (
library/Cargo.lock) pins the five crate versions that are visible in the binary's strings: addr2line 0.27.1, gimli 0.34.0, hashbrown 0.17.1, miniz_oxide 0.9.1, and rustc-demangle 0.1.28. - Where the files come from.
COPYRIGHT,LICENSE-APACHE,LICENSE-MIT, andlibrary/compiler-builtins/LICENSE.txtare taken from that commit. - The crates covered. These are std's crates.io dependencies for x86_64-unknown-linux-gnu, read
from
library/std/Cargo.toml's target sections at that commit:- addr2line, adler2, cfg-if, foldhash, gimli, hashbrown, libc, memchr, miniz_oxide, object, and rustc-demangle;
- each with its
.cratefile's licence files, at the versions and checksumslibrary/Cargo.lockrecords.
- Not covered, because it is not linked into this target:
- build-only: cc, shlex, find-msvc-tools;
- test-only: rand, rand_core, rand_xorshift, and getopts (used only by the
testcrate); - compiler-only: rustc-literal-escaper (used only by the
proc_macrocrate); - other platforms: dlmalloc, fortanix-sgx-abi, hermit-abi, moto-rt, r-efi, r-efi-alloc, unwinding, vex-sdk, wasip1, wasip2, wasip3, wit-bindgen.
- The binary records
- Not redistributed here. The binary dynamically links the host's
libstdc++.so.6,libgcc_s.so.1, and glibc libraries. They come from the system that loads the package, so they are not part of this package.
Standard texts added
| Text | Source | sha256 |
|---|---|---|
GNU LGPL 3.0, for the package's declared LGPL-3.0-or-later |
https://www.gnu.org/licenses/lgpl-3.0.txt | e3a994d82e644b03a792a930f574002658412f62407f5fee083f2555c5f23118 |
| GNU GPL 3.0, which the LGPL 3.0 incorporates | https://www.gnu.org/licenses/gpl-3.0.txt | 3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986 |
| MPL 2.0 | https://www.mozilla.org/MPL/2.0/ (text file index.f75d2927d3c1.txt) |
3f3d9e0024b1921b067d6f7f88deb4a60cbe7a78e76c64e3f1d7fc3b779b9d04 |
The MPL 2.0 text is carried for selectors only, which ships no licence file.
cairo. sharp-libvips v1.3.4's THIRD-PARTY-NOTICES.md and the package README state that cairo is
used under the Mozilla Public License 1.1. (v1.3.3 stated MPL 2.0, and its supplement therefore added
the standard MPL 2.0 text for cairo.) cairo ships the MPL 1.1 text itself, as COPYING-MPL-1.1, so
this supplement carries cairo's own COPYING, COPYING-LGPL-2.1, and COPYING-MPL-1.1 and adds no
standard text for it.
Licence names in supplement.json are as sharp-libvips's THIRD-PARTY-NOTICES.md states them for
each library, and as each crate's Cargo.toml declares it. They are recorded, not determined.
Upstream archives (C and C++ libraries)
Each archive was downloaded from exactly the URL build/posix.sh uses for the versions in
versions.properties:
| Archive | sha256 |
|---|---|
cairo-1.18.6.tar.xz |
1c767308174337a74694da0f3ec069c271452163a1ef4540964c50c301f157d4 |
cgif-0.5.4.tar.gz |
83a70a15bc2da41f081a44ebc58ee48e2e1d524a6d3fdb4a24064afa08d5ad4d |
expat-2.8.5.tar.xz |
1e727b8933ec51a77a9a9d9afcf8e688bce45d907c13e36ab7393fe36e703182 |
fontconfig-2.18.3.tar.gz |
9ae01e1d53acdef56010c5451cd34aa41d325b2faccd8606448d8fa01b2496b3 |
freetype-2.14.3.tar.gz |
dc49de6b01a266eef4876a4dd34d9842c475d3e28ff2eff63bd2fb760ab56261 |
fribidi-1.0.17.tar.xz |
6949dcde27d41cebad1fd741fcafc36d55a1020d2d872d4a6eb3914caabbada2 |
glib-2.90.0.tar.xz |
17d15cac2af80a33271127408e0abc2748eb297c595c2a26409e81e14e7d1b8f |
harfbuzz-14.5.0.tar.gz |
97ec7488a46b974e18e08ee774af93173e7e1dbf738424796eb315ebcb735ec5 |
highway-1.4.0.tar.gz |
e72241ac9524bb653ae52ced768b508045d4438726a303f10181a38f764a453c |
lcms2-2.19.1.tar.gz |
bfc54f7bab59fbc921012014a8032e4cba4abd46db47d46b76416a8c0b2815c8 |
libaom-3.15.1.tar.gz |
8ca0c52746174603500f0adb6f2a215d69c9ca2aab2acb3caa06fb791d8d01bf |
libarchive-3.8.9.tar.xz |
888c934f9d95648ecb9163dc8e23ab80a476ecb81a8f1154704a227b5b676dde |
libexif-0.6.26.tar.xz |
4a055ed6575e61ca46c3172be3c753cc16c9becd0f99ec71d58dd0e471476c0c |
libffi-3.8.0.tar.gz |
7da3e2d9a171eb0a038f592ecad3ff2bb2550f3496d87b3b29ad0cf4430c0db4 |
libheif-1.23.5.tar.gz |
fd9036064c4432f0550d15072ddf34956a248279ee9aeaff0fba3fa0f77d8f1a |
libimagequant-2.4.1.tar.gz |
47d2a84b7b1052975c9d50a3d4e3cacbf57b43d84a4c3131210848ead9964dfb |
libpng-1.6.58.tar.gz |
a9d4df463d36a6e5f9c29bd6f4967312d17e996c1854f3511f833924eb1993cf |
librsvg-2.63.2.tar.xz |
852b18e1a00b8605528825a27dc7748bff2a5dd254028f59dc22a34ea57e81b6 |
libtiff-v4.7.2.tar.gz |
62b15f44c10106065211efa22a2dc77937bd97ee1f6e3afd2c9659010de112eb |
libultrahdr-2.0.2.tar.gz |
aa8d193bb887c348c419780511dd03b374f4e07af8812b6d3f80c8537cf1ef2c |
libwebp-1.6.0.tar.gz |
e4ab7009bf0629fd11982d4c2aa83964cf244cffba7347ecd39019a9e38c4564 |
libxml2-2.15.4.tar.xz |
98087fd181d9070724f3fbc65c7377db03038eb92bd882374daff44940138821 |
mozjpeg-0826579.tar.gz |
b680167bd5d9afebdd576a12f8c49d2c9066a3b92ef96a2b2c5f7829b8600fe5 |
pango-1.58.2.tar.xz |
342385b6ca3b7c73455d7c80a13b7dbe4489e00bc3bd4c5bd6ed4dce421e374a |
pixman-0.46.4.tar.gz |
d09c44ebc3bd5bee7021c79f922fe8fb2fb57f7320f55e97ff9914d2346a591c |
vips-8.18.7.tar.xz |
5baaead3b0bb20ffdb9e9ff09aa9fda08620923df77b63b436654cb5e0b3bf94 |
zlib-ng-2.3.3.tar.gz |
f9c65aa9c852eb8255b636fd9f07ce1c406f061ec19a2e7d508b318ca0c907d1 |
Build-time patches
Patch, as build/posix.sh downloads it |
sha256 as downloaded on 2026-10-09 |
|---|---|
| https://gist.github.com/kleisauke/284d685efa00908da99ea6afbaaf39ae/raw/bdad5489a61c217850631571caf57f5db6ea8b2c/glib-without-gregex.patch | b1f2930a11292e529de137c7eb723850e0cc0969b1a2b0358196389312acd272 |
| https://github.com/mozilla/mozjpeg/commit/f90668e0e4fb79c81e1f24a0ccc0e2090af761bf.patch | a65f87cadf3a6052e44d6314c906f6e2891352f82646b8a6f0b8fcf2c1891e7c |
| https://github.com/GNOME/librsvg/commit/9106011db93d701728ac2c9da50c9ab2c1bb5dc6.patch | 8b841d2ec8feb964fa76859075e0e0c41b69136ba143cf0d26469d9bebc19231 |
| https://patch-diff.githubusercontent.com/raw/google/libultrahdr/pull/383.patch | 57658db2a11ae964755e513b01db21bcfa408c350b11b3a6ef9bc8576fb749ba |
| https://gist.githubusercontent.com/lovell/313a6901e9db1bf285f2a1f1180499e4/raw/3988223c7dfa4d22745d9392034b0117abef1446/libvips-cpp-soversion.patch | 256b7d6f8c973bb53b20cff5171c7117d6b35d3aa4e72d22cb906f4fe1e2c890 |
Rust standard library sources
File at rustc 75a75c3e0a67d3fa3d03982775f5bb0356e7b510 |
sha256 |
|---|---|
COPYRIGHT |
172020dbfd5b53a226dfde77616190a48dcff519b0bc0e6deb91a8450782c4af |
LICENSE-APACHE |
62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a |
LICENSE-MIT |
b71bd43a069ca0641a9ecfe585ca7b3c53b5cc1608f8b68321168698e28b5ea1 |
library/compiler-builtins/LICENSE.txt |
ab6eec6caf0fa5775e411c7a8bc6a45c4ef2956b0980b157ab74fc5cd62a928b |
library/Cargo.lock |
45e36114b9fbeb1a778c470ea4e3a6e31b9ac2029de0d9a7077abac757ec0b29 |
Each crate's .crate source and sha256 are recorded in that crate's source in supplement.json.
Changes from 1.3.3
Computed by comparing the two supplements, not by editing 1.3.3's.
- Libraries. Eleven of the 27 moved: aom 3.15.0 → 3.15.1, cairo 1.18.4 → 1.18.6, cgif 0.5.3 → 0.5.4, expat 2.8.3 → 2.8.5, fribidi 1.0.16 → 1.0.17, glib 2.89.4 → 2.90.0 (and its gvdb), harfbuzz 14.3.1 → 14.5.0, libheif 1.23.2 → 1.23.5, librsvg 2.62.91 → 2.63.2, libvips 8.18.6 → 8.18.7, libxml2 2.15.3 → 2.15.4. The other sixteen archives are byte-identical to 1.3.3's.
- Licence files. In the eleven moved archives, no licence file was added, removed, or renamed.
One changed: fribidi's
COPYING, still the GNU LGPL 2.1, with re-indented text and the FSF's postal address replaced by its web address. The new file is carried as shipped. - cairo's stated licence. MPL 2.0 → MPL 1.1, as above; the standard MPL 2.0 text is no longer carried for cairo.
- librsvg's crates. 141 → 147:
- added: core_detect 1.0.0, multiversion 0.9.0, multiversion-macros 0.9.0, multiversion_no_op 1.0.0, rustversion 1.0.23, simdutf8 0.1.5, and miniz_oxide 0.9.1 beside 0.8.9;
- removed: tinyvec_macros 0.1.1;
- 48 crates moved to another version.
- The Rust standard library. The rustc commit moved, to
75a75c3e…. Its licence files are byte-identical to the ones taken at787af2b8…, and the eleven linked std crates have the same versions and checksums. - sharp-libvips's own files.
THIRD-PARTY-NOTICES.mdchanged only in cairo's line;LICENSEis unchanged. - Totals. 184 → 190 components, 143 → 146 texts: 8 texts added (fribidi's
COPYING, v1.3.4'sTHIRD-PARTY-NOTICES.md, and the new crates' licence files) and 5 no longer needed (fribidi 1.0.16'sCOPYING, v1.3.3'sTHIRD-PARTY-NOTICES.md, and tinyvec_macros's three licence files).
Open questions this supplement does not answer
- Source availability. The LGPL components (libvips, glib, gvdb, pango, fribidi, libexif, libheif, librsvg, cairo under the LGPL alternative) and the MPL components (cairo and the MPL Rust crates) carry source-availability obligations. Whether and how those are met when this binary is redistributed has not been determined. Recording the upstream source locations and patches above does not determine it.
- Upstream accuracy. The licence each library is used under is sharp-libvips's statement. For example, it states that the LGPL libraries are used under LGPLv3 through the "any later version" clause, and that cairo is used under MPL 1.1. These statements are recorded, not verified.