SchOS/.claude/memory/schunix-linux-abi-decision.md
Nexoniarz 3182da3965 Carry project memory in the repo, with tools/memory-sync.sh
Claude Code keeps per-project memory at <home>/.claude/projects/<key>/,
where <key> is the project's absolute path with every separator and the
drive colon turned into a dash. That makes it both rename-fragile and
machine-specific, and this project has hit each of those once:

  - D:\DEV\Schunix -> D:\DEV\SchOS changed the key, and 43 memories were
    invisible until moved across by hand.
  - Development happens from Windows and from Linux, and each looks in a
    different place for the same checkout.

Committing .claude/memory/ fixes both -- git carries it across renames
and between hosts -- and `import` puts it wherever the local machine
expects. .claude/settings.local.json stays ignored: those are per-machine
permissions.

The colon maps to a dash rather than being dropped. Deleting it gives
D-DEV-SchOS, which matches nothing and silently finds zero memories; that
was the first attempt. On Git Bash the key comes from `cygpath -w`,
because Claude Code is a Windows program and sees D:\DEV\SchOS, not
/d/DEV/SchOS.
2026-08-09 14:27:22 +02:00

30 lines
1.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: schunix-linux-abi-decision
description: Decided 2026-08-01 — Schunix drops its native syscall ABI and keeps only the Linux one
metadata:
node_type: memory
type: project
originSessionId: d1a1ea76-f919-411c-b0ef-0e1bc5064563
modified: 2026-08-01T17:16:39.021Z
---
Decided 2026-08-01: **Schunix will use the Linux syscall ABI as its only ABI.**
The native Schunix numbering gets deleted. Not yet implemented as of that date.
**Why:** the kernel currently carries two ABIs — 185 native entries in
`kernel/sys/table.inc` and 157 Linux numbers mapped in `kernel/sys/linux_abi.c`
— with a `proc->syscall_map` indirection on every syscall to pick between them.
100% of the shipping userland (musl, mksh, toybox) is Linux-ABI. Exactly one
program used the native ABI (`cmd/init/main.c`), and `exec.c` chose the ABI by
*guessing from the ELF entry address* (`>= 0x100000`).
**How to apply:** rebuild init against musl like every other program, then
delete `lib/usys.S`, `sys_enable_linux_abi`, the `syscall_map` indirection, the
entry-address heuristic in `exec.c`, and the duplicate native `struct stat`
path (`stati_linux` vs native). Roughly −500 lines.
The user was uneasy that this makes Schunix "not a real UNIX" — it does not.
FreeBSD (linuxulator), illumos (lx zones), and WSL1 all implement the Linux
ABI. The ABI is a calling convention, not the OS.
See [[schunix-rewrite-priorities]], [[schunix-build-environment]].