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>
38 lines
1.8 KiB
C
38 lines
1.8 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
//
|
|
// <string.h> for lwIP, shadowing the host's.
|
|
//
|
|
// lwIP includes <string.h> in thirty-odd files. The kernel is built
|
|
// -ffreestanding and has its own string functions, but the compiler's default
|
|
// include path still finds /usr/include/string.h -- which declares strlen
|
|
// returning size_t against a kernel that returns int, and drags sigset_t and
|
|
// __float128 in behind it. So the lwIP include path puts this directory first.
|
|
//
|
|
// The prototypes are repeated here rather than taken from defs.h on purpose.
|
|
// lwIP includes <string.h> at the very top of a translation unit, before any
|
|
// kernel header has been seen, so pulling defs.h in from here would drop the
|
|
// whole kernel's declarations into a context where its own types are not
|
|
// defined yet -- which shows up as errors in unrelated headers, like file.h
|
|
// not knowing what NDIRECT is.
|
|
//
|
|
// They must match kernel/core/string.c exactly. Only what lwIP calls is here;
|
|
// anything else should be added deliberately rather than by growing this into
|
|
// a libc.
|
|
#ifndef LWIP_SHIM_STRING_H
|
|
#define LWIP_SHIM_STRING_H
|
|
|
|
int memcmp(const void *, const void *, unsigned long);
|
|
void *memmove(void *, const void *, unsigned long);
|
|
void *memset(void *, int, unsigned long);
|
|
int strlen(const char *);
|
|
int strcmp(const char *, const char *);
|
|
int strncmp(const char *, const char *, unsigned long);
|
|
char *strncpy(char *, const char *, int);
|
|
|
|
// The kernel deliberately provides only memmove, on the grounds that a copy
|
|
// which happens to overlap should not be undefined behaviour. lwIP calls
|
|
// memcpy in a handful of places, always on buffers it has just allocated, so
|
|
// mapping it onto memmove is correct and costs nothing.
|
|
#define memcpy(d, s, n) memmove((d), (s), (n))
|
|
|
|
#endif
|