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

2.8 KiB

name description metadata
schunix-licensing 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
node_type type originSessionId modified
memory project a665e14b-86bd-4b41-a228-51377f3e9225 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.