SchOS/.claude/memory/schunix-licensing.md
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

59 lines
2.8 KiB
Markdown

---
name: schunix-licensing
description: "SchOS is GPL-2.0-or-later since 2026-10-22 (was Apache-2.0); Linux code now allowed, but no Apache/GPLv3 code in the kernel"
metadata:
node_type: memory
type: project
originSessionId: a665e14b-86bd-4b41-a228-51377f3e9225
modified: 2026-08-08T16:18:39.569Z
---
**`LICENSE` is GPL-2.0-or-later** since 2026-10-22, copyright *Nexoniarz*, sole
author. It was Apache-2.0 before and was never published under it. Nexoniarz
chose GPL for copyleft ("I can't be also too liberal because people just mostly
steal that work") and so Linux code can be used. They picked "or-later" over
"only" on my recommendation.
**The rule that replaced "Linux no":** a single linked binary has to pick one
GPL version. Linux code (GPL-2.0-only) makes it GPLv2; Apache-2.0 or GPLv3 code
makes it GPLv3. They can't share a binary, so **the kernel takes no Apache-2.0
or GPLv3 code**. Separate userland programs may be GPLv3 or Apache. Data files
such as Roboto (Apache-2.0) are aggregation, and that holds inside the ramdisk
too. BSD 4-clause code is now a hard **no** (GPL-incompatible).
**LDLS still ships no `.ko`.** That is policy now, not a legal requirement. The
`.gitignore` `*.ko` rule and `RAMDISK_EXCLUDE` stay.
**Settled, do not reopen:** the old "Apache-2.0 but shared-source" debate was
dropped from the docs on 2026-08-08. The question that matters to them is when
to publish, and the standing answer is still never
([[nexoniarz-sharing-preference]]).
**Binding regardless:**
- The kernel derives from xv6 (MIT). `LICENSE.MIT` must not be deleted.
- `ports/` is other people's code: musl, toybox, mksh, zsh, ncurses, lwIP,
kilo and fastfetch are all permissive. `NOTICE` carries the attributions.
New first-party files carry `// SPDX-License-Identifier: GPL-2.0-or-later`.
The policy is in `docs/licensing.md`. See [[schunix-roadmap-and-projects]].
## fs.c is third-party, and was unattributed until 2026-08-09
`kernel/fs/fs.c` (and parts of `tools/mkfs.c`) derive from **"New File System
For XV6"** by Qi Ma, Leyi Pan, Ao Sun and Peiran Xu -- **MIT License**. Nexoniarz
mentioned the provenance in passing; the tree had **no attribution at all**,
only a comment crediting xv6. That was a live compliance gap, since MIT requires
the notice be retained in substantial portions.
Their work is what the HTree directory index (`BKDRHash`, `HASHRANGE`,
`OVERFLOW_DIR_START`), the Ext4-style extents (`T_EXTENT`), the inode bitmap and
`divesymlink` all are. Now credited in `NOTICE` and in fs.c's header.
**The obligation does not go away when fs.c does.** It attaches to every copy
already made, so the NOTICE entry stays even after the SchFS migration deletes
the file.
**The general lesson:** ask where code came from before assuming it is
first-party. "It is in our tree and looks like xv6" was wrong here, and the only
reason it surfaced was an offhand remark.