gfx: a new mark -- Shift for the OS, Uberblock for SchFS, Guru for the crash

The old logo was a thin monoline wordmark in a ring, with a grey gradient. The
kernel draws include/logo.h as a 128x128 four-bit coverage mask, so hairlines at
that size go ragged, the ring spent most of the area on nothing, and at small
sizes the S read as a 5.

Three marks, because each depicts the thing it belongs to and so they stop
competing:

  Shift       three slabs, displaced. The layer diagram in
              docs/architecture/README.md as a solid object, and the kernel's
              name as a shape. Dimensional rather than flat -- the tradition
              Paul Rand's NeXT cube belongs to, which is what the architecture
              already claims as its model.
  Uberblock   the SchFS ring: twelve slots, one of them newest. Twelve so the
              slots divide 360 exactly; an arbitrary count leaves a part slot
              crammed against its neighbour where the ring closes. The newest
              is marked by REACHING FURTHER OUT as well as by colour, because
              colour is exactly what the coverage mask discards.
  Guru        the PSOGM face, drawn for reference. Not wired in: panic.c argues
              for the ":(" on the grounds that it is "legible as a mood without
              being a picture of anything", and Guru spends that. Worth deciding
              on purpose.

mklogo.py reads ink as (255 - luminance) * alpha, so tones survive as *coverage*
rather than being flattened -- which means the old grey gradient was not
discarded, it was turned into partial transparency. It also inverts: darkest is
most ink, which the kernel draws brightest. The mask source is therefore a
separate greyscale file with the top slab darkest, or the object would be lit
from below. Two files sharing one geometry is a drift hazard and the desc in
both says so.

The splash gets it for free: ui_logo() shades per row with metal() and the
mask's own tones reinforce that gradient rather than fighting it, so the slabs
come out looking machined.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VQ7Qx8E1q1M1bbCq8QLHS2
This commit is contained in:
Nexoniarz 2026-09-12 17:14:52 +02:00
commit e80f7b287b
7 changed files with 589 additions and 477 deletions

View file

@ -0,0 +1,44 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" width="200" height="200">
<title>SchFS — Uberblock</title>
<desc>The uberblock ring: slots written round-robin, one of them newest.
Mount takes the highest-numbered slot that validates, which is the whole
consistency argument for the format.
Every slot is an explicit annular sector. An earlier version drew them with
stroke-dasharray on a circle, which is shorter to write and wrong in two ways:
a dash centred on the path start straddles the closure and renders as TWO
pieces with a seam between them, and the normal slot underneath the marked one
still drew, showing through. Neither can happen here -- the marked slot is one
shape and the slot it replaces is simply not emitted.
12 slots at 20 degrees of ink and 10 of gap, which closes at 360 exactly. The
marked slot is index 1, counting clockwise from the top.
It is marked twice over: it carries the accent, the same colour as the root at
the centre, and it reaches outward past the ring while sharing the inner edge
with every other slot. The colour is the reading on screen; the size is what
survives include/logo.h, which is a single coverage channel and keeps no
colour at all.
Stands alone, with no reference to SchOS, as projects/schfs-linux/README.md
requires.</desc>
<g fill="#3C2E85">
<path d="M85.93 20.23 A81.00 81.00 0 0 1 114.07 20.23 L110.25 41.90 A59.00 59.00 0 0 0 89.75 41.90 Z"/>
<path d="M162.05 47.93 A81.00 81.00 0 0 1 176.12 72.30 L155.44 79.82 A59.00 59.00 0 0 0 145.20 62.08 Z"/>
<path d="M179.77 85.93 A81.00 81.00 0 0 1 179.77 114.07 L158.10 110.25 A59.00 59.00 0 0 0 158.10 89.75 Z"/>
<path d="M176.12 127.70 A81.00 81.00 0 0 1 162.05 152.07 L145.20 137.92 A59.00 59.00 0 0 0 155.44 120.18 Z"/>
<path d="M152.07 162.05 A81.00 81.00 0 0 1 127.70 176.12 L120.18 155.44 A59.00 59.00 0 0 0 137.92 145.20 Z"/>
<path d="M114.07 179.77 A81.00 81.00 0 0 1 85.93 179.77 L89.75 158.10 A59.00 59.00 0 0 0 110.25 158.10 Z"/>
<path d="M72.30 176.12 A81.00 81.00 0 0 1 47.93 162.05 L62.08 145.20 A59.00 59.00 0 0 0 79.82 155.44 Z"/>
<path d="M37.95 152.07 A81.00 81.00 0 0 1 23.88 127.70 L44.56 120.18 A59.00 59.00 0 0 0 54.80 137.92 Z"/>
<path d="M20.23 114.07 A81.00 81.00 0 0 1 20.23 85.93 L41.90 89.75 A59.00 59.00 0 0 0 41.90 110.25 Z"/>
<path d="M23.88 72.30 A81.00 81.00 0 0 1 37.95 47.93 L54.80 62.08 A59.00 59.00 0 0 0 44.56 79.82 Z"/>
<path d="M47.93 37.95 A81.00 81.00 0 0 1 72.30 23.88 L79.82 44.56 A59.00 59.00 0 0 0 62.08 54.80 Z"/>
</g>
<g fill="#7C5CFF">
<path d="M132.15 11.67 A94.00 94.00 0 0 1 160.42 27.99 L137.92 54.80 A59.00 59.00 0 0 0 120.18 44.56 Z"/>
<circle cx="100" cy="100" r="20"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB