SchOS/projects
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Nexoniarz 26bca020b6 licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0
Nexoniarz is the sole author and SchOS was never published under
Apache-2.0, so this is a straight relicence. LICENSE is the FSF GPLv2 text,
every first-party SPDX header moves to GPL-2.0-or-later, and NOTICE,
README.md, docs/licensing.md and the site say so. projects/schfs-linux
follows the rest of the tree.

The GPL gives copyleft: a fork has to ship its source. It also lifts the
old "Linux drivers, never" rule, since GPL-2.0-only code combines with
GPL-2.0-or-later. "Or later" leaves room for GPLv3, but one binary still
has to pick one version, so docs/licensing.md now keeps Apache-2.0 and
GPLv3 code out of the kernel to keep Linux code possible there. BSD
4-clause code goes from "avoid" to "no", because the advertising clause
is GPL-incompatible.

LDLS still ships no .ko. That boundary is now project policy rather than
a legal requirement, and ldls.md, devices.md and licensing.md section 6
say so. refmod declares license=GPL, and ldls-check passes (27 checks).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 08:48:45 +02:00
..
schcom licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0 2026-10-22 08:48:45 +02:00
schfs-linux licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0 2026-10-22 08:48:45 +02:00
schinst Rename Schunix to SchOS; the kernel becomes SchIFT 2026-08-09 14:09:59 +02:00
README.md freeze: one register for everything half-built, and the corners cleared 2026-09-13 20:28:05 +02:00

projects/

Things that run on SchOS rather than things that are SchOS.

Everything above this directory — kernel/, boot/, lib/, cmd/, include/ — is the operating system: it boots, it owns the hardware, and it is one program that either works or does not. Everything in here is an ordinary program that talks to it through syscalls, exactly as toybox does.

The split exists because the alternative gets bad quickly. A compositor, a window manager and a desktop are each larger than the kernel will be for a long time. Grown inside the OS tree they would blur into it: a compositor would start reaching into kernel headers because they are right there, the build would grow a dependency from the kernel to a GUI, and "does SchOS boot" would stop having a clear answer. Keeping them separate forces the boundary to be a real interface — syscalls and protocols — rather than a shared header nobody meant to share.

Concretely, code in here:

  • links against the sysroot's libc, never against kernel headers
  • talks to the kernel only through syscalls and /dev
  • can be built, run and debugged without rebuilding the kernel
  • may be split into its own repository later without untangling anything

What lives here

Directory What it is
schcom/ SchOS Compositor. Owns the display, composites clients, routes input.
schinst/ The installer, the installation environment, and .sip tooling.
schfs-linux/ SchFS as a filesystem for Linux. FUSE first, a kernel module later.

schwm/ and schde/ used to be here and have been deleted. In Wayland the compositor is the window manager — there is no protocol by which a second process places another's windows — and a panel or a launcher is an ordinary client that needs no home of its own until one is written. Both directories held a README and no code, and both had said "to be deleted" for long enough to prove that a directory marked for deletion is not deleted by being marked. What they argued for survives as a module boundary inside Schcom; see docs/plan/wayland.md.

schfs-linux/ is written to stand on its own. It does not mention SchOS anywhere, and that is deliberate rather than an oversight: it is intended to be the first piece released, and it has to make sense to somebody who has never heard of the OS it came from — a filesystem is judged as a filesystem. The connection can be made later, once there is a finished system to connect it to.

Practically, that means anything added there needs its own licence header, its own README framing, and no cross-references into this tree. It shares the format with kernel/fs/schfs/, not the prose.

Nothing here is a dependency of the kernel build, and nothing here is pointed at by anything above it.

Status

schcom/ has a v0: 715 lines that run, over a wire format of its own. That wire format is superseded — the compositor moves onto Wayland, keeping the architecture and replacing the protocol. See docs/plan/wayland.md.

Everything Schcom was blocked on in the kernel now exists: unix domain sockets, raw input events, shared memory, framebuffer mmap, and — as of the descriptor passing work — SCM_RIGHTS, which is the one thing a Wayland client cannot be written without. What is still missing is a shareable memory object, item 2 of docs/plan/foundations.md: a Wayland buffer is a file descriptor for memory, and a System V segment id is not one.

schinst/ and schfs-linux/ are scoped and unstarted, and are frozen — see docs/plan/1.0.md.