diff --git a/docs/Website/Assets/pride.svg b/docs/Website/Assets/pride.svg index 96ecebd..c18ea25 100644 --- a/docs/Website/Assets/pride.svg +++ b/docs/Website/Assets/pride.svg @@ -1,106 +1,57 @@ - - - - - Progress Pride flag - The six-stripe rainbow with the Progress chevron: white, pink and light + + Progress Pride flag + The six-stripe rainbow with the Progress chevron: white, pink and light blue for trans people, brown and black for queer people of colour and for those lost to AIDS. It sits in the top bar every day of the year, which is - the whole point of it. - - - - - - - - - - - - - + the whole point of it. + + Drawn as cloth rather than as a swatch, to match the rest of the site: two + soft folds run down it, light from the upper left catches the crest of each, + and the edge facing the light carries a thin highlight. The colours under the + shading are the flag's own and are not adjusted. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/Website/Assets/shift.svg b/docs/Website/Assets/shift.svg index ed9d5ba..13fde78 100644 --- a/docs/Website/Assets/shift.svg +++ b/docs/Website/Assets/shift.svg @@ -8,20 +8,101 @@ without it the slab has no thickness where it is widest, and the corner reads as a hole rather than an edge. + Drawn the way Niveus draws a key: light falls from the upper left, so every + top face is brightest at its far-left corner and every edge that faces the + light carries a thin specular line. The front faces are lit from above and + darken towards the ground; the end walls face away and are darkest. Each slab + casts a soft shadow on the one below it, which is what makes the stack read + as three objects rather than three stripes. + Geometry is shared with "shift-mask.svg"; see that file. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + - - - + + + + + + - - - + + + + + + diff --git a/docs/Website/Assets/uberblock.svg b/docs/Website/Assets/uberblock.svg index 2a60242..fe3e2e9 100644 --- a/docs/Website/Assets/uberblock.svg +++ b/docs/Website/Assets/uberblock.svg @@ -20,25 +20,88 @@ survives include/gfx/logo.h, which is a single coverage channel and keeps no colour at all. + Drawn as Niveus draws a dial: the slots are raised keys set into a groove + cut into the surface, bevelled by one light from the upper left, and the + newest slot and the root are lit from inside. The geometry is unchanged. + Stands alone, with no reference to SchOS, as projects/schfs-linux/README.md requires. - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + diff --git a/docs/Website/Assets/usb.svg b/docs/Website/Assets/usb.svg index 1b35037..2b99dd1 100644 --- a/docs/Website/Assets/usb.svg +++ b/docs/Website/Assets/usb.svg @@ -4,24 +4,87 @@ no optical drive in the plan -- the stick is the machine's second disk, and on a Chromebox it is the only one that matters. - Drawn to the same rule as the other marks here: two tones, geometry only, and - the accent spent in exactly one place. That place is the activity light, - because it is the part of a USB stick that tells you something is happening -- - the same job the accent does everywhere else in this palette. + Drawn as an object, the way Niveus draws its controls: a moulded body lit from + the upper left, with a soft rim of light along the edges that face it and a + contact shadow on the ground; a brushed-steel connector whose two contact + windows are cut into it rather than painted on. The accent is still spent in + exactly one place, the activity light -- the part of a USB stick that tells + you something is happening -- and here it glows. - The connector's two contact windows are real holes (fill-rule evenodd) rather - than shapes filled with the background colour, so the mark survives being put - on a surface that is not the page background. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/Website/app.css b/docs/Website/app.css index 596cc53..c29808c 100644 --- a/docs/Website/app.css +++ b/docs/Website/app.css @@ -90,20 +90,14 @@ /* --- The console ----------------------------------------------------------- */ /* - A terminal is a recess, not a card that happens to hold monospace: the - material says "this is a window into the machine" before the text does. + A terminal is a window into the machine, so it is drawn as one: a solid + .nv-window whose body is a recess the log is typed into. The traffic lights + are decoration here -- nothing on this page can be closed -- so they are + spans, hidden from assistive tech, rather than buttons that do nothing. */ .console { - overflow: hidden; -} - -.console__bar { - display: flex; - align-items: center; - gap: var(--nv-space-3); - padding: var(--nv-space-2) var(--nv-space-3); - border-block-end: var(--nv-border-width) solid var(--nv-color-border-subtle); + min-inline-size: 0; } .console__log { @@ -118,7 +112,7 @@ } /* The cursor the boot log types behind. */ -.console__log::after { +#bootlog::after { content: ""; display: inline-block; inline-size: 0.6em; @@ -128,50 +122,38 @@ animation: console-blink 1.1s steps(2, start) infinite; } +/* Only the boot log types; a finished transcript is as tall as it is. */ +.console__log:not(#bootlog) { min-block-size: 0; } + @keyframes console-blink { 50% { opacity: 0; } } @media (prefers-reduced-motion: reduce) { - .console__log::after { animation: none; } + #bootlog::after { animation: none; } } -/* --- Origin, as a timeline -------------------------------------------------- */ +/* --- Origin, as steps ------------------------------------------------------- */ /* The rail is not decoration: these steps happened in this order, and the - order is the claim the section makes. A grid would lose it. + order is the claim the section makes. A grid would lose it. .nv-steps cuts + the rail into the surface and lights what is done; all this adds is the + measure, because a step is a paragraph and not a label. */ -.timeline { - list-style: none; - margin: 0; - padding: 0; - display: flex; - flex-direction: column; - gap: var(--nv-space-8); - border-inline-start: var(--nv-border-width) solid var(--nv-color-border); - padding-inline-start: var(--nv-space-6); -} - -.timeline__step { - display: flex; - flex-direction: column; - gap: var(--nv-space-2); +.origin .nv-steps__body { max-inline-size: var(--nv-measure); - position: relative; + padding-block-end: var(--nv-space-4); + display: flex; + flex-direction: column; + gap: var(--nv-space-1); } -.timeline__step::before { - content: ""; - position: absolute; - inline-size: var(--nv-space-2); - block-size: var(--nv-space-2); - border-radius: var(--nv-radius-full); - background: var(--nv-color-accent); - inset-inline-start: calc(var(--nv-space-6) * -1 - var(--nv-space-1)); - inset-block-start: var(--nv-space-1); +.origin .nv-steps__title { + font-size: var(--nv-font-size-lg); } -.timeline__when { - color: var(--nv-color-text-tertiary); +.origin .nv-steps__text { + font-size: var(--nv-font-size-md); + color: var(--nv-color-text-secondary); } /* --- The stack -------------------------------------------------------------- */ @@ -226,29 +208,6 @@ .needs { grid-template-columns: repeat(2, 1fr); } } -/* --- Numbers ---------------------------------------------------------------- */ - -.figures { - display: grid; - gap: var(--nv-space-4); - grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); -} - -/* A card carries no padding of its own -- its parts do -- and a stat tile has - no parts. */ -.figure { - display: flex; - flex-direction: column; - gap: var(--nv-space-1); - align-items: flex-start; - padding: var(--nv-space-5); -} - -.figure__value { - font-variant-numeric: tabular-nums; - letter-spacing: var(--nv-letter-spacing-tight); -} - /* --- PSOGM ------------------------------------------------------------------ */ .crash { @@ -309,18 +268,15 @@ /* --- Cards ------------------------------------------------------------------- */ -/* Niveus's reset makes images block-level, which is right nearly everywhere - and wrong for a mark that belongs beside a title. A flex row rather than +/* A feature's tile belongs beside its title, not above it. A flex row rather than `display: inline`, so the two stay aligned whatever the title does. */ -.nv-card__title:has(.cardmark) { +.nv-card__title:has(.nv-tile) { display: flex; align-items: center; - gap: var(--nv-space-2); + gap: var(--nv-space-3); } -.cardmark { - inline-size: 1.2em; - block-size: 1.2em; +.nv-card__title .nv-tile { flex: none; } diff --git a/docs/Website/download.html b/docs/Website/download.html index 24ed328..784f639 100644 --- a/docs/Website/download.html +++ b/docs/Website/download.html @@ -199,45 +199,57 @@ -
    -
  1. - Step one -

    The loader

    -

    +

      +
    1. + 1 +
      + Step one +

      The loader

      +

      A splash, and F8 for boot options — including the resolution the whole machine will come up in. It is a PE/COFF loader built with clang and lld-link; there is no BIOS path, so the firmware has to be in UEFI mode. -

      +

      +
    2. -
    3. - Step two -

      The kernel log

      -

      +

    4. + 2 +
      + Step two +

      The kernel log

      +

      On screen, from the first line that can draw. Cores, the PCI bus, the network card, the filesystem. If it stops, it stops somewhere you can read. -

      +

      +
    5. -
    6. - Step three -

      A shell

      -

      +

    7. + 3 +
      + Step three +

      A shell

      +

      schinit starts one on the console and a second on tty2. mksh is /bin/sh, with zsh beside it and the real toybox userland behind both. -

      +

      +
    8. -
    9. - Step four -

      Six terminals

      -

      +

    10. + 4 +
      + Step four +

      Six terminals

      +

      AltGr+F1…F6 switches between them — the one chord a Linux host does not take for itself — or chvt N from a shell. -

      +

      +
    diff --git a/docs/Website/index.html b/docs/Website/index.html index 4ec9018..d6c4818 100644 --- a/docs/Website/index.html +++ b/docs/Website/index.html @@ -95,12 +95,19 @@

    GPL-2.0-or-later · runs from RAM · writes nothing to your disks

    -
    -
    - ttyS0 - SchIFT +
    +
    + + SchIFT — ttyS0 + + live +
    -
    
    +    
    
       
    @@ -118,53 +125,68 @@ -
      -
    1. - First -

      64-bit, and more than one core

      -

      +

        +
      1. + 1 +
        + First +

        64-bit, and more than one core

        +

        Four-level paging, a real SMP bring-up, per-CPU state and a trap path that survives both. This is the part that invalidates most of what a 32-bit uniprocessor kernel assumes. -

        +

        +
      2. -
      3. - Then -

        Its own filesystem

        -

        +

      4. + 2 +
        + Then +

        Its own filesystem

        +

        xv6's log-structured filesystem was replaced by SchFS: a copy-on-write B-tree with an uberblock ring, extents and checksummed metadata. A crash leaves either the old tree or the new one. -

        +

        +
      5. -
      6. - Then -

        A Linux-shaped ABI

        -

        +

      7. + 3 +
        + Then +

        A Linux-shaped ABI

        +

        The syscall table adopted Linux numbering, which is what makes an unmodified musl and an unmodified toybox run. The table is one .inc file, and it is the seam the whole system is built around. -

        +

        +
      8. -
      9. - Then -

        Hardware, not emulation

        -

        +

      10. + 4 +
        + Then +

        Hardware, not emulation

        +

        A UEFI loader, xHCI and USB storage, an e1000 with a real TCP/IP stack, virtio-gpu and VBE framebuffers, and a device model where a driver never names its consumer. -

        +

        +
      11. -
      12. - Now -

        Drivers that are not in the kernel

        -

        +

      13. + 5 +
        + Now +

        Drivers that are not in the kernel

        +

        A process can be handed a PCI device — its registers, its memory, its interrupts — and drive it. The GPU driver already runs that way. Nobody writes a driver for every device that exists; the answer is to stop requiring that they live inside. -

        +

        +
      @@ -255,7 +277,7 @@
      -

      SchFS

      +

      SchFS

      runs
      @@ -268,7 +290,7 @@
      -

      SMP x86-64 kernel

      +

      SMP x86-64 kernel

      runs
      @@ -280,7 +302,7 @@
      -

      Networking

      +

      Networking

      runs
      @@ -292,7 +314,7 @@
      -

      UEFI boot

      +

      UEFI boot

      runs
      @@ -303,7 +325,7 @@
      -

      USB

      +

      USB

      runs
      @@ -314,7 +336,7 @@
      -

      Virtual terminals

      +

      Virtual terminals

      runs
      @@ -327,7 +349,7 @@
      -

      schinit

      +

      schinit

      runs
      @@ -340,7 +362,7 @@
      -

      A real userland

      +

      A real userland

      runs
      @@ -353,7 +375,7 @@
      -

      Drivers outside the kernel

      +

      Drivers outside the kernel

      runs
      @@ -370,7 +392,7 @@
      -

      Schcom

      +

      Schcom

      in progress
      @@ -382,7 +404,7 @@
      -

      SchAPI

      +

      SchAPI

      designed
      @@ -482,12 +504,16 @@
      -
      -
      - tty1 - vgpud +
      +
      + + vgpud — tty1
      -
      $ vgpud
      +
      $ vgpud
       vgpud: virtio-gpu at 00:03.0, currently held by virtio-gpu
       virtio-gpu: released to userspace; screen is the VBE framebuffer
       vgpud: claimed
      @@ -513,20 +539,20 @@
           

      The size of it

      -
      -
      - 46,961 - lines in kernel/ and include/ +
      +
      +
      lines in kernel/ and include/
      +
      46,961
      -
      - 207 - syscalls, Linux numbering +
      +
      syscalls, Linux numbering
      +
      207
      -
      - 0 - patches carried against fastfetch +
      +
      patches carried against fastfetch
      +
      0
      -
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + - - - + + + + + + - - - + + + + + + diff --git a/docs/branding/uberblock.svg b/docs/branding/uberblock.svg index 2a60242..fe3e2e9 100644 --- a/docs/branding/uberblock.svg +++ b/docs/branding/uberblock.svg @@ -20,25 +20,88 @@ survives include/gfx/logo.h, which is a single coverage channel and keeps no colour at all. + Drawn as Niveus draws a dial: the slots are raised keys set into a groove + cut into the surface, bevelled by one light from the upper left, and the + newest slot and the root are lit from inside. The geometry is unchanged. + Stands alone, with no reference to SchOS, as projects/schfs-linux/README.md requires. - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + +