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>
This commit is contained in:
parent
3b26575b4a
commit
26bca020b6
135 changed files with 959 additions and 689 deletions
|
|
@ -44,7 +44,7 @@
|
||||||
- [Device model](schunix-device-model.md) — one bus-agnostic list at /proc/devices; bus is provenance, class is capability, and the settled Linux-driver decision.
|
- [Device model](schunix-device-model.md) — one bus-agnostic list at /proc/devices; bus is provenance, class is capability, and the settled Linux-driver decision.
|
||||||
- [usb.ids](schunix-usb-ids.md) — shipped as /usr/share/usb.ids, BSD option of a dual licence; cached, not fetched per build.
|
- [usb.ids](schunix-usb-ids.md) — shipped as /usr/share/usb.ids, BSD option of a dual licence; cached, not fetched per build.
|
||||||
- [USB and xHCI](schunix-usb-xhci.md) — enumeration and control transfers work; written from the spec, because porting BSD's stack means porting newbus first.
|
- [USB and xHCI](schunix-usb-xhci.md) — enumeration and control transfers work; written from the spec, because porting BSD's stack means porting newbus first.
|
||||||
- [Licensing](schunix-licensing.md) — Apache-2.0, copyright Nexoniarz; BSD drivers are usable and Linux ones are not.
|
- [Licensing](schunix-licensing.md) — GPL-2.0-or-later since 2026-10-22 (was Apache); Linux code OK, no Apache/GPLv3 in the kernel.
|
||||||
- [Layout migration](schunix-layout-migration.md) — the bt/ → ports/ + lib/ + cmd/ restructure and the two Makefile traps it exposed.
|
- [Layout migration](schunix-layout-migration.md) — the bt/ → ports/ + lib/ + cmd/ restructure and the two Makefile traps it exposed.
|
||||||
- [Verify by driving the shell](schunix-verify-by-driving-shell.md) — booting to a prompt proves nothing; run real commands over serial with paced input.
|
- [Verify by driving the shell](schunix-verify-by-driving-shell.md) — booting to a prompt proves nothing; run real commands over serial with paced input.
|
||||||
- [/dev and /proc](schunix-devfs-procfs.md) — how both are built; ps and top work now, one cosmetic gap left.
|
- [/dev and /proc](schunix-devfs-procfs.md) — how both are built; ps and top work now, one cosmetic gap left.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
name: schunix-licensing
|
name: schunix-licensing
|
||||||
description: "Schunix is Apache-2.0, copyright Nexoniarz; BSD drivers yes, Linux no, and ports/ licences bind regardless"
|
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:
|
metadata:
|
||||||
node_type: memory
|
node_type: memory
|
||||||
type: project
|
type: project
|
||||||
|
|
@ -8,43 +8,34 @@ metadata:
|
||||||
modified: 2026-08-08T16:18:39.569Z
|
modified: 2026-08-08T16:18:39.569Z
|
||||||
---
|
---
|
||||||
|
|
||||||
**`LICENSE` is Apache-2.0**, copyright *Nexoniarz* (not "Schunix Contributors" —
|
**`LICENSE` is GPL-2.0-or-later** since 2026-10-22, copyright *Nexoniarz*, sole
|
||||||
one author, and a fictional collective makes future re-licensing harder).
|
author. It was Apache-2.0 before and was never published under it. Nexoniarz
|
||||||
Chosen over MIT/BSD for the express patent grant.
|
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.
|
||||||
|
|
||||||
**Settled, do not reopen:** the "Apache-2.0 but shared-source" question was
|
**The rule that replaced "Linux no":** a single linked binary has to pick one
|
||||||
discussed at length in 2026-08 and **on 2026-08-08 Nexoniarz asked for it to be
|
GPL version. Linux code (GPL-2.0-only) makes it GPLv2; Apache-2.0 or GPLv3 code
|
||||||
dropped from the docs entirely** — `docs/licensing.md` is about licensing, not
|
makes it GPLv3. They can't share a binary, so **the kernel takes no Apache-2.0
|
||||||
about that debate. All references are gone from `docs/`, `LICENSE` and `NOTICE`;
|
or GPLv3 code**. Separate userland programs may be GPLv3 or Apache. Data files
|
||||||
don't reintroduce them. The substance that survives, in one line inside §1:
|
such as Roboto (Apache-2.0) are aggregation, and that holds inside the ramdisk
|
||||||
Apache-2.0 §2 is an irrevocable grant, so a restriction stated anywhere else
|
too. BSD 4-clause code is now a hard **no** (GPL-incompatible).
|
||||||
does not narrow it, and restricting distribution would be a licence change
|
|
||||||
(bespoke proprietary, or BUSL-1.1) rather than a wording change.
|
|
||||||
|
|
||||||
The decision that actually mattered to them is **when to publish**, not the
|
**LDLS still ships no `.ko`.** That is policy now, not a legal requirement. The
|
||||||
licence; the standing rule is still never ([[nexoniarz-sharing-preference]]).
|
`.gitignore` `*.ko` rule and `RAMDISK_EXCLUDE` stay.
|
||||||
|
|
||||||
**Binding regardless of what they pick:**
|
**Settled, do not reopen:** the old "Apache-2.0 but shared-source" debate was
|
||||||
- The kernel derives from xv6 (MIT). `LICENSE.MIT` was *missing* — it was
|
dropped from the docs on 2026-08-08. The question that matters to them is when
|
||||||
referenced as `bk/LICENSE.MIT` and lost in the `bk/` → `kernel/` migration.
|
to publish, and the standing answer is still never
|
||||||
Recreated; must not be deleted.
|
([[nexoniarz-sharing-preference]]).
|
||||||
- `ports/` is other people's code, redistributed in every image: musl (MIT),
|
|
||||||
toybox (0BSD), mksh (MirOS). `NOTICE` carries the attribution musl and mksh
|
|
||||||
require. Patches under `ports/*/patches/` inherit *their* licences.
|
|
||||||
|
|
||||||
New first-party files carry `// SPDX-License-Identifier: Apache-2.0`.
|
**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.
|
||||||
|
|
||||||
**Drivers: BSD yes, Linux no** (asked 2026-08-04, "for drivers we can try get
|
New first-party files carry `// SPDX-License-Identifier: GPL-2.0-or-later`.
|
||||||
it from like Linux?"). Linux is GPL-2.0-**only**, and Apache-2.0's patent and
|
The policy is in `docs/licensing.md`. See [[schunix-roadmap-and-projects]].
|
||||||
indemnity clauses are "further restrictions" under GPLv2 §6 — the two cannot
|
|
||||||
be combined and redistributed. Using a Linux driver means relicensing all of
|
|
||||||
Schunix to GPLv2 and dropping Apache-2.0; you cannot keep both. FreeBSD /
|
|
||||||
NetBSD / OpenBSD are BSD-2/3-clause and **are** compatible: keep the notice,
|
|
||||||
add to `NOTICE`, done. Reading Linux to understand hardware is fine;
|
|
||||||
translating a driver function-by-function produces a derivative work whatever
|
|
||||||
the identifiers say. Best source of all is the public specification — xHCI,
|
|
||||||
virtio, AHCI, NVMe, e1000 — which carries no licence on what you write from
|
|
||||||
it. Recorded in `docs/plan/roadmap.md` §1. See [[schunix-roadmap-and-projects]].
|
|
||||||
|
|
||||||
|
|
||||||
## fs.c is third-party, and was unattributed until 2026-08-09
|
## fs.c is third-party, and was unattributed until 2026-08-09
|
||||||
|
|
|
||||||
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -45,7 +45,8 @@ docs/Website/releases/
|
||||||
# Kernel modules, ever. docs/plan/ldls.md rule 1: LDLS ships the layer and
|
# Kernel modules, ever. docs/plan/ldls.md rule 1: LDLS ships the layer and
|
||||||
# never the thing it loads, and that applies to this tree as well as to an
|
# never the thing it loads, and that applies to this tree as well as to an
|
||||||
# image. The loader's test input is built from ldls/test/refmod.c, which is
|
# image. The loader's test input is built from ldls/test/refmod.c, which is
|
||||||
# ours; a .ko here would be someone else's GPL code in an Apache-2.0 repo.
|
# ours; a .ko here would be someone else's code, with its own provenance, in
|
||||||
|
# a tree that is otherwise all first-party or attributed in NOTICE.
|
||||||
*.ko
|
*.ko
|
||||||
*.ko.xz
|
*.ko.xz
|
||||||
|
|
||||||
|
|
@ -59,7 +60,7 @@ core.*
|
||||||
#
|
#
|
||||||
# help/ is where a third-party kernel gets cloned when it is worth reading --
|
# help/ is where a third-party kernel gets cloned when it is worth reading --
|
||||||
# Zircon, at the time of writing. It is BSD-licensed and this project is
|
# Zircon, at the time of writing. It is BSD-licensed and this project is
|
||||||
# Apache-2.0, so the licences are compatible and that is *not* the reason it is
|
# GPL-2.0-or-later, so the licences are compatible and that is *not* the reason it is
|
||||||
# ignored: it is ignored because a copy of another project's source inside this
|
# ignored: it is ignored because a copy of another project's source inside this
|
||||||
# one is a copy that will rot, that nobody will update, and that makes the
|
# one is a copy that will rot, that nobody will update, and that makes the
|
||||||
# provenance of every file around it a question. Clone it, read it, learn the
|
# provenance of every file around it a question. Clone it, read it, learn the
|
||||||
|
|
|
||||||
462
LICENSE
462
LICENSE
|
|
@ -1,187 +1,339 @@
|
||||||
Apache License
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 2.0, January 2004
|
Version 2, June 1991
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
1. Definitions.
|
Preamble
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
The licenses for most software are designed to take away your
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
When we speak of free software, we are referring to freedom, not
|
||||||
the copyright owner that is granting the License.
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
To protect your rights, we need to make restrictions that forbid
|
||||||
other entities that control, are controlled by, or are under common
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
control with that entity. For the purposes of this definition,
|
These restrictions translate to certain responsibilities for you if you
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
distribute copies of the software, or if you modify it.
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
For example, if you distribute copies of such a program, whether
|
||||||
exercising permissions granted by this License.
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
including but not limited to software source code, documentation
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
source, and configuration files.
|
distribute and/or modify the software.
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
Also, for each author's protection and ours, we want to make certain
|
||||||
transformation or translation of a Source form, including but
|
that everyone understands that there is no warranty for this free
|
||||||
not limited to compiled object code, generated documentation,
|
software. If the software is modified by someone else and passed on, we
|
||||||
and conversions to other media types.
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
"Work" shall mean the work of authorship made available under
|
Finally, any free program is threatened constantly by software
|
||||||
the License, as indicated by a copyright notice that is included in
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
or attached to the work (an example is provided in the Appendix below).
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
The precise terms and conditions for copying, distribution and
|
||||||
form, that is based on (or derived from) the Work and for which the
|
modification follow.
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean, as submitted to the Licensor for inclusion
|
GNU GENERAL PUBLIC LICENSE
|
||||||
in the Work by the copyright owner or by an individual or Legal Entity
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
authorized to submit on behalf of the copyright owner. For the purposes
|
|
||||||
of this definition, "contribution" means any work of authorship,
|
|
||||||
including the original version of the Work and any modifications or
|
|
||||||
additions to that Work or Derivative Works of the Work.
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any Legal Entity on behalf of
|
0. This License applies to any program or other work which contains
|
||||||
whom a Contribution has been received by the Licensor and included
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
within the Work.
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
Activities other than copying, distribution and modification are not
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
covered by this License; they are outside its scope. The act of
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
running the Program is not restricted, and the output from the Program
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
is covered only if its contents constitute a work based on the
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
Program (independent of having been made by running the Program).
|
||||||
Work and such Derivative Works in Source or Object form.
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
source code as you receive it, in any medium, provided that you
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
(except as stated in this section) patent license to make, have made,
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
notices that refer to this License and to the absence of any warranty;
|
||||||
where such license applies only to those patent claims licensable
|
and give any other recipients of the Program a copy of this License
|
||||||
by such Contributor that are necessarily infringed by their
|
along with the Program.
|
||||||
Contribution(s) alone or by the combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a cross-claim
|
|
||||||
or counterclaim in a lawsuit) alleging that the Work or any
|
|
||||||
Contribution embodied within the Work constitutes patent or
|
|
||||||
contributory patent infringement, then any patent licenses granted to
|
|
||||||
You under this License for that Work shall terminate as of the date
|
|
||||||
such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
Derivative Works a copy of this License; and
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
a) You must cause the modified files to carry prominent notices
|
||||||
stating that You changed the files; and
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
b) You must cause any work that you distribute or publish, that in
|
||||||
that You distribute, all copyright, patent, trademark, and
|
whole or in part contains or is derived from the Program or any
|
||||||
attribution notices from the Source form of the Work,
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
excluding those notices that do not pertain to any part of
|
parties under the terms of this License.
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
c) If the modified program normally reads commands interactively
|
||||||
distribution, You must include a readable copy of the
|
when run, you must cause it, when started running for such
|
||||||
attribution notices contained within such NOTICE file, in
|
interactive use in the most ordinary way, to print or display an
|
||||||
at least one of the following places: within a NOTICE text
|
announcement including an appropriate copyright notice and a
|
||||||
file distributed as part of the Derivative Works; within
|
notice that there is no warranty (or else, saying that you provide
|
||||||
the Source form or documentation, if provided along with the
|
a warranty) and that users may redistribute the program under
|
||||||
Derivative Works; or, within a display generated by the
|
these conditions, and telling the user how to view a copy of this
|
||||||
Derivative Works, if and wherever such third-party notices
|
License. (Exception: if the Program itself is interactive but
|
||||||
normally appear. The contents of the NOTICE file are for
|
does not normally print such an announcement, your work based on
|
||||||
informational purposes only and do not modify the License.
|
the Program is not required to print an announcement.)
|
||||||
You may add Your own attribution notices within Derivative
|
|
||||||
Works that You distribute, alongside or in addition to the
|
|
||||||
NOTICE text from the Work, provided that such additional
|
|
||||||
attribution notices cannot be construed as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own license statement for Your modifications and
|
These requirements apply to the modified work as a whole. If
|
||||||
may provide additional grant of rights to use, copy, modify, and
|
identifiable sections of that work are not derived from the Program,
|
||||||
distribute those modifications as a separate work, subject to the
|
and can be reasonably considered independent and separate works in
|
||||||
terms and conditions of this License.
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
exercise the right to control the distribution of derivative or
|
||||||
this License, without any additional terms or conditions.
|
collective works based on the Program.
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
In addition, mere aggregation of another work not based on the Program
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
except as required for reasonable and customary use in describing the
|
a storage or distribution medium does not bring the other work under
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
the scope of this License.
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
under Section 2) in object code or executable form under the terms of
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any conditions of TITLE,
|
|
||||||
NONINFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
You are solely responsible for determining the appropriateness of
|
|
||||||
using or reproducing the Work and assume any risks associated with
|
|
||||||
Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
source code, which must be distributed under the terms of Sections
|
||||||
unless required by applicable law (such as deliberate and grossly
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or exemplary damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (even if such Contributor has been advised of the possibility
|
|
||||||
of such damages).
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
b) Accompany it with a written offer, valid for at least three
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
years, to give any third party, for a charge no more than your
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
cost of physically performing source distribution, a complete
|
||||||
or other liability obligations and/or rights consistent with this
|
machine-readable copy of the corresponding source code, to be
|
||||||
License. However, in accepting such obligations, You may offer such
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
obligations only on Your behalf and on Your sole responsibility,
|
customarily used for software interchange; or,
|
||||||
not on behalf of any other Contributor, and only if You agree to
|
|
||||||
indemnify, defend, and hold each Contributor harmless for any
|
|
||||||
liability incurred by, or claims asserted against, such Contributor
|
|
||||||
by reason of your accepting any warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
Copyright 2026 Nexoniarz
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
If distribution of executable or object code is made by offering
|
||||||
you may not use this file except in compliance with the License.
|
access to copy from a designated place, then offering equivalent
|
||||||
You may obtain a copy of the License at
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
5. You are not required to accept this License, since you have not
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
signed it. However, nothing else grants you permission to modify or
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
distribute the Program or its derivative works. These actions are
|
||||||
See the License for the specific language governing permissions and
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
limitations under the License.
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
NOTE: The kernel (kernel/) is derived from xv6 (MIT License, Copyright
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
2006-2019 Frans Kaashoek, Robert Morris, Russ Cox, M.I.T. CSAIL).
|
Program), the recipient automatically receives a license from the
|
||||||
The MIT license notice is preserved in LICENSE.MIT and must not be
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
removed. Third-party software redistributed in a built image -- musl,
|
these terms and conditions. You may not impose any further
|
||||||
toybox and mksh, all under ports/ -- keeps its own license; see NOTICE.
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
Which outside code may be copied into SchOS and which may not -- the
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
BSD/GPL rules, the NetBSD advertising clause, and what is deliberately
|
infringement or for any other reason (not limited to patent issues),
|
||||||
never shipped -- is written up in docs/licensing.md. Read it before
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
copying anyone else's code in.
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License.
|
||||||
|
|
|
||||||
4
Makefile
4
Makefile
|
|
@ -455,8 +455,8 @@ RAMDISK_BLOCKS ?= 8000
|
||||||
# rule before it is a size one: the ramdisk image is linked *into the kernel
|
# rule before it is a size one: the ramdisk image is linked *into the kernel
|
||||||
# binary*, so anything staged in sysroot/ when it is built becomes part of a
|
# binary*, so anything staged in sysroot/ when it is built becomes part of a
|
||||||
# distributable artifact. Anything that arrives in sysroot/ under a licence that
|
# distributable artifact. Anything that arrives in sysroot/ under a licence that
|
||||||
# cannot be combined with Apache-2.0, or that simply is not ours to redistribute,
|
# cannot be combined with GPL-2.0-or-later, or that simply is not ours to
|
||||||
# belongs on this list rather than in someone's memory.
|
# redistribute, belongs on this list rather than in someone's memory.
|
||||||
#
|
#
|
||||||
# This is not hypothetical: a 33 MB test payload once landed here and overflowed
|
# This is not hypothetical: a 33 MB test payload once landed here and overflowed
|
||||||
# the 6 MB image, and mkfs's "increase FSSIZE" message then pointed at a constant
|
# the 6 MB image, and mkfs's "increase FSSIZE" message then pointed at a constant
|
||||||
|
|
|
||||||
23
NOTICE
23
NOTICE
|
|
@ -2,7 +2,8 @@ SchOS
|
||||||
Copyright 2026 Nexoniarz
|
Copyright 2026 Nexoniarz
|
||||||
|
|
||||||
This product includes software developed as part of the SchOS project,
|
This product includes software developed as part of the SchOS project,
|
||||||
licensed under the Apache License, Version 2.0. See LICENSE.
|
licensed under the GNU General Public License, version 2 or (at your option)
|
||||||
|
any later version. See LICENSE.
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
Third-party software
|
Third-party software
|
||||||
|
|
@ -118,9 +119,9 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
Fetched by ports/lwip and compiled into the kernel -- it is the TCP/IP stack,
|
Fetched by ports/lwip and compiled into the kernel -- it is the TCP/IP stack,
|
||||||
not a userland library, so it is present in every built kernel image rather
|
not a userland library, so it is present in every built kernel image rather
|
||||||
than in a binary under /bin. The port layer written for SchOS
|
than in a binary under /bin. The port layer written for SchOS
|
||||||
(kernel/net/lwip/) is Apache-2.0 and is not part of lwIP; lwIP's own sources
|
(kernel/net/lwip/) is GPL-2.0-or-later and is not part of lwIP; lwIP's own
|
||||||
are unmodified. Clause 3 is a no-endorsement term, not the four-clause
|
sources are unmodified. Clause 3 is a no-endorsement term, not the four-clause
|
||||||
advertising requirement, so it combines with Apache-2.0 without difficulty.
|
advertising requirement, so it combines with the GPL without difficulty.
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
Intel 8254x device identifiers BSD 3-Clause
|
Intel 8254x device identifiers BSD 3-Clause
|
||||||
|
|
@ -149,9 +150,8 @@ http://www.linux-usb.org/usb.ids
|
||||||
|
|
||||||
Distributed by its maintainer under the terms of *either* the GNU General
|
Distributed by its maintainer under the terms of *either* the GNU General
|
||||||
Public License version 2 or later, *or* the 3-clause BSD Licence. SchOS takes
|
Public License version 2 or later, *or* the 3-clause BSD Licence. SchOS takes
|
||||||
the BSD option; the GPL option is not exercised and could not be, since
|
the BSD option, which was chosen while SchOS was Apache-2.0; either option is
|
||||||
Apache-2.0 and GPL-2.0-only cannot be combined (see docs/licensing.md section
|
compatible now, and the BSD one is kept because it asks less of anyone.
|
||||||
2).
|
|
||||||
|
|
||||||
Shipped verbatim as /usr/share/usb.ids. Cached in dist/ and refreshed with
|
Shipped verbatim as /usr/share/usb.ids. Cached in dist/ and refreshed with
|
||||||
`make usb-ids`, never automatically -- the version and date are in the file's
|
`make usb-ids`, never automatically -- the version and date are in the file's
|
||||||
|
|
@ -163,9 +163,10 @@ Roboto Apache-2.0
|
||||||
Copyright the Roboto Project Authors (https://github.com/googlefonts/roboto)
|
Copyright the Roboto Project Authors (https://github.com/googlefonts/roboto)
|
||||||
|
|
||||||
Shipped as /usr/share/fonts/Roboto-Regular.ttf, from ports/Roboto. Licensed
|
Shipped as /usr/share/fonts/Roboto-Regular.ttf, from ports/Roboto. Licensed
|
||||||
under Apache-2.0 -- the same licence as SchOS itself, so it carries no
|
under Apache-2.0. It is a separate data file loaded at run time, not code
|
||||||
obligation beyond this notice. Intended for the desktop, window manager and
|
linked into SchOS, so it sits beside the GPL as an aggregate and keeps its own
|
||||||
compositor.
|
licence; the obligation is this notice. Intended for the desktop, window
|
||||||
|
manager and compositor.
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
JetBrains Mono SIL OFL 1.1
|
JetBrains Mono SIL OFL 1.1
|
||||||
|
|
@ -178,7 +179,7 @@ Shipped as /usr/share/fonts/JetBrainsMono-Regular.ttf, from ports/JetBrains_Mono
|
||||||
and TTY.
|
and TTY.
|
||||||
|
|
||||||
Under the SIL Open Font License 1.1 the font remains under OFL even inside this
|
Under the SIL Open Font License 1.1 the font remains under OFL even inside this
|
||||||
Apache-2.0 system -- that does not reach any other part of SchOS -- and it may
|
GPL-licensed system -- that does not reach any other part of SchOS -- and it may
|
||||||
not be sold on its own. Bundling it with an operating system is expressly
|
not be sold on its own. Bundling it with an operating system is expressly
|
||||||
permitted. JetBrains Mono declares no Reserved Font Name, so a modified version
|
permitted. JetBrains Mono declares no Reserved Font Name, so a modified version
|
||||||
(a pre-rasterised bitmap, for instance) may keep the name.
|
(a pre-rasterised bitmap, for instance) may keep the name.
|
||||||
|
|
|
||||||
15
README.md
15
README.md
|
|
@ -150,20 +150,17 @@ Another: **syscalls are declared in exactly one place**,
|
||||||
|
|
||||||
## Licensing
|
## Licensing
|
||||||
|
|
||||||
**Apache-2.0**, copyright Nexoniarz. See [LICENSE](LICENSE).
|
**GPL-2.0-or-later**, copyright Nexoniarz. See [LICENSE](LICENSE).
|
||||||
|
|
||||||
The kernel derives from xv6, which is MIT — see [LICENSE.MIT](LICENSE.MIT).
|
The kernel derives from xv6, which is MIT — see [LICENSE.MIT](LICENSE.MIT).
|
||||||
Third-party code redistributed in a built image (musl, toybox, mksh, zsh, kilo,
|
Third-party code redistributed in a built image (musl, toybox, mksh, zsh, kilo,
|
||||||
the fonts) keeps its own licence; [NOTICE](NOTICE) carries the attributions.
|
the fonts) keeps its own licence; [NOTICE](NOTICE) carries the attributions.
|
||||||
All of it is permissive — there is no GPL in an image this builds, which is why
|
See [docs/licensing.md](docs/licensing.md).
|
||||||
the userland is toybox and not BusyBox and the editor is kilo and not nano. See
|
|
||||||
[docs/licensing.md](docs/licensing.md).
|
|
||||||
|
|
||||||
Drivers may be adapted from BSD sources, which are compatible. Linux drivers are
|
Drivers may be adapted from BSD sources and, since the move to the GPL, from
|
||||||
not: GPL-2.0-only and Apache-2.0 cannot be combined and redistributed. Reading
|
Linux — GPL-2.0-only code combines with GPL-2.0-or-later, and the result ships
|
||||||
Linux to understand hardware is fine; translating a driver is not. Best of all
|
under GPLv2. Best of all is still the public specification — xHCI, virtio,
|
||||||
is the public specification — xHCI, virtio, AHCI, e1000 — which carries no
|
AHCI, e1000 — which carries no licence on what you write from it.
|
||||||
licence on what you write from it.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<!-- SPDX-License-Identifier: Apache-2.0 -->
|
<!-- SPDX-License-Identifier: GPL-2.0-or-later -->
|
||||||
# Booting SchOS
|
# Booting SchOS
|
||||||
|
|
||||||
One firmware path:
|
One firmware path:
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
/* SPDX-License-Identifier: Apache-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
/*
|
/*
|
||||||
* The loader's user interface. See ui.h for why this can be shared at all.
|
* The loader's user interface. See ui.h for why this can be shared at all.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
/* SPDX-License-Identifier: Apache-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
/*
|
/*
|
||||||
* The loader's user interface, shared by both firmwares.
|
* The loader's user interface, shared by both firmwares.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<!-- SPDX-License-Identifier: Apache-2.0 -->
|
<!-- SPDX-License-Identifier: GPL-2.0-or-later -->
|
||||||
# UEFI loader
|
# UEFI loader
|
||||||
|
|
||||||
The loader. This directory once existed only so the BIOS path could be moved
|
The loader. This directory once existed only so the BIOS path could be moved
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
#pragma once
|
#pragma once
|
||||||
#ifndef SCHOS_EFI_H
|
#ifndef SCHOS_EFI_H
|
||||||
#define SCHOS_EFI_H
|
#define SCHOS_EFI_H
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// SchOS UEFI loader.
|
// SchOS UEFI loader.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// chvt N -- show virtual terminal N.
|
// chvt N -- show virtual terminal N.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// httpd -- serve a directory over HTTP.
|
// httpd -- serve a directory over HTTP.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// ldlsd -- LDLS, on SchOS.
|
// ldlsd -- LDLS, on SchOS.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// loadkeys -- choose the keyboard layout.
|
// loadkeys -- choose the keyboard layout.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// memfdtest -- two processes map the same memfd, one writes, the other sees it.
|
// memfdtest -- two processes map the same memfd, one writes, the other sees it.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// netecho -- a network, in a process.
|
// netecho -- a network, in a process.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// pcitest -- prove that a driver could live out here.
|
// pcitest -- prove that a driver could live out here.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// ping -- ICMP echo, over a SchOS ping socket.
|
// ping -- ICMP echo, over a SchOS ping socket.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// resolvconf -- put the nameserver where the resolver will look.
|
// resolvconf -- put the nameserver where the resolver will look.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// schdbg -- ask the kernel a question.
|
// schdbg -- ask the kernel a question.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// schdbgd -- the debugger, over the network.
|
// schdbgd -- the debugger, over the network.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// schinit -- PID 1.
|
// schinit -- PID 1.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// schinitd -- the supervisor. PID 2, and restartable.
|
// schinitd -- the supervisor. PID 2, and restartable.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// schmode -- change the display mode.
|
// schmode -- change the display mode.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// sigtest -- the SIGCHLD/sigsuspend contract every shell is built on.
|
// sigtest -- the SIGCHLD/sigsuspend contract every shell is built on.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// vgpud -- the virtio-gpu driver, outside the kernel.
|
// vgpud -- the virtio-gpu driver, outside the kernel.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<!-- SPDX-License-Identifier: Apache-2.0 -->
|
<!-- SPDX-License-Identifier: GPL-2.0-or-later -->
|
||||||
# The website
|
# The website
|
||||||
|
|
||||||
Three pages, two scripts, one stylesheet of its own, and the design system
|
Three pages, two scripts, one stylesheet of its own, and the design system
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
/* SPDX-License-Identifier: Apache-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
/* ==========================================================================
|
/* ==========================================================================
|
||||||
The SchOS site — layout only
|
The SchOS site — layout only
|
||||||
--------------------------------------------------------------------------
|
--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
/* SPDX-License-Identifier: Apache-2.0
|
/* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
*
|
*
|
||||||
* Three behaviours, no framework:
|
* Three behaviours, no framework:
|
||||||
* 1. the hero console types a real boot log
|
* 1. the hero console types a real boot log
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@
|
||||||
<div class="nv-divider"></div>
|
<div class="nv-divider"></div>
|
||||||
<div class="site-footer__row">
|
<div class="site-footer__row">
|
||||||
<span class="nv-body">SchOS — kernel <b>SchIFT</b>, filesystem <b>SchFS</b>.</span>
|
<span class="nv-body">SchOS — kernel <b>SchIFT</b>, filesystem <b>SchFS</b>.</span>
|
||||||
<span class="nv-code nv-text-tertiary">Apache-2.0, with the xv6-derived core under MIT.</span>
|
<span class="nv-code nv-text-tertiary">GPL-2.0-or-later, with the xv6-derived core under MIT.</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="nv-body nv-text-secondary pride-note" id="pride-note">
|
<p class="nv-body nv-text-secondary pride-note" id="pride-note">
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
/* SPDX-License-Identifier: Apache-2.0
|
/* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
*
|
*
|
||||||
* The documentation reader.
|
* The documentation reader.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -283,7 +283,7 @@
|
||||||
<div class="nv-divider"></div>
|
<div class="nv-divider"></div>
|
||||||
<div class="site-footer__row">
|
<div class="site-footer__row">
|
||||||
<span class="nv-body">SchOS — kernel <b>SchIFT</b>, filesystem <b>SchFS</b>.</span>
|
<span class="nv-body">SchOS — kernel <b>SchIFT</b>, filesystem <b>SchFS</b>.</span>
|
||||||
<span class="nv-code nv-text-tertiary">Apache-2.0, with the xv6-derived core under MIT.</span>
|
<span class="nv-code nv-text-tertiary">GPL-2.0-or-later, with the xv6-derived core under MIT.</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="nv-body nv-text-secondary pride-note" id="pride-note">
|
<p class="nv-body nv-text-secondary pride-note" id="pride-note">
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@
|
||||||
<a class="nv-button nv-button--lg" href="#what">What it has</a>
|
<a class="nv-button nv-button--lg" href="#what">What it has</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="nv-caption">Apache-2.0 · runs from RAM · writes nothing to your disks</p>
|
<p class="nv-caption">GPL-2.0-or-later · runs from RAM · writes nothing to your disks</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="nv-card nv-card--flush console" aria-label="Boot log">
|
<div class="nv-card nv-card--flush console" aria-label="Boot log">
|
||||||
|
|
@ -642,7 +642,7 @@
|
||||||
<div class="nv-divider"></div>
|
<div class="nv-divider"></div>
|
||||||
<div class="site-footer__row">
|
<div class="site-footer__row">
|
||||||
<span class="nv-body">SchOS — kernel <b>SchIFT</b>, filesystem <b>SchFS</b>.</span>
|
<span class="nv-body">SchOS — kernel <b>SchIFT</b>, filesystem <b>SchFS</b>.</span>
|
||||||
<span class="nv-code nv-text-tertiary">Apache-2.0, with the xv6-derived core under MIT.</span>
|
<span class="nv-code nv-text-tertiary">GPL-2.0-or-later, with the xv6-derived core under MIT.</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="nv-body nv-text-secondary pride-note" id="pride-note">
|
<p class="nv-body nv-text-secondary pride-note" id="pride-note">
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<!-- SPDX-License-Identifier: Apache-2.0 -->
|
<!-- SPDX-License-Identifier: GPL-2.0-or-later -->
|
||||||
# Audio
|
# Audio
|
||||||
|
|
||||||
A program that wants to make a sound opens `/dev/dsp`, writes PCM to it, and
|
A program that wants to make a sound opens `/dev/dsp`, writes PCM to it, and
|
||||||
|
|
|
||||||
|
|
@ -247,10 +247,11 @@ manager or equivalent, and SchOS will load it.
|
||||||
The licensing reasoning matters and is worth stating exactly, because it is
|
The licensing reasoning matters and is worth stating exactly, because it is
|
||||||
easy to get wrong in both directions:
|
easy to get wrong in both directions:
|
||||||
|
|
||||||
- **Distribution is what triggers the GPL.** Shipping a GPL-2.0-only driver in
|
- **Distribution is what triggers the GPL.** SchOS is GPL-2.0-or-later, so
|
||||||
an Apache-2.0 image is what cannot be done — see [../licensing.md](../licensing.md)
|
shipping a GPL-2.0-only driver in an image is now *possible* — see
|
||||||
§2. A user obtaining a driver themselves and loading it on their own machine
|
[../licensing.md](../licensing.md) §6 — but LDLS still does not, by policy. A
|
||||||
is their act, not ours, and is not a distribution by us.
|
user obtaining a driver themselves and loading it on their own machine is
|
||||||
|
their act, not ours, and is not a distribution by us.
|
||||||
- **Implementing a loader is not copying.** Writing support for a module format
|
- **Implementing a loader is not copying.** Writing support for a module format
|
||||||
and a driver ABI from published documentation produces our own work. It is a
|
and a driver ABI from published documentation produces our own work. It is a
|
||||||
clean-room implementation, and it stays one only if it is written from
|
clean-room implementation, and it stays one only if it is written from
|
||||||
|
|
@ -259,8 +260,8 @@ easy to get wrong in both directions:
|
||||||
identifiers say.
|
identifiers say.
|
||||||
|
|
||||||
So the rule for this subsystem is the same as everywhere else in the tree: the
|
So the rule for this subsystem is the same as everywhere else in the tree: the
|
||||||
loader is ours and Apache-2.0, what it loads is the user's business, and nothing
|
loader is ours and GPL-2.0-or-later, what it loads is the user's business, and
|
||||||
GPL ever enters an image we build. `RAMDISK_EXCLUDE` and `NOTPORTS` are the
|
no third-party module enters an image we build. `RAMDISK_EXCLUDE` and `NOTPORTS` are the
|
||||||
existing mechanisms for keeping that true mechanically rather than by intention.
|
existing mechanisms for keeping that true mechanically rather than by intention.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -54,9 +54,10 @@ ships the layer and never the thing it loads. `.gitignore` refuses `*.ko`,
|
||||||
is deliberately not part of `all`, and `make ldls-unstage` takes it out again.
|
is deliberately not part of `all`, and `make ldls-unstage` takes it out again.
|
||||||
|
|
||||||
[../licensing.md](../licensing.md) §6 is the whole argument. The short form is
|
[../licensing.md](../licensing.md) §6 is the whole argument. The short form is
|
||||||
that GPL obligations attach to *distribution*, we distribute Apache-2.0 code
|
that the combination happens in a user process on the user's machine, so no
|
||||||
containing no GPL, and the combination happens in a user process on the user's
|
combined work is distributed by anyone. Since SchOS moved to GPL-2.0-or-later
|
||||||
machine — so no combined work is distributed by anyone.
|
that is no longer the only way it *could* be done — it is the way it is done,
|
||||||
|
because a module we never ship is a module we never have to answer for.
|
||||||
|
|
||||||
### 2. It runs in a process, never in the kernel
|
### 2. It runs in a process, never in the kernel
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<!-- SPDX-License-Identifier: Apache-2.0 -->
|
<!-- SPDX-License-Identifier: GPL-2.0-or-later -->
|
||||||
# Virtual terminals
|
# Virtual terminals
|
||||||
|
|
||||||
Six of them, `/dev/tty1` through `/dev/tty6`.
|
Six of them, `/dev/tty1` through `/dev/tty6`.
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ the kernel's name (**SchIFT**) as a shape.
|
||||||
coverage mask carries none, so the loader draws it in metal and the kernel in
|
coverage mask carries none, so the loader draws it in metal and the kernel in
|
||||||
the theme accent, from the same bytes.
|
the theme accent, from the same bytes.
|
||||||
- **With or without a wordmark.** Set "SchOS" beside it in **Roboto Bold**,
|
- **With or without a wordmark.** Set "SchOS" beside it in **Roboto Bold**,
|
||||||
which is already in the tree (`ports/Roboto`), already Apache-2.0, and already
|
which is already in the tree (`ports/Roboto`), Apache-2.0, and already
|
||||||
in `NOTICE`.
|
in `NOTICE`.
|
||||||
- Non-human and non-animal, permanently. If a character is ever drawn it gets
|
- Non-human and non-animal, permanently. If a character is ever drawn it gets
|
||||||
its own mark; a logo that starts growing a face has taken that job.
|
its own mark; a logo that starts growing a face has taken that job.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<!-- SPDX-License-Identifier: Apache-2.0 -->
|
<!-- SPDX-License-Identifier: GPL-2.0-or-later -->
|
||||||
# Building SchOS
|
# Building SchOS
|
||||||
|
|
||||||
Supported hosts: **Linux, macOS, FreeBSD/OpenBSD/NetBSD, and Windows** (under
|
Supported hosts: **Linux, macOS, FreeBSD/OpenBSD/NetBSD, and Windows** (under
|
||||||
|
|
|
||||||
|
|
@ -130,8 +130,8 @@ file protocol, so a 6 MB ramroot kernel is visibly slower to start than the
|
||||||
**What may go in it is a licensing question, not only a size one.** The image is
|
**What may go in it is a licensing question, not only a size one.** The image is
|
||||||
linked into the kernel binary, so anything in `sysroot/` when it is built becomes
|
linked into the kernel binary, so anything in `sysroot/` when it is built becomes
|
||||||
part of a distributable artifact. A file staged there under a licence that
|
part of a distributable artifact. A file staged there under a licence that
|
||||||
cannot be combined with Apache-2.0 does not merely ride along — it makes the
|
is not ours to redistribute does not merely ride along — it makes the kernel
|
||||||
kernel itself undistributable. `RAMDISK_EXCLUDE` in the Makefile is the list of
|
itself undistributable. `RAMDISK_EXCLUDE` in the Makefile is the list of
|
||||||
paths kept out, and enforcing it in the build rather than relying on someone
|
paths kept out, and enforcing it in the build rather than relying on someone
|
||||||
remembering to unstage something first is deliberate. It has been needed once
|
remembering to unstage something first is deliberate. It has been needed once
|
||||||
already: a 33 MB test payload landed in `sysroot/` and both overflowed the image
|
already: a 33 MB test payload landed in `sysroot/` and both overflowed the image
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<!-- SPDX-License-Identifier: Apache-2.0 -->
|
<!-- SPDX-License-Identifier: GPL-2.0-or-later -->
|
||||||
# Moving the project to a Linux machine
|
# Moving the project to a Linux machine
|
||||||
|
|
||||||
**This move happened.** The tree lives on Fedora now, and the checkout is at
|
**This move happened.** The tree lives on Fedora now, and the checkout is at
|
||||||
|
|
|
||||||
|
|
@ -7,24 +7,31 @@ pointed here long before this file existed.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 1. SchOS is Apache-2.0
|
## 1. SchOS is GPL-2.0-or-later
|
||||||
|
|
||||||
Copyright Nexoniarz. See `LICENSE`.
|
Copyright Nexoniarz. See `LICENSE`. Until 2026-10 SchOS was Apache-2.0; it was
|
||||||
|
never published under that licence, and as the sole author Nexoniarz relicensed
|
||||||
|
it outright.
|
||||||
|
|
||||||
Apache-2.0 was chosen over MIT/BSD for one reason that actually matters at OS
|
**Why the GPL.** Two reasons, one about others and one about us:
|
||||||
scale: it contains an **express patent grant** and a patent-retaliation clause.
|
|
||||||
MIT and BSD are silent on patents, which means a contributor can hand you code
|
|
||||||
and later assert a patent over it. For a kernel that is intended to accept
|
|
||||||
outside contributions, that silence is the expensive kind.
|
|
||||||
|
|
||||||
What that grant means in practice: Apache-2.0 §2 gives everyone a perpetual,
|
- **Copyleft.** Anyone may use, study, modify and redistribute SchOS — but
|
||||||
worldwide, irrevocable licence to reproduce, modify, sublicense and distribute
|
whoever ships it, or something built from it, must ship the source of that
|
||||||
SchOS. Any additional restriction stated elsewhere — in a README, a website,
|
too, under the same terms. Under Apache-2.0 a fork could be closed and sold
|
||||||
or a policy — does not narrow it. The licence text is what holds up.
|
with no changes given back. The GPL does not forbid commercial use; it forbids
|
||||||
|
taking the work private.
|
||||||
|
- **Linux.** Linux is GPL-2.0-only, and Apache-2.0 could not be combined with
|
||||||
|
it. Under the GPL, Linux drivers and code can be adopted (§2).
|
||||||
|
|
||||||
If restricted distribution is ever genuinely wanted, that is a licence change
|
**Why "or later".** It keeps one door open that "only" would close: GPLv3 and
|
||||||
(a bespoke proprietary licence, or something like BUSL-1.1 with a conversion
|
Apache-2.0 code can still be combined with SchOS code, with that combination
|
||||||
date), not a wording change, and it means giving up the Apache grant.
|
shipping under GPLv3. See §2 for why the kernel should not walk through it.
|
||||||
|
|
||||||
|
**What was given up.** Apache-2.0 had an express patent grant; GPLv2 has only
|
||||||
|
an implied one. That mattered most for outside contributions, and there are
|
||||||
|
none yet.
|
||||||
|
|
||||||
|
New first-party files carry `SPDX-License-Identifier: GPL-2.0-or-later`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -36,37 +43,32 @@ date), not a wording change, and it means giving up the Apache grant.
|
||||||
| MIT, ISC | **Yes** | Keep the notice |
|
| MIT, ISC | **Yes** | Keep the notice |
|
||||||
| BSD 2-clause | **Yes** | Keep the notice |
|
| BSD 2-clause | **Yes** | Keep the notice |
|
||||||
| BSD 3-clause | **Yes** | Keep the notice; no endorsement claims |
|
| BSD 3-clause | **Yes** | Keep the notice; no endorsement claims |
|
||||||
| BSD **4-clause** (advertising) | **Avoid** — see §3 | Notice *and* an acknowledgement in advertising materials |
|
| BSD **4-clause** (advertising) | **No** — see §3 | GPL-incompatible |
|
||||||
| Apache-2.0 | **Yes** | Keep NOTICE contents |
|
| GPL-2.0-only, GPL-2.0-or-later, LGPL-2.1 | **Yes** | Source for the combined work; keep the notices |
|
||||||
| MPL-2.0 | Case by case | File-level copyleft; keep those files separate |
|
| MPL-2.0 | Case by case | Compatible through its secondary-licence clause, unless marked otherwise |
|
||||||
| **GPL-2.0-only** | **No** | — |
|
| Apache-2.0, GPL-3.0, LGPL-3.0 | **Not in the kernel**; separate programs and files fine | See below |
|
||||||
| **GPL-3.0 / LGPL-3.0** | **No** for linked code | — |
|
|
||||||
|
|
||||||
**Every "yes" above requires an entry in `NOTICE`.** That file is the project's
|
**Every "yes" above requires an entry in `NOTICE`.** That file is the project's
|
||||||
attribution record and the thing that makes the permissive licences actually
|
attribution record and the thing that makes the licences actually satisfied
|
||||||
satisfied rather than merely tolerated.
|
rather than merely tolerated.
|
||||||
|
|
||||||
### Why GPL-2.0-only is a hard no
|
### One binary, one GPL version
|
||||||
|
|
||||||
Apache-2.0 imposes conditions GPLv2 treats as "further restrictions" under its
|
"Or later" means SchOS code can go out under GPLv2 *or* GPLv3. A single linked
|
||||||
§6 — principally the patent-retaliation term. The FSF and the ASF agree on
|
binary still has to pick one:
|
||||||
this: **Apache-2.0 code and GPL-2.0-only code cannot be combined into one
|
|
||||||
distributable work.** It is not a matter of taste or of how carefully the files
|
|
||||||
are kept apart in the tree; it is that the combined binary cannot satisfy both
|
|
||||||
licences at once.
|
|
||||||
|
|
||||||
GPL-3.0 fixed this in the other direction (Apache-2.0 is compatible *into*
|
- Add **Linux code** (GPL-2.0-only) and that binary is GPLv2.
|
||||||
GPLv3), but that does not help: the result would have to ship under GPLv3, and
|
- Add **Apache-2.0 or GPLv3 code** and that binary is GPLv3, because
|
||||||
SchOS does not.
|
Apache-2.0's patent terms are "further restrictions" under GPLv2 §6.
|
||||||
|
|
||||||
**Practical consequence:** BSD drivers can be adopted. Linux drivers cannot,
|
Those two cannot meet in one binary. Linux is the main reason for the GPL, so
|
||||||
ever, no matter how convenient. This is why the USB stack was written from the
|
**the kernel stays GPLv2-compatible**: no Apache-2.0 or GPLv3 code is linked
|
||||||
specification rather than ported.
|
into it. Userland programs are separate works, so one may be GPLv3 or
|
||||||
|
Apache-2.0 on its own without affecting anything else.
|
||||||
|
|
||||||
**"Cannot be adopted" is not the same as "cannot be run."** A driver the *user*
|
Data files such as fonts are not linked code. Roboto (Apache-2.0) sits beside
|
||||||
obtains and loads on their own machine is their act, not a distribution by us —
|
the system as an aggregate, and that holds inside the ramdisk too: the image is
|
||||||
see §4 and [architecture/ldls.md](architecture/ldls.md), which is the layer built on exactly
|
a filesystem carried by the kernel binary, not code linked with it.
|
||||||
that distinction and which ships no Linux code of any kind.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -80,7 +82,7 @@ uniformly licensed**, and the difference matters per file:
|
||||||
|---|---|
|
|---|---|
|
||||||
| 2-clause BSD — modern NetBSD Foundation files | **Fine** |
|
| 2-clause BSD — modern NetBSD Foundation files | **Fine** |
|
||||||
| 3-clause, "Regents of the University of California" | **Fine.** Berkeley formally rescinded the advertising clause in 1999 |
|
| 3-clause, "Regents of the University of California" | **Fine.** Berkeley formally rescinded the advertising clause in 1999 |
|
||||||
| 4-clause with the advertising clause, **non-UC** copyright holder | **Avoid.** Berkeley's rescission covers Berkeley's copyright, not other people's |
|
| 4-clause with the advertising clause, **non-UC** copyright holder | **No.** Berkeley's rescission covers Berkeley's copyright, not other people's, and the clause is GPL-incompatible |
|
||||||
|
|
||||||
The last row is real, not hypothetical. Measured on this checkout:
|
The last row is real, not hypothetical. Measured on this checkout:
|
||||||
|
|
||||||
|
|
@ -91,10 +93,9 @@ lib/libc 101 of 1575
|
||||||
sys/net 5 of 180 ← the TCP/IP stack is nearly clean
|
sys/net 5 of 180 ← the TCP/IP stack is nearly clean
|
||||||
```
|
```
|
||||||
|
|
||||||
4-clause is still permissive and still redistributable; the burden is an
|
4-clause is still permissive on its own, but the advertising clause is a
|
||||||
advertising obligation that accumulates quietly and is tedious to honour
|
further restriction the GPL does not allow, so **a 4-clause file cannot be
|
||||||
properly. Prefer a 2-clause or UC-Regents file. If a 4-clause file is genuinely
|
combined with SchOS at all**. Use a 2-clause or UC-Regents file, or write it.
|
||||||
the right answer, it goes into `NOTICE` with the full clause quoted.
|
|
||||||
|
|
||||||
Check before copying, not after:
|
Check before copying, not after:
|
||||||
|
|
||||||
|
|
@ -128,7 +129,7 @@ the top of the file; the UC block is a separate licence further down. Berkeley
|
||||||
never spoke for WIDE, so the rescission does not reach it. The two most
|
never spoke for WIDE, so the rescission does not reach it. The two most
|
||||||
valuable files in the stack are the two encumbered ones.
|
valuable files in the stack are the two encumbered ones.
|
||||||
|
|
||||||
That is not fatal — 4-clause is still permissive — but it is exactly the case
|
Under the GPL that rules them out, and it is exactly the case
|
||||||
where a **second BSD tree earns its disk space**: FreeBSD's TCP has been
|
where a **second BSD tree earns its disk space**: FreeBSD's TCP has been
|
||||||
through a relicensing effort NetBSD's has not, so the same file there may well
|
through a relicensing effort NetBSD's has not, so the same file there may well
|
||||||
be 2-clause. Check it the same way before assuming either:
|
be 2-clause. Check it the same way before assuming either:
|
||||||
|
|
@ -180,13 +181,13 @@ Chosen 2026-08-09, both licences checked at source rather than assumed:
|
||||||
| Roboto | desktop, window manager, compositor | **Apache-2.0** |
|
| Roboto | desktop, window manager, compositor | **Apache-2.0** |
|
||||||
| JetBrains Mono | terminal, TTY | **SIL OFL 1.1** |
|
| JetBrains Mono | terminal, TTY | **SIL OFL 1.1** |
|
||||||
|
|
||||||
Roboto is the same licence as SchOS, so it is the easy case: a NOTICE entry
|
Roboto is Apache-2.0, which is fine for a font: it is a data file beside the
|
||||||
and nothing else.
|
system, not code linked into it (§2). A NOTICE entry and nothing else.
|
||||||
|
|
||||||
OFL is permissive and bundling is precisely what it is for, with two conditions
|
OFL is permissive and bundling is precisely what it is for, with two conditions
|
||||||
worth knowing before anyone subsets or converts a font:
|
worth knowing before anyone subsets or converts a font:
|
||||||
|
|
||||||
- **The font stays under OFL** even inside an Apache-2.0 system. It does not
|
- **The font stays under OFL** even inside a GPL-licensed system. It does not
|
||||||
infect anything else; it just cannot be relicensed.
|
infect anything else; it just cannot be relicensed.
|
||||||
- **It may not be sold on its own.** Shipping it as part of an OS is fine.
|
- **It may not be sold on its own.** Shipping it as part of an OS is fine.
|
||||||
- **Reserved Font Names.** JetBrains Mono declares *none* -- its copyright line
|
- **Reserved Font Names.** JetBrains Mono declares *none* -- its copyright line
|
||||||
|
|
@ -212,42 +213,17 @@ with SchOS. Keeping the distinction sharp is what stops it eroding:
|
||||||
rebuild never needs the network; not part of any image, and not all of it is
|
rebuild never needs the network; not part of any image, and not all of it is
|
||||||
redistributable.
|
redistributable.
|
||||||
|
|
||||||
### The userland this rules out, and what was done instead
|
### The userland, and why it is permissive anyway
|
||||||
|
|
||||||
The rule costs something real and it is worth naming the bill rather than only
|
While SchOS was Apache-2.0, **BusyBox** (GPL-2.0-only) and **nano** (GPL-3.0)
|
||||||
the principle.
|
were ruled out, and the userland was built from toybox (0BSD), mksh and kilo
|
||||||
|
(BSD-2-Clause) instead. Both would be possible now — nano as a separate program
|
||||||
|
— but nothing needs replacing: toybox gives 268 applets, kilo is installed as
|
||||||
|
`/bin/edit`, and `cmd/httpd` is first-party.
|
||||||
|
|
||||||
**BusyBox** is the obvious userland for a system this size — about four hundred
|
The `wget` failure that started that discussion was not a userland problem:
|
||||||
applets, including a shell, an editor, `less` and an `httpd`. It is
|
SchOS had no DNS reachable from a process, which BusyBox would have hit
|
||||||
**GPL-2.0-only**, so §2 applies, and here the consequence is sharper than
|
identically. See [architecture/networking.md](architecture/networking.md).
|
||||||
"cannot be linked": `make ramroot` links the root filesystem image *into the
|
|
||||||
kernel binary*, so a BusyBox in `sysroot/` would put GPLv2 code inside an
|
|
||||||
Apache-2.0 executable. Excluding it from the ramdisk avoids that and leaves the
|
|
||||||
ramroot build with no userland at all, which is not a trade worth making.
|
|
||||||
|
|
||||||
**nano** is the same answer for the same reason, one version later: GPL-3.0,
|
|
||||||
which is incompatible with Apache-2.0 in the other direction.
|
|
||||||
|
|
||||||
What was done instead, when the complaint "the userland is too thin" came up:
|
|
||||||
|
|
||||||
| wanted | answer |
|
|
||||||
|---|---|
|
|
||||||
| `awk`, `bc`, `diff`, `more`, `expr`, `tr`, … | already in toybox, in `toys/pending/`, switched off by `defconfig`. Turning 26 of them on took the shipped set from 236 applets to 268, at no licensing cost — it is the same 0BSD tarball. |
|
|
||||||
| an editor that is not `vi` | [kilo](https://github.com/antirez/kilo), BSD-2-Clause, one file, no dependencies. Installed as `/bin/edit` as well as `/bin/kilo`. |
|
|
||||||
| `wget` that works | not a userland problem at all. See below. |
|
|
||||||
| something to host with | `cmd/httpd`, written here, Apache-2.0. |
|
|
||||||
|
|
||||||
The `wget` one is worth recording because it was diagnosed wrongly at first,
|
|
||||||
and switching userland would not have fixed it: **SchOS had no DNS reachable
|
|
||||||
from a process**, so every program taking a hostname failed and each looked
|
|
||||||
like its own bug. BusyBox's `wget` would have failed identically. musl already
|
|
||||||
contains a complete resolver; the only missing fact was which nameserver, which
|
|
||||||
the kernel had all along from DHCP and never published. See
|
|
||||||
[architecture/networking.md](architecture/networking.md).
|
|
||||||
|
|
||||||
The general shape: **a permissive answer existed for every one of these**, and
|
|
||||||
three of the four were already in the tree. That will not always be true, and
|
|
||||||
when it is not the answer is still no.
|
|
||||||
|
|
||||||
The mechanisms that keep this from eroding, since good intentions have already
|
The mechanisms that keep this from eroding, since good intentions have already
|
||||||
failed once here:
|
failed once here:
|
||||||
|
|
@ -286,22 +262,26 @@ copied file is a file to be understood, attributed and maintained forever.
|
||||||
|
|
||||||
## 6. LDLS, and the distribution boundary
|
## 6. LDLS, and the distribution boundary
|
||||||
|
|
||||||
[architecture/ldls.md](architecture/ldls.md) runs Linux drivers. That sounds like it should
|
[architecture/ldls.md](architecture/ldls.md) runs Linux drivers. This section
|
||||||
contradict §2, and it does not, because the two questions below are different
|
was written when SchOS was Apache-2.0 and the boundary below was a legal
|
||||||
ones and only the first is about us.
|
necessity. Under GPL-2.0-or-later it is a **project policy** instead: shipping
|
||||||
|
a GPL-2.0-only `.ko` with SchOS would now be lawful, provided the source goes
|
||||||
|
with it. It is still not done, because a module we never ship is a module we
|
||||||
|
never have to vouch for, track upstream, or provide source for.
|
||||||
|
|
||||||
### LDLS is Apache-2.0
|
### LDLS is ours
|
||||||
|
|
||||||
Every file under `ldls/` is ours. The loader was written from the ELF-64 gABI
|
Every file under `ldls/` is ours, GPL-2.0-or-later. The loader was written from
|
||||||
and the x86-64 psABI; the shim is written under the rule in
|
the ELF-64 gABI and the x86-64 psABI; the shim is written under the rule in
|
||||||
[architecture/ldls.md](architecture/ldls.md). **No Linux code is in it and none ever will
|
[architecture/ldls.md](architecture/ldls.md). Copying Linux code into it would
|
||||||
be**, which is the same standard the xHCI and USB stacks already meet (§5).
|
no longer be a licence problem, but the shim's value is that it is small and
|
||||||
|
understood, so the existing rule stands.
|
||||||
|
|
||||||
### The combination is not ours to make
|
### The combination is the user's
|
||||||
|
|
||||||
| | licence | who distributes it |
|
| | licence | who distributes it |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `ldls/` — loader, shim, host | **Apache-2.0** | us |
|
| `ldls/` — loader, shim, host | **GPL-2.0-or-later** | us |
|
||||||
| a `.ko` | GPL-2.0-only, usually | the user's distribution |
|
| a `.ko` | GPL-2.0-only, usually | the user's distribution |
|
||||||
| the two running together in a process | — | **nobody** |
|
| the two running together in a process | — | **nobody** |
|
||||||
|
|
||||||
|
|
@ -311,20 +291,10 @@ GPLv2 §0 is explicit about where its obligations attach:
|
||||||
> by this License; they are outside its scope. **The act of running the Program
|
> by this License; they are outside its scope. **The act of running the Program
|
||||||
> is not restricted.**
|
> is not restricted.**
|
||||||
|
|
||||||
So: we ship Apache-2.0 code containing no GPL. The user obtains a GPL module
|
So: we ship LDLS and no modules. The user obtains a module from wherever they
|
||||||
from wherever they get their software. The user runs them together on their own
|
get their software and runs it on their own machine. `RAMDISK_EXCLUDE` and the
|
||||||
machine. No combined work is distributed by anyone, and no GPL obligation is
|
`*.ko` rule in `.gitignore` keep that boundary mechanical rather than
|
||||||
triggered — not on us, and not on them.
|
intentional.
|
||||||
|
|
||||||
This is the position FreeBSD has shipped from for about a decade: a
|
|
||||||
BSD-licensed `linuxkpi` in base, GPL `drm-kmod` installed by the user from
|
|
||||||
ports.
|
|
||||||
|
|
||||||
**The consequence for the user, stated plainly:** they cannot redistribute the
|
|
||||||
combination either. An image with a `.ko` baked into it is a single work that
|
|
||||||
would have to satisfy Apache-2.0 and GPL-2.0-only at once, which §2 explains is
|
|
||||||
impossible. That is why `RAMDISK_EXCLUDE` exists, and why `.gitignore` refuses
|
|
||||||
`*.ko` outright — the boundary is kept mechanically rather than by intention.
|
|
||||||
|
|
||||||
### `EXPORT_SYMBOL_GPL` does not apply
|
### `EXPORT_SYMBOL_GPL` does not apply
|
||||||
|
|
||||||
|
|
@ -335,7 +305,7 @@ that.
|
||||||
|
|
||||||
**LDLS has no Linux symbols to gate.** `EXPORT_SYMBOL_GPL` is Linux marking
|
**LDLS has no Linux symbols to gate.** `EXPORT_SYMBOL_GPL` is Linux marking
|
||||||
*Linux's own* symbols, and the check it drives protects those. Every symbol
|
*Linux's own* symbols, and the check it drives protects those. Every symbol
|
||||||
LDLS provides is ours — reimplemented from facts, under Apache-2.0. There is no
|
LDLS provides is ours — reimplemented from facts, under GPL-2.0-or-later. There is no
|
||||||
gate being bypassed, because there is no Linux symbol being exposed.
|
gate being bypassed, because there is no Linux symbol being exposed.
|
||||||
|
|
||||||
So LDLS implements no licence check. It **reads** the module's declared licence
|
So LDLS implements no licence check. It **reads** the module's declared licence
|
||||||
|
|
|
||||||
|
|
@ -135,10 +135,9 @@ in `NOTICE` **before** the file is committed, not after.
|
||||||
| libxkbcommon | MIT |
|
| libxkbcommon | MIT |
|
||||||
| xkeyboard-config | MIT |
|
| xkeyboard-config | MIT |
|
||||||
|
|
||||||
All Apache-2.0 compatible, all needing only a `NOTICE` entry. **Nothing here
|
All GPL-2.0-or-later compatible, all needing only a `NOTICE` entry. The
|
||||||
carries the GPL problem that governs drivers**, which is a pleasant change and
|
Wayland ecosystem is permissively licensed almost throughout, so nothing here
|
||||||
worth noticing: the Wayland ecosystem is permissively licensed almost throughout,
|
raises a licensing question at all.
|
||||||
and that is a genuine argument for it beyond any technical one.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// Counters for the filesystem and block paths, read through /proc/fsstat.
|
// Counters for the filesystem and block paths, read through /proc/fsstat.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// /dev/pci -- device access from userspace.
|
// /dev/pci -- device access from userspace.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
// SchOS — POSIX-compatibility types used by kernel syscall handlers.
|
// SchOS — POSIX-compatibility types used by kernel syscall handlers.
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
#pragma once
|
#pragma once
|
||||||
#ifndef SCHBOOT_H
|
#ifndef SCHBOOT_H
|
||||||
#define SCHBOOT_H
|
#define SCHBOOT_H
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// The protocol between PID 1 and the supervisor.
|
// The protocol between PID 1 and the supervisor.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// Virtual terminals.
|
// Virtual terminals.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// Hardware watchpoints. docs/architecture/debugging.md milestone D4.
|
// Hardware watchpoints. docs/architecture/debugging.md milestone D4.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// The kernel log that outlives the kernel. See include/klog.h.
|
// The kernel log that outlives the kernel. See include/klog.h.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// Naming an address.
|
// Naming an address.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// PSOGM — the SchOS crash screen.
|
// PSOGM — the SchOS crash screen.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// The bounded string builder. See include/sbuf.h for what it is and why it
|
// The bounded string builder. See include/sbuf.h for what it is and why it
|
||||||
// moved out of kernel/dev/procfs.c.
|
// moved out of kernel/dev/procfs.c.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// /dev/dbg -- asking the kernel a question. See include/dbg.h.
|
// /dev/dbg -- asking the kernel a question. See include/dbg.h.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// /dev/netdev -- a network interface whose backend is a process.
|
// /dev/netdev -- a network interface whose backend is a process.
|
||||||
// See include/netuser.h.
|
// See include/netuser.h.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// /dev/pci -- PCI devices, reachable from userspace.
|
// /dev/pci -- PCI devices, reachable from userspace.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// Virtual terminals. See include/vt.h for why this exists at all; the short
|
// Virtual terminals. See include/vt.h for why this exists at all; the short
|
||||||
// version is that switching needs a backing store, and the console drew
|
// version is that switching needs a backing store, and the console drew
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,9 @@
|
||||||
// the controller is not complicated; BSD is much more valuable as the
|
// the controller is not complicated; BSD is much more valuable as the
|
||||||
// reference you check yourself against than as the code you paste.
|
// reference you check yourself against than as the code you paste.
|
||||||
//
|
//
|
||||||
// (Licensing points the same way. The BSD stacks are BSD-2/3-clause, which is
|
// (Licensing no longer decides it: the BSD stacks are BSD-2/3-clause and
|
||||||
// compatible with Apache-2.0 -- Linux's drivers are GPL-2.0-only, which is
|
// Linux's drivers are GPL-2.0-only, and both combine with GPL-2.0-or-later.
|
||||||
// not. See docs/guides/adding-a-driver.md.)
|
// The argument above is the whole reason. See docs/licensing.md.)
|
||||||
//
|
//
|
||||||
// Enumeration polls the event ring instead of using interrupts. That is not
|
// Enumeration polls the event ring instead of using interrupts. That is not
|
||||||
// laziness: pci_bind_all() runs from kmain() with interrupts disabled and no
|
// laziness: pci_bind_all() runs from kmain() with interrupts disabled and no
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// devtmpfs: /dev, generated rather than stored.
|
// devtmpfs: /dev, generated rather than stored.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// Attributes, and the index over them.
|
// Attributes, and the index over them.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// SchFS copy-on-write B-tree — see btree.h for the contract.
|
// SchFS copy-on-write B-tree — see btree.h for the contract.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// SchFS in the kernel: block device, mount, and the transaction bracket.
|
// SchFS in the kernel: block device, mount, and the transaction bracket.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// SchFS object layer, read side: inodes, directories and file data.
|
// SchFS object layer, read side: inodes, directories and file data.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// SchFS object layer, write side: create, link, unlink, rename, write,
|
// SchFS object layer, write side: create, link, unlink, rename, write,
|
||||||
// truncate.
|
// truncate.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// SchFS internals: the volume (uberblock ring, block allocation) and the object
|
// SchFS internals: the volume (uberblock ring, block allocation) and the object
|
||||||
// layer (inodes, directories, file data) that sit on top of the B-tree.
|
// layer (inodes, directories, file data) that sit on top of the B-tree.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// SchFS space manager: which blocks are in use.
|
// SchFS space manager: which blocks are in use.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// SchFS behind the VFS: the fs_ops table that makes SchFS files reachable
|
// SchFS behind the VFS: the fs_ops table that makes SchFS files reachable
|
||||||
// through open(2), read(2), write(2) and the rest.
|
// through open(2), read(2), write(2) and the rest.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// SchFS volume layer: the uberblock ring.
|
// SchFS volume layer: the uberblock ring.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// AF_INET sockets, on top of lwIP's raw API.
|
// AF_INET sockets, on top of lwIP's raw API.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// lwIP's compiler/platform header for SchOS.
|
// lwIP's compiler/platform header for SchOS.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// lwIP configuration for SchOS.
|
// lwIP configuration for SchOS.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// lwIP network interfaces over the netdev class.
|
// lwIP network interfaces over the netdev class.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
// <ctype.h> for lwIP, shadowing the host's.
|
// <ctype.h> for lwIP, shadowing the host's.
|
||||||
//
|
//
|
||||||
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
// <errno.h> for lwIP, shadowing the host's.
|
// <errno.h> for lwIP, shadowing the host's.
|
||||||
//
|
//
|
||||||
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
// <inttypes.h> for lwIP, shadowing the host's.
|
// <inttypes.h> for lwIP, shadowing the host's.
|
||||||
//
|
//
|
||||||
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
// <limits.h> for lwIP, shadowing the host's.
|
// <limits.h> for lwIP, shadowing the host's.
|
||||||
//
|
//
|
||||||
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
// <stddef.h> for lwIP, shadowing the host's.
|
// <stddef.h> for lwIP, shadowing the host's.
|
||||||
//
|
//
|
||||||
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
// <stdint.h> for lwIP, shadowing the host's.
|
// <stdint.h> for lwIP, shadowing the host's.
|
||||||
//
|
//
|
||||||
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
// <stdio.h> for lwIP, shadowing the host's.
|
// <stdio.h> for lwIP, shadowing the host's.
|
||||||
//
|
//
|
||||||
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// <stdlib.h> for lwIP, shadowing the host's. See shim/string.h for why these
|
// <stdlib.h> for lwIP, shadowing the host's. See shim/string.h for why these
|
||||||
// files exist at all.
|
// files exist at all.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// <string.h> for lwIP, shadowing the host's.
|
// <string.h> for lwIP, shadowing the host's.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
// <unistd.h> for lwIP, shadowing the host's.
|
// <unistd.h> for lwIP, shadowing the host's.
|
||||||
//
|
//
|
||||||
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
// Empty on purpose. Everything lwIP would take from this header is supplied by
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// The lwIP port layer: everything lwIP needs from the system it runs on.
|
// The lwIP port layer: everything lwIP needs from the system it runs on.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// The network thread, and the one place the TCP/IP stack is started.
|
// The network thread, and the one place the TCP/IP stack is started.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// rtnetlink, enough of it that getifaddrs(3) works.
|
// rtnetlink, enough of it that getifaddrs(3) works.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
// Linux x86_64 syscall number -> SchOS syscall number translation.
|
// Linux x86_64 syscall number -> SchOS syscall number translation.
|
||||||
// Enabled per process by sys_enable_linux_abi (see kernel/sys/sys_compat.c).
|
// Enabled per process by sys_enable_linux_abi (see kernel/sys/sys_compat.c).
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// Reading BTF. See ldls/btf.h.
|
// Reading BTF. See ldls/btf.h.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// Reading BTF: struct layouts and function prototypes, from the kernel that
|
// Reading BTF: struct layouts and function prototypes, from the kernel that
|
||||||
// the driver was built for.
|
// the driver was built for.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// ldls-inspect -- what is in a relocatable object, and what it wants.
|
// ldls-inspect -- what is in a relocatable object, and what it wants.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// ldls-run -- load a module and call its init, on the build machine.
|
// ldls-run -- load a module and call its init, on the build machine.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// ldls-types -- ask a kernel's BTF where its fields are.
|
// ldls-types -- ask a kernel's BTF where its fields are.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// Loading a relocatable object. See ldls/ko.h.
|
// Loading a relocatable object. See ldls/ko.h.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// Loading a relocatable object. docs/architecture/ldls.md, "The loader".
|
// Loading a relocatable object. docs/architecture/ldls.md, "The loader".
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// Register access. See ldls/kpi/kpi.h for the provenance rule.
|
// Register access. See ldls/kpi/kpi.h for the provenance rule.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// The KPI, and the table the loader resolves against. See ldls/kpi/kpi.h.
|
// The KPI, and the table the loader resolves against. See ldls/kpi/kpi.h.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
//
|
//
|
||||||
// The KPI: the Linux symbols a hosted driver actually calls, implemented.
|
// The KPI: the Linux symbols a hosted driver actually calls, implemented.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue