هذه الصفحة غير متوفرة بلغتك بعد. أنت تقرأ النص الإنجليزي.
Glossary
Chromium fork
A Chromium fork is a browser compiled from patched Chromium sources, so its behaviour is changed before any page runs.
Where a fork changes the answer
A page level defence replaces what answers, after the page has loaded. A fork replaces the code that produces the answer.
The difference shows up where a page reaches cheaply. A worker and a frame start a world of their own, and a replacement made in one world is missing from the other.
No prototype is touched
Nothing in the page is a rewritten function, so asking a function about itself proves nothing.
Workers and frames agree
A thread or a frame started later reports the same device as the document that opened it.
The seed arrives once
It is handed over at launch and inherited by every renderer, including one started much later.
Your build right now
These are read in the browser you are reading this in. Inside a profile the same names answer from its seed, in C++, before the first line of the page runs.
جهازك في هذه اللحظة
- User agent
- يجري القياس على جهازك
- Platform
- يجري القياس على جهازك
- WebGL renderer
- يجري القياس على جهازك
تُقرأ في متصفحك وتُعرض هنا. لا يُرسل أي شيء إلى أي مكان.
What our patch set covers
The set is applied to Chromium sources at build time, and every part of it is named in one list in a fixed order. What is not in that list is not in the browser.
| Surface | What a page gets |
|---|---|
| Canvas and audio | a stable perturbation of the returned pixels and of the sound |
| WebGL | the profile's card strings, and pixel reads that agree with the canvas |
| WebGPU | noise on buffers an image was copied into, never on compute results |
| Fonts, screen and timezone | the profile's families and screen, and the zone of the exit country |
| navigator and client hints | platform, user agent, cores, memory, touch points and the hint headers |
| Devices, voices, network, memory | device counts, the voice list, the connection numbers and the heap ceiling |
A fork is expensive to keep
The cost is not the patch, it is the rebuild. Every Chromium milestone moves the lines a patch is anchored to, and every platform is compiled again.
So the set stays small and strict. A file has one owner, and a patch that will not apply cleanly stops the build instead of being skipped.
Applied has to mean applied
A placeholder in the list is a refusal, because a skipped patch builds a plain browser wearing our name.
Every patch comes off again
A set that cannot be removed cannot be rebased, so removal is part of what is checked.
One owner per file
Two patches over one file leave the second unable to land once the first is repaired.
How a build is accepted
One command runs the acceptance, writes one report and returns one exit code. A stand that could not be started counts as failed rather than skipped.
The finished binary is measured against the same binary with no seed, so the clean reference is the engine itself.
- 1
Seeded values are read back
The binary is launched with an exit country and a live page is asked what it sees.
- 2
Invariants hold across seeds
Several seeds are used, because a defect can follow one of them and a lucky profile would pass a bad build.
- 3
Every capability is proven
A marker is read out of the patched file in the tree, so the list is measured rather than declared.
- 4
A failed stand is not published
Accepted with a caveat means nothing failed and something could not be checked in full.
Where the engine stops
Two layers on one value would fight. Engine noise plus page noise makes a single drawing read back two ways, which is itself the mark.
So the build writes down what it closes, and the app switches off the page work the engine now handles. What is left open is closed from the page, before any script of the site runs.
What this does not do
- It does not make you anonymous. Address reputation, behaviour and the history of an account are separate problems, and they close more accounts than fingerprints do.
- It does not cover every pixel read. The eight bit path checkers use is closed, and the remaining pixel types are named as open in the set's own notes.
- It does not hide the machine's real font inventory from a lookup by unique name. Measurement is gated by the profile's list, and the lookup needs a further patch.
- It does not clear the automation bit by a patch. A public switch does that, guarded by a stand that reads the value from a real page, and it shows in the process command line.
Check it
Each line above is a file you can open and a stand that keeps it honest.
- The applied list and its patches, with no placeholders among them
- engine/patches/series · apps/desktop/test/engine-patches-real.js
- Two paths to one WebGL image are read and compared
- apps/desktop/test/две-дороги-webgl-исполняются.js
- Every declared capability is proven by a marker in the tree
- engine/scripts/опись-умений.js · apps/desktop/test/опись-умений-снимается.js
- The acceptance verdict of a build cannot be softened
- engine/приёмка-отчёт.json · apps/desktop/test/приговор-приёмки.js
Questions
- Why not do this with an extension?
- Because a replacement made in the page is a value of its own. An extension cannot reach the code that produces an answer, only the thing that hands it over.
- Can I run the engine on its own?
- You can start the binary. With no seed it behaves like stock Chromium with your own device, because the seed reaches it only through a profile launch.
- What happens when Chromium moves on?
- The set is applied to the new sources and everything is compiled again for each platform. A patch that will not apply stops the build rather than being dropped.
- Does the fork claim its real version?
- Yes. A browser claiming a milestone whose features it does not have is a mismatch a site finds in one line.
Next to this
Run the build on your own machine
Install ARMANOS, open a profile and read the start page before you visit anything.