the platform's system font belongs to the operating system claimed
Check id system-font-vs-claimed-os
What an ordinary browser yields
At least two CSS2 system-font keywords resolve to families belonging to one operating system, and that is the operating system the user agent claims.
What a detector infers
The CSS2 system-font keywords — caption, icon, menu, message-box, small-caption and status-bar — are resolved by the HOST platform's font APIs, not by the page and not by anything the user agent controls. Read one back through getComputedStyle and the operating system underneath answers: Windows returns Segoe UI, macOS returns -apple-system, a GNOME desktop returns Cantarell. Changing navigator.platform or the user agent does not move them, because nothing in that path is consulted. This row therefore holds the operating system a browser CLAIMS against the one its font stack is actually running on. It exists because of a gap that was measured rather than assumed. The audit's other OS oracles — the libm route through Math.tanh, the hyphenation dictionaries, the CPU-architecture Client Hint, the Keyboard API, performance.memory — are all Chromium surfaces. Run against a Gecko build presenting a Linux persona on a Windows host, every one of them returned N/A, which meant an entire class of browser could claim any operating system and nothing below the JavaScript layer would contradict it. The CSS2 keywords work on every engine, and a WebKit build presenting a macOS user agent on a Windows host was measured resolving all six of them to Segoe UI — the host's font, under a claim of a different platform. This is also the one check on this page that carries a lookup table, so it is worth being explicit about how the table is used: ONLY TO RECOGNISE, NEVER TO EXPECT. There is no per-OS list of what a system font ought to be, because that is exactly the kind of table that rots when a desktop environment changes its default. A family the table does not recognise, a generic answer such as sans-serif, or a cross-platform face such as Arial simply does not vote; with fewer than two recognised votes, or with votes that disagree about which OS they come from, the row declines. A new operating system, a themed desktop, or a browser that answers a generic all produce silence rather than an accusation.
How to resolve it
These keywords are answered by the platform beneath the browser, which is why they survive a user-agent change. A persona presenting a different operating system has to spoof the system-font resolution alongside everything else, and doing that properly means the font stack rather than a JavaScript override, since the value arrives through getComputedStyle from the style system. The more robust alternative is to run on the operating system being claimed — the same host mismatch shows up in font metrics and in text rasterisation, not only here.
Read in the wild by
Camoufox (measured)
Not a sighting of a failure, but of the surface mattering. Camoufox's maintainers list "font leaks between OSes" as a carried-forward, high-priority defect describing exactly this — the CSS2 keywords resolving to the real host system font regardless of the spoofed navigator.platform, biting only when the spoofed OS differs from the build's. The current upstream build defends it: forced to a macOS persona on a Windows host it returned -apple-system for all six keywords, and forced to Linux it returned a generic, which this row declines on. Recorded because it establishes the vector is real and actively defended rather than hypothetical.
Camoufox 0.5.4 forced to os=macos: all six keywords "-apple-system", navigator.platform "MacIntel" — 0/6 leaked. Forced to os=linux: all six "sans-serif", declined. Playwright's WebKit under a "Macintosh; Intel Mac OS X" user agent on the same Windows host: all six "Segoe UI". Stock Chrome 150, Firefox 151 and CloakBrowser on Windows: Segoe UI under a Windows claim.
camoufox.comEvery attribution traces to a published artifact. See the sources and their limits.
Other checks in Engine & OS oracles
- The measured JS engine matches the engine the User-Agent claims
js-engine-identifier-vs-uaTwo values are read straight out of the JavaScript engine itself: the character length of the RangeError message thrown by (-1).toFixed(-1)… - Math.tanh rounds the way the claimed OS's libm rounds
math-tanh-os-vs-uaIEEE 754 fixes how a double is stored but does not require transcendental functions to be correctly rounded, so every operating system's C… - which OS hyphenation engine the browser hyphenates through
hyphenation-engine-osWhen CSS asks a browser to hyphenate a long word, the break points come from a dictionary supplied by the operating system — and the… - the CPU architecture matches the architecture the browser claims
cpu-arch-nan-vs-uachIEEE-754 fixes the exponent and the quiet bit of a NaN but leaves the sign bit to the hardware, and the hardware disagrees: an x86 FPU… - the three heap numbers describe a possible heap
jsheap-triplet-orderingThis check replaces a retired one, and the swap is the lesson. - typefaces the claimed OS ships as separate faces measure as separate faces
claimed-os-typefaces-are-distinctA font request is answered by the host's font stack, not by the browser and not by anything the user agent sets, so changing…
Clearcote is a browser built for fingerprint coherence
It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.
This audit takes no position on how Clearcote scores on Engine & OS oracles checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.
See the other checks in Engine & OS oracles — the family system-font-vs-claimed-os belongs to.