--- 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.