Skip to content

ship one variant, and stop asking for CET - #35

Merged
Samueru-sama merged 4 commits into
mainfrom
drop-portable-variant
Sep 8, 2026
Merged

ship one variant, and stop asking for CET#35
Samueru-sama merged 4 commits into
mainfrom
drop-portable-variant

Conversation

@Samueru-sama

Copy link
Copy Markdown
Member

Two decisions, both the operator's:

The release ships the default build only. The strict build (reads only CROSS_LIBC_DLOPEN_ROOT, never APPDIR) stays a build-time choice: cd src && make portable, measured by E87 and E88. quick-sharun sets CROSS_LIBC_DLOPEN_ROOT itself, so the strict assets had no consumer. The APPDIR fallback stays: upstream's own AppImage relies on it, and src/cld-env.h has that argument in full; CROSS_LIBC_DLOPEN_ROOT wins when both are set. The release matrix drops from twelve jobs to six.

No build asks for -fcf-protection=full. Measured in report 9.13: the flag adds six endbr64 to the shims and cannot produce the IBT property note (glibc's crti.o carries none, the linker ANDs that absence), so a CET-enforcing loader honours none of it. It stays askable with make CET_CFLAGS=-fcf-protection=full.

The case that governs it. E101 builds gl-fwd.so by the default recipe and again with the flag asked for, and requires the default to come out strictly lighter.

  • FAILS before, against the Makefile that still asked for the flag: both arms tie at 3478, the table reports 63 matched and 1 mismatched, E101 MISMATCH predicted=OK.
  • PASSES after: E101 MATCH, default 3472 against 3478, and the table reports 64/64 on x86-64.

Every one-home record moved with the total: report 01, 08, 09 and 10, the list in gates.yml, and the same list in scripts/verify-gates.sh. The aarch64 total stays where report 08 says (its skip list gains E101, so the scored count is unchanged); this PR's CI run is that measurement.

Also measured locally: build.sh default and --portable both exit 0 with the right manifest variant; the default gl-fwd.so carries 3472 endbr64; both build dirs package; the generated body describes one variant. check-drift, check-charset and verify-gates (14 gates proven) all exit 0.

One finding, named not fixed: skip E76 and skip E76b at the foot of experiments/30-run-tests.sh name a function that does not exist in that file. On an x86-64 machine with neither qemu nor an aarch64 cross compiler, E76 and E76b would fail with skip: command not found instead of skipping by name. CI never reaches that path. Left for its own decision.

The case builds gl-fwd.so by the default recipe and again with
-fcf-protection=full asked for, and requires the default to come out
with strictly fewer endbr64. A default build that requested the flag
would tie with the flag arm and fail here.

Run against the tree before the change it governs, it fails as
predicted: both arms tie at 3478, the table reports 63 matched and 1
mismatched. Stage 3 now installs make, and the required-tool check
names it.
The release shipped two builds of every object because one consumer
wanted a strict environment, and the default asked for
-fcf-protection=full, which measured as doing no protective work here:
it adds six endbr64 to the shims and cannot produce the IBT property
note, because glibc's crti.o carries no property and the linker ANDs
that absence across the link (report 9.13).

The release matrix now builds the default only, six jobs instead of
twelve. make portable stays as the packager's strict-environment
target, differing from the default by -DCLD_STRICT_ENV and nothing
else; the Makefile's CET probe is gone and the flag stays askable with
make CET_CFLAGS=-fcf-protection=full. The APPDIR fallback stays:
upstream's own AppImage relies on it, and quick-sharun sets
CROSS_LIBC_DLOPEN_ROOT itself, which wins when both are set.

E101 now passes: the default build carries 3472 endbr64 against the
flag arm's 3478, and the suite reports 64/64 on x86-64. Every one-home
record moved with the total: report 01, 08, 09 and 10, and the list in
gates.yml. verify-gates.sh carried the same list claiming to be
identical to gates.yml and had drifted to 53/53 50/50; both now say
64/64 60/60. build.sh and build-in-env.sh lose the CLD_NO_CET plumbing,
and building.md, integrating.md and the generated release body describe
one variant.
PROGRESS.md restated the evidence total and the aarch64 total, both of
which are gated numbers whose home is the report, and the one-home gate
refused a clean tree. The prose now points at report 08. The plant for
that gate named 53/53, which left the list when it moved to 64/64, so
the plant names a number the gate actually gates.
The note spelled the old totals, and one of them is a gated number
whose home is the report, so the one-home gate refused a clean tree.
The prose says what happened without restating the number.
@Samueru-sama Samueru-sama changed the title Ship one variant, and stop asking for CET ship one variant, and stop asking for CET Sep 8, 2026
@Samueru-sama
Samueru-sama merged commit 9974228 into main Sep 8, 2026
24 checks passed
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