docs: architecture describes what is built now

kernel (threads, demand paging, TLB shootdowns, dynamic linking, RAM direct map), syscalls, filesystem (/proc, /sys,
/dev), terminals (12, VT handshake, ptys), networking (r8169 through LDLS), LDLS (module sets; Linux code may ship),
devices (what stays in the kernel; hybrid.md's lasting content), boot (the loader's placement of the kernel),
graphics (fbdev, GMMOS, QR 1-40), audio (ALSA over OSS), debugging, usb. New: packages.md (the apk root) and
desktop.md (Xorg on the framebuffer).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EVRhxi9zpdW2uDUN4FVcao
This commit is contained in:
Nexoniarz 2026-10-26 07:57:25 +01:00
commit 2556a955b3
15 changed files with 921 additions and 341 deletions

View file

@ -271,10 +271,12 @@ copied file is a file to be understood, attributed and maintained forever.
[architecture/ldls.md](architecture/ldls.md) runs Linux drivers. This section
was written when SchOS was Apache-2.0 and the boundary below was a legal
necessity. Under GPL-2.0-or-later it is a **project policy** instead: shipping
a GPL-2.0-only `.ko` with SchOS would now be lawful, provided the source goes
with it. It is still not done, because a module we never ship is a module we
never have to vouch for, track upstream, or provide source for.
necessity. Under GPL-2.0-or-later it was a **project policy** instead, and the owner
has since set the policy aside: Linux code and firmware blobs **may be shipped** with
SchOS, provided the source goes with them (GPLv2 §3). The repository still carries no
`.ko` — they are staged from the build machine's Linux kernel (`make ldls-stage`,
`make ldls-r8169`) — so shipping one is a decision about a release, and the release has
to carry the corresponding source.
### LDLS is ours
@ -298,10 +300,9 @@ GPLv2 §0 is explicit about where its obligations attach:
> by this License; they are outside its scope. **The act of running the Program
> is not restricted.**
So: we ship LDLS and no modules. The user obtains a module from wherever they
get their software and runs it on their own machine. `RAMDISK_EXCLUDE` and the
`*.ko` rule in `.gitignore` keep that boundary mechanical rather than
intentional.
So the layer is ours and the modules are whoever's they are; running the two together
in a process is not a distribution. `RAMDISK_EXCLUDE` and the `*.ko` rule in `.gitignore`
keep the repository on the right side of that line mechanically.
### `EXPORT_SYMBOL_GPL` does not apply
@ -322,7 +323,7 @@ show.
### BTF: the layouts are not in our source at all
§3 of the plan has one uncomfortable row — struct layouts. A compiled driver
Rule 3 of [architecture/ldls.md](architecture/ldls.md) has one uncomfortable row — struct layouts. A compiled driver
indexes fields by offset, so the shim has to reproduce them exactly, and a
field-for-field match *looks* like transcription even when it is not.