Skip to content

v3.9.3

Choose a tag to compare

@cerede2000 cerede2000 released this 19 Sep 20:54
· 296 commits to main since this release

An archive with no runtime, and two Nodes it will take

The -minimal archive refused anything but Node 24, and the reason given was
that the three native modules are prebuilt for one ABI. That had stopped being
true and nothing noticed. Measured in the versions this tree ships: the image
processor is N-API and takes any major, the SQLite driver publishes prebuilds
for 24, 25 and 26, and only the terminal still stopped at 24 — and it had
moved too, in a release from July that carries the missing ABIs for glibc and
musl both.

So that one package is bumped, exercised against a real pty rather than
assumed, and install.sh holds a list instead of a number: Node 24 or Node
26
. Node 25 is left out because it reached end of life on 31 March 2026, not
because it would fail to load. Node 26 is the ABI that becomes long-term
support in October.

Nothing that ships moves. The image, the full archive's bundled runtime, the
workflows and the manifests are still on 24, the line supported until 2028 —
one major is shipped because the archive carries one runtime. The list is what
an archive carrying none will take from the machine.

Two tests hold the halves apart. One reads the ABIs the terminal package
actually carries and refuses a list naming a major nothing has a prebuild for,
so the list cannot promise what would fail three seconds after the service
starts. The other checks the documentation against that same list rather than
against a number, because the page names Node 25 on purpose, to say why it is
not offered.

The archive without ExifTool took the wrong half of it

The -minimal archive leaves out what a distribution can supply, and ExifTool
is one of those: apt install libimage-exiftool-perl, EXIFTOOL_PATH at the
one it installed, and RAW photo metadata goes on working. It did not go on
working. Reported from somebody packaging this for a distribution, in
#9.

The archive removed exiftool-vendored*, and that pattern matches two
packages rather than one. exiftool-vendored.pl is the 21 MB of Perl — the
program itself, and the right thing to leave behind. exiftool-vendored is
the Node package that spawns it and pools the processes. With the second gone
there was nothing left to run what EXIFTOOL_PATH named, so RAW metadata was
lost rather than handed over — and quietly, because a missing ExifTool is a
supported state: the module is loaded in a try, its absence sets the handle
to null, and the application carries on without that one feature. The 1.8 MB
driver's own dependencies travelled in the archive all the same, with nothing
left that reads them.

The pattern is exiftool-vendored.* now, which keeps the driver and drops the
Perl. Two tests hold it: one runs that line out of assemble.sh against a
stand-in tree and ties what survives to the name the service actually loads,
and the release workflow installs Debian's own ExifTool and has the unpacked
archive drive it — a listing of node_modules cannot say the driver still
loads, since the pruning beside it could have taken one of its dependencies.

Only the -minimal archive was affected, in v3.9.0, v3.9.1 and v3.9.2 — every
release that has carried one. The full archive and both images ship ExifTool
and were never touched by this.

The two archives, described the same way everywhere

The README that travels inside the archive is the first thing read after
unpacking, and it was the furthest behind: it said the minimal archive brings
"no ExifTool", asked for Node 24 alone a release after the installer began
accepting 24 or 26, and carried sizes two versions old. It now says what the
archive leaves out precisely, and gives the two lines that bring 7-Zip and
ExifTool back from the distribution — the thing somebody unpacking that
archive most needs, and had nowhere to read.

The project README described one archive where there have been two since
3.9.0. The second is what a distribution packages, so it is named there now.

Every Node major named in the archive's README is now checked against the list
the installer accepts, in both directions. The documentation page has had that
check since the majors became two; the README in the archive did not, which is
exactly where it drifted.

Four measurements were remade on the archives this tree builds: it unpacks to
221 MB and the minimal one to 76, downloaded at 74 and 24.