branding: one mark, and PSOGM draws it
Guru and SchCotie are gone. Shift is the only mark, and the crash screen draws it where the face used to be. Guru was an icon -- a pictogram with a face, denoting one state -- that lived on the crash screen and nowhere else. Its argument was identity: `:(` is recognisably Microsoft's, and a crash screen is the single screenshot most likely to leave the machine, so it is the worst place to be wearing somebody else's face. That part holds, and it is kept in the branding README because it is the argument against any second mark. What does not follow is that the answer is a *new* mark. Shift already signs the system, it is already what the machine drew on the splash it started with, and a reader who has seen it twice before the crash recognises it faster than a face they have never seen. SchCotie was a mascot, and never existed: the file said so itself under "what this does not cover". A brief for a character nobody is about to draw is not worth carrying. So `draw_guru()` and its SVG-space geometry leave panic.c, the two `guru.svg` files are deleted, and PSOGM calls gfx_draw_logo() -- the same include/logo.h mask the loader splash and the boot console composite. At its native 128 px: there is no resampler in the crash path, and the face was scalable in a place that only ever drew it at one size. The name stays. "Purple Screen of Guru Meditation" is the Amiga nod, which panic.c's own header already called out as a separate thing from the mark. **And taking the screenshot to check it caught a regression from the TTF console work.** `gfx_draw_char()` -- the pixel-positioned path, which only PSOGM uses -- still walked `font_data[c][row]` for `row < CHAR_HEIGHT`. font_data has exactly 16 rows per glyph; CHAR_HEIGHT is the *TrueType* cell height now, about 21. So every line of the crash report drew five rows of the next character's bitmap underneath itself, and it looked like each line had been printed twice. The grid path had been updated when the cell size stopped being a constant; this one had not, because nothing routine draws text in pixel coordinates. Both go through one draw_glyph_px() now, and the bitmap's own geometry is spelled BITMAP_W/BITMAP_H so it cannot be mistaken for a cell size again. Two stale claims corrected while in there, in panic.c's header and in graphics.md: PSOGM has not dimmed-and-floated over the old screen for a while -- it clears to full purple, and the file's own code comment says why -- and there is no longer "a face that is obviously a cartoon". The website's crash section shows the mark in flat white rather than its own violets, which is what the kernel actually draws: PSOGM composites a coverage mask in one colour, and those violets sit close enough to #4B1D9A to half-disappear against it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
e577791e5e
commit
953f9c5c3c
11 changed files with 158 additions and 216 deletions
|
|
@ -109,7 +109,7 @@ good chance it is in there.
|
|||
|
||||
| | |
|
||||
|---|---|
|
||||
| [README](branding/README.md) | Shift the logo, Guru the icon, SchCotie the mascot: what each is for, the colour rule, and why a raster is committed next to its SVG. |
|
||||
| [README](branding/README.md) | Shift, the one mark: what it is for, the colour rule, why an icon and a mascot were removed, and why a raster is committed next to its SVG. |
|
||||
|
||||
## history/ — why it is the way it is
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" width="200" height="200">
|
||||
<title>Guru — the PSOGM face</title>
|
||||
<desc>The crash-screen face. Chamfered corners quote the old SchOS letterforms.
|
||||
Drawn here for reference only: kernel/core/panic.c builds it from primitives
|
||||
rather than from a bitmap, so it scales with the display and costs nothing in
|
||||
the kernel image.</desc>
|
||||
|
||||
<path fill="#7C5CFF" d="M58 24 L142 24 L176 58 L176 142 L142 176 L58 176 L24 142 L24 58 Z"/>
|
||||
<path fill="#2B0F52" d="M74 82 h16 v22 h-16 Z"/>
|
||||
<path fill="#2B0F52" d="M110 82 h16 v22 h-16 Z"/>
|
||||
<path fill="#2B0F52" d="M72 128 h56 v11 h-56 Z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 655 B |
|
|
@ -11,7 +11,7 @@ docs.html the documentation reader
|
|||
style.css the palette, transcribed from include/theme.h
|
||||
app.js the front page: the boot log types, sections fade in
|
||||
docs.js the Markdown renderer and the doc index
|
||||
Assets/ shift.svg (logo), uberblock.svg (SchFS), guru.svg (PSOGM),
|
||||
Assets/ shift.svg (logo), uberblock.svg (SchFS),
|
||||
usb.svg (downloads), pride.svg
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -358,7 +358,7 @@
|
|||
|
||||
<section class="crash reveal">
|
||||
<div class="wrap">
|
||||
<img src="Assets/guru.svg" alt="Guru, the SchOS crash-screen icon">
|
||||
<img src="Assets/shift.svg" alt="Shift, the SchOS mark, as the crash screen draws it">
|
||||
<div>
|
||||
<p class="eyebrow">When it stops</p>
|
||||
<h2>PSOGM</h2>
|
||||
|
|
|
|||
|
|
@ -326,7 +326,16 @@ header.top {
|
|||
align-items: start;
|
||||
}
|
||||
@media (max-width: 44rem) { .crash .wrap { grid-template-columns: 1fr; } }
|
||||
.crash img { width: 100%; max-width: 8rem; height: auto; }
|
||||
/* Flat white, not the logo's own violets. This is what the kernel actually
|
||||
draws: PSOGM composites the coverage mask in one colour, so a full-colour
|
||||
mark here would show something the crash screen never shows -- and those
|
||||
violets are close enough to this purple to half-disappear against it. */
|
||||
.crash img {
|
||||
width: 100%;
|
||||
max-width: 8rem;
|
||||
height: auto;
|
||||
filter: brightness(0) invert(1);
|
||||
}
|
||||
.crash .eyebrow { color: #C3AEEC; }
|
||||
.crash h2 { color: #fff; }
|
||||
.crash p { color: #DBCEF5; }
|
||||
|
|
|
|||
|
|
@ -198,14 +198,22 @@ matter more than the feature:
|
|||
`kernel/core/panic.c`. The Purple Screen of Guru Meditation. Built around three
|
||||
decisions:
|
||||
|
||||
**It does not clear the screen.** Whatever was displayed stays, dimmed and
|
||||
pushed back, with the report floating over it. A crash screen that wipes the
|
||||
display tells you the machine is gone; one that leaves your work visible tells
|
||||
you it stopped — which is both truer and much less alarming.
|
||||
**It takes the whole screen.** It used to dim what was there and float a panel
|
||||
over it, on the argument that a crash screen which wipes the display tells you
|
||||
the machine is gone while one that leaves your work visible tells you it
|
||||
stopped. That looked good and was wrong: the thing is called a Purple Screen,
|
||||
and half a screen of abandoned work behind the report is a distraction at the
|
||||
worst possible moment.
|
||||
|
||||
**It is not frightening.** No red, no capitals, no "FATAL". A calm sentence, a
|
||||
face that is obviously a cartoon, then the facts. Whoever is reading this is
|
||||
already having a bad time.
|
||||
**It is not frightening.** No red, no capitals, no "FATAL". A calm sentence,
|
||||
the Shift mark — the same one the machine drew on the splash it started with —
|
||||
then the facts. Whoever is reading this is already having a bad time.
|
||||
|
||||
The mark replaced **Guru**, a chamfered face drawn from primitives that lived
|
||||
only here. Guru's argument was identity: `:(` is recognisably Microsoft's, and
|
||||
a crash screen is the screenshot most likely to leave the machine. That holds.
|
||||
What does not follow is that the answer is a *second* mark — see
|
||||
[../branding/README.md](../branding/README.md).
|
||||
|
||||
**It says considerably more than it needs to.** Everything cheap to collect is
|
||||
collected: stop code, fault address, which CPU, which process, how far into the
|
||||
|
|
|
|||
|
|
@ -1,18 +1,29 @@
|
|||
# Branding
|
||||
|
||||
Three marks, three different jobs. They are not interchangeable and the
|
||||
difference is not stylistic.
|
||||
One mark.
|
||||
|
||||
| | | |
|
||||
|---|---|---|
|
||||
| **Shift** | *the logo* | An abstract mark. Non-human, non-animal. Signs the system. |
|
||||
| **Guru** | *the icon* | A pictogram. Denotes one state. Has a face; has no body. |
|
||||
| **SchCotie** | *the mascot* | A character. Has a body, poses and expressions. |
|
||||
|
||||
The distinction that decides everything else: **a mascot has to be able to
|
||||
do things.** An icon works once, at one size, in one state. A character has to
|
||||
work confused, pleased, asleep and from behind — which is why it costs more and
|
||||
why it is drawn last.
|
||||
There were three. **Guru**, an icon — a pictogram with a face, denoting one
|
||||
state — lived on the crash screen and nowhere else. **SchCotie**, a mascot —
|
||||
a character with a body, poses and expressions — was a brief and was never
|
||||
drawn. Both are gone for now, and may come back.
|
||||
|
||||
The reasoning that retired Guru is worth keeping, because it is the argument
|
||||
against any second mark. Guru existed to give the crash screen an identity:
|
||||
`:(` is recognisably Microsoft's, and a crash screen is the single screenshot
|
||||
most likely to leave the machine, so it is the worst place to be wearing
|
||||
somebody else's face. That part holds. What does not follow is that the answer
|
||||
is a *new* mark. Shift already signs the system, it is already what the machine
|
||||
drew on the splash it started with, and a reader who has seen it twice before
|
||||
the crash recognises it faster than a face they have never seen.
|
||||
|
||||
SchCotie went for a simpler reason: **a mascot has to be able to do things.**
|
||||
An icon works once, at one size, in one state. A character has to work
|
||||
confused, pleased, asleep and from behind — which is why it costs more, and why
|
||||
a brief for one is not worth carrying until somebody is going to draw it.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -46,61 +57,8 @@ the kernel's name (**SchIFT**) as a shape.
|
|||
- **With or without a wordmark.** Set "SchOS" beside it in **Roboto Bold**,
|
||||
which is already in the tree (`ports/Roboto`), already Apache-2.0, and already
|
||||
in `NOTICE`.
|
||||
- Non-human and non-animal, permanently. The character work belongs to
|
||||
SchCotie; a logo that starts growing a face has taken the mascot's job.
|
||||
|
||||
## Guru — the icon
|
||||
|
||||
`guru.svg`
|
||||
|
||||
The crash face. Mythic rather than cartoon — closer to a temple carving than a
|
||||
character — square or nearly so, with an expression that stays in the
|
||||
`:(` / `:|` register.
|
||||
|
||||
**Purple, and only purple, and only here.** `theme.h` states the rule it
|
||||
enforces:
|
||||
|
||||
> normal states are calm and dark; only failure is loud. PSOGM keeps the
|
||||
> full-bleed purple entirely to itself, which is what makes it mean something.
|
||||
|
||||
That purple is `PSOGM_BG #4B1D9A`, and it is deliberately **not** the accent
|
||||
`#7C5CFF`. If Guru ever appears in accent violet on a splash, a sticker or a
|
||||
README header, the deep purple stops meaning *the machine stopped* — and it is
|
||||
the only colour in the system that means anything at all.
|
||||
|
||||
So: Guru does not leave the crash screen.
|
||||
|
||||
## SchCotie — the mascot
|
||||
|
||||
*Not drawn yet.*
|
||||
|
||||
A daemon: **the process that works while nobody is watching.** The horns are a
|
||||
pun on the word; the meaning is the background job that keeps running after you
|
||||
have walked away — which is `schinit` supervising, restarting what dies, awake
|
||||
at 3am. Patient and watchful rather than mischievous.
|
||||
|
||||
Horns carry **X** — POSIX, Unix, X11 — one substitution reading three ways.
|
||||
|
||||
Two constraints that follow from the section above. A thin X is two diagonal
|
||||
strokes and dissolves at small sizes, so it wants to be **solid wedges with the
|
||||
X notched out as negative space**: the horn silhouette survives downscaling and
|
||||
the X appears as you get closer. And it needs a **turnaround** — front, side,
|
||||
three-quarter, matching heights on shared construction lines — because a
|
||||
character drawn once at one angle only ever works at that angle.
|
||||
|
||||
### The licensing point, which is not optional here
|
||||
|
||||
**The BSD daemon is copyrighted.** Marshall Kirk McKusick holds it and the terms
|
||||
are not a free licence. A character that reads as "Beastie, but purple, with X
|
||||
horns" is a derivative-work argument, and this mark would be in every image
|
||||
SchOS ships, beside a `NOTICE` file this project has been careful about.
|
||||
|
||||
The concept is not the problem. A daemon is a Greek *daimon* and a Unix
|
||||
background process — neither is ownable. What belongs to Beastie is the
|
||||
execution: the pitchfork, the sneakers, that red, that face, that pose. Horns, a
|
||||
tail and a small imp are generic and thousands of years old.
|
||||
|
||||
**Draw from the idea. Do not have a picture of Beastie open while you do it.**
|
||||
- Non-human and non-animal, permanently. If a character is ever drawn it gets
|
||||
its own mark; a logo that starts growing a face has taken that job.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -114,8 +72,18 @@ value it does not already define.
|
|||
| `SCH_BG` | `#0C0E13` | Ground. Near-black with a blue cast, because pure black reads as "switched off". |
|
||||
| `SCH_FG` | `#E6E8EC` | Primary text |
|
||||
| `SCH_DIM` | `#707784` | Secondary |
|
||||
| `SCH_ACCENT` | `#7C5CFF` | The one accent. Shift, SchCotie, anything calm. |
|
||||
| `PSOGM_BG` | `#4B1D9A` | **Failure only.** Guru's ground and nothing else's. |
|
||||
| `SCH_ACCENT` | `#7C5CFF` | The one accent. Shift, and anything calm. |
|
||||
| `PSOGM_BG` | `#4B1D9A` | **Failure only.** The crash screen's ground and nothing else's. |
|
||||
|
||||
`PSOGM_BG` is deliberately **not** the accent. `theme.h` states the rule it
|
||||
enforces:
|
||||
|
||||
> normal states are calm and dark; only failure is loud. PSOGM keeps the
|
||||
> full-bleed purple entirely to itself, which is what makes it mean something.
|
||||
|
||||
If that purple ever appears on a splash, a sticker or a README header, it stops
|
||||
meaning *the machine stopped* — and it is the only colour in the system that
|
||||
means anything at all.
|
||||
|
||||
## File formats
|
||||
|
||||
|
|
@ -154,7 +122,6 @@ shift.svg the logo, in colour
|
|||
shift-mask.svg the same geometry in greys -- see below
|
||||
shift-mask.png rasterised from it, committed on purpose
|
||||
uberblock.svg SchFS
|
||||
guru.svg the crash icon
|
||||
superseded-*.png the old wordmark, kept for reference only
|
||||
```
|
||||
|
||||
|
|
@ -189,8 +156,8 @@ If either is edited, edit both.
|
|||
|---|---|
|
||||
| Loader splash | Shift, from `include/logo.h`, shaded per row by `metal()` in `boot/common/ui.c` — silver, not accent. |
|
||||
| Kernel console / early boot | Shift, same mask, composited flat in a theme colour by `gfx_draw_logo`. |
|
||||
| PSOGM | Guru, drawn from primitives by `draw_guru()` in `kernel/core/panic.c`. Never a bitmap: it scales with the display and costs nothing in the kernel image. |
|
||||
| Serial crash report | `:(`, as text. Guru cannot be drawn in ASCII, and a mood marker in a log is not the icon. |
|
||||
| PSOGM | Shift, the same mask again, by `gfx_draw_logo()` from `kernel/core/panic.c`. At its native 128 px — there is no resampler in the crash path, and the mark was only ever drawn at one size there anyway. |
|
||||
| Serial crash report | `:(`, as text. The mark cannot be drawn in ASCII, and a mood marker in a log is not a mark. |
|
||||
| SchFS | **Nowhere yet.** `uberblock.svg` has no consumer; it is waiting for `projects/schfs-linux/` to have a README worth heading. |
|
||||
|
||||
One trap, since it has already been stepped in: `boot/common/ui.c` includes
|
||||
|
|
@ -207,10 +174,8 @@ loader must actually relink**, and that needs `clang` and `lld-link`.
|
|||
has registered or defended.
|
||||
- **No usage rules for third parties** — nothing says what someone else may do
|
||||
with them. Worth writing before anything is published.
|
||||
- **SchCotie does not exist.** Everything above it is a brief, not a
|
||||
description.
|
||||
- **Guru is drawn but not wired in.** `panic.c` still renders `:(` from
|
||||
primitives, and there is a real argument for keeping it — see the note in that
|
||||
file about being "legible as a mood without being a picture of anything".
|
||||
- **There is no icon and no mascot.** Both were removed rather than left
|
||||
half-specified. If either comes back it starts from the argument at the top
|
||||
of this file, not from what used to be here.
|
||||
- **No wordmark lockup is specified.** "Roboto Bold beside it" is not a spacing
|
||||
rule, a size ratio or a clear-space margin, and it will want to be.
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" width="200" height="200">
|
||||
<title>Guru — the PSOGM face</title>
|
||||
<desc>The crash-screen face. Chamfered corners quote the old SchOS letterforms.
|
||||
Drawn here for reference only: kernel/core/panic.c builds it from primitives
|
||||
rather than from a bitmap, so it scales with the display and costs nothing in
|
||||
the kernel image.</desc>
|
||||
|
||||
<path fill="#7C5CFF" d="M58 24 L142 24 L176 58 L176 142 L142 176 L58 176 L24 142 L24 58 Z"/>
|
||||
<path fill="#2B0F52" d="M74 82 h16 v22 h-16 Z"/>
|
||||
<path fill="#2B0F52" d="M110 82 h16 v22 h-16 Z"/>
|
||||
<path fill="#2B0F52" d="M72 128 h56 v11 h-56 Z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 655 B |
Loading…
Reference in a new issue