Porting zsh found four defects in the kernel and one in the filesystem. None of them were about zsh; all of them had been there the whole time. **exec threw the environment away.** kernel/fs/exec.c wrote a single zero for envp with the comment "(no environment)" -- not yet, but ever, for every process. musl has been passing a perfectly good envp to execve (Linux 59, which SchOS answers) and it was never read. So $TERM was unset, $PATH was whatever each program invented, and a variable exported in a shell did not survive the exec meant to carry it. exec() takes an envp, sys_exec reads argument three, and schinit manifests grew an Environment key. The userland two-argument exec(path, argv) stays as a wrapper that passes null explicitly -- the raw stub is execve now, so a short caller cannot leave %rdx holding a stray pointer. **Which overflowed the kernel stack.** Three pointer arrays, ~1.8 KB, on a 4096-byte stack, under exec -> loaduvm -> readi -> SchFS -> btree. Pid 1 went down on the first exec. The canary caught it and named the process, which is what it is for. They live in one kalloc'd page now. **waitpid returned a bare -1** for both "no children" and "interrupted". musl reads [-4095,-1] as -errno, so userspace saw EPERM; zsh printed "wait failed: operation not permitted" and abandoned the rest of /etc/zsh/zshrc. -ECHILD and -EINTR now. Third time a bare -1 has cost real time -- on a system with no permission model, EPERM should be read as "a syscall returned -1". **NVMA was 64.** musl's allocator takes a mapping per size class and does not release them eagerly, so compinit ran out of slots and got -1, which is EPERM, which malloc turns into NULL, which zsh reports as "fatal error: out of memory" -- on a machine with 1000 MB free. 256 slots, and -ENOMEM. **And a small write to SchFS costs 58 ms.** 200 writes to one open file take 11.75 s; the same to /dev/null take 0.14 s. That is the design stated at the top of kmount.c -- one transaction group per operation, and a commit is two flushes and an uberblock -- not a bug. But compdump writes its digest with thousands of separate prints, so it takes minutes and looks like a hang. compinit -D, which skips the dump, finishes in 3.6 s. This one is a decision rather than a fix, so it is written up and left: /etc/zsh/zshrc keeps compinit switched off and explains exactly why, with the measurements. zsh runs as /bin/zsh and is the console shell. ZLE works -- arrow keys recall history through terminfo, $COLUMNS reads the real 160 because TIOCGWINSZ was fixed, colour and prompt expansion work, startup is 0.14 s. mksh keeps /bin/sh, so schinit's no-jobs fallback is a different program from the one that could have failed. Also fixed while here: AT_CLKTCK was the literal 100 and is USER_HZ; the extract rule in four ports could move a source tree inside itself when make re-ran it, which is how zsh's configure came to write modfile=zsh-5.9/... into config.modules and fail three steps later. schfs-check passes. Full writeup in docs/history/kernel.md section 14. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VQ7Qx8E1q1M1bbCq8QLHS2
214 lines
11 KiB
Text
214 lines
11 KiB
Text
SchOS
|
|
Copyright 2026 Nexoniarz
|
|
|
|
This product includes software developed as part of the SchOS project,
|
|
licensed under the Apache License, Version 2.0. See LICENSE.
|
|
|
|
================================================================================
|
|
Third-party software
|
|
================================================================================
|
|
|
|
SchOS incorporates and redistributes software written by others. Their
|
|
licences apply to their code and are NOT superseded by the SchOS licence.
|
|
A built SchOS image contains binaries derived from all of the following.
|
|
|
|
--------------------------------------------------------------------------------
|
|
xv6-x86_64 / xv6 MIT License
|
|
--------------------------------------------------------------------------------
|
|
Copyright (c) 2006-2019 Frans Kaashoek, Robert Morris, Russ Cox,
|
|
Massachusetts Institute of Technology CSAIL
|
|
|
|
The SchIFT kernel is a derivative work of xv6. Substantial portions of
|
|
kernel/ -- notably the process, trap, virtual memory, buffer cache and v1
|
|
filesystem code -- descend from it, however heavily rewritten. The MIT licence
|
|
requires that this notice be preserved in all copies; see LICENSE.MIT.
|
|
|
|
--------------------------------------------------------------------------------
|
|
musl libc 1.2.5 MIT License
|
|
--------------------------------------------------------------------------------
|
|
Copyright (c) 2005-2020 Rich Felker and contributors
|
|
|
|
Built from ports/musl. Provides the C library every userland program links
|
|
against. See the extracted source's COPYRIGHT file for the full contributor
|
|
list, which the MIT terms require be carried along with binaries.
|
|
|
|
--------------------------------------------------------------------------------
|
|
toybox 0.8.12 Zero-Clause BSD (0BSD)
|
|
--------------------------------------------------------------------------------
|
|
Copyright (c) 2006-2024 Rob Landley and contributors
|
|
|
|
Built from ports/toybox. Supplies the standard command set in /bin. 0BSD
|
|
imposes no attribution requirement at all; this entry is courtesy, not
|
|
obligation.
|
|
|
|
--------------------------------------------------------------------------------
|
|
mksh R59c MirOS Licence
|
|
--------------------------------------------------------------------------------
|
|
Copyright (c) 2002-2023 Thorsten Glaser and contributors
|
|
Portions derived from the Public Domain Korn Shell (pdksh)
|
|
|
|
Built from ports/mksh. Supplies /bin/sh. The MirOS Licence is permissive and
|
|
requires the copyright notice be retained.
|
|
|
|
--------------------------------------------------------------------------------
|
|
zsh 5.9 MIT-like
|
|
--------------------------------------------------------------------------------
|
|
Copyright (c) 1992-2017 Paul Falstad, Richard Coleman, Zoltan Hidvegi,
|
|
Andrew Main, Peter Stephenson, Sven Wischnowsky, and others
|
|
|
|
Built from ports/zsh. Installed as /bin/zsh and used as the interactive shell;
|
|
/bin/sh remains mksh.
|
|
|
|
zsh's LICENCE notes that a few shell functions are licensed under the GNU
|
|
General Public Licence and states that, since no core function is affected,
|
|
those files may simply be omitted. They are. ports/zsh/Makefile removes four
|
|
files after extraction -- completions for darcs, qdbus, osc and zypper -- and
|
|
refuses to install if any of them is still present. No GPL-licensed file is
|
|
shipped in a SchOS image.
|
|
|
|
--------------------------------------------------------------------------------
|
|
ncurses 6.4 MIT License
|
|
--------------------------------------------------------------------------------
|
|
Copyright 2018-2022 Thomas E. Dickey
|
|
Copyright 1998-2018 Free Software Foundation, Inc.
|
|
|
|
Built from ports/ncurses. Linked into zsh so that its line editor can drive a
|
|
terminal, and into sysroot/bin/tinfotest. Built with --disable-database and
|
|
compiled-in fallbacks, so no terminfo files are installed.
|
|
|
|
--------------------------------------------------------------------------------
|
|
lwIP 2.2.0 BSD 3-Clause
|
|
--------------------------------------------------------------------------------
|
|
Copyright (c) 2001, 2002 Swedish Institute of Computer Science
|
|
All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions are met:
|
|
|
|
1. Redistributions of source code must retain the above copyright notice,
|
|
this list of conditions and the following disclaimer.
|
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
this list of conditions and the following disclaimer in the documentation
|
|
and/or other materials provided with the distribution.
|
|
3. The name of the author may not be used to endorse or promote products
|
|
derived from this software without specific prior written permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
|
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
|
EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
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
|
|
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
|
|
are unmodified. Clause 3 is a no-endorsement term, not the four-clause
|
|
advertising requirement, so it combines with Apache-2.0 without difficulty.
|
|
|
|
--------------------------------------------------------------------------------
|
|
Intel 8254x device identifiers BSD 3-Clause
|
|
--------------------------------------------------------------------------------
|
|
Copyright (c) 2001-2020, Intel Corporation
|
|
All rights reserved.
|
|
|
|
The PCI device IDs in include/e1000.h are transcribed from FreeBSD's
|
|
sys/dev/e1000/e1000_hw.h, which carries the Intel 3-clause BSD licence above
|
|
(verified: no advertising clause). Only the identifier constants are used --
|
|
data, not implementation. kernel/drivers/net/e1000/e1000.c is written from
|
|
Intel's public manual 317453 and contains no FreeBSD or Intel driver code.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the conditions of the 3-clause BSD
|
|
licence are met, including retention of this notice and the disclaimer, and
|
|
that neither the name of Intel Corporation nor the names of its contributors
|
|
are used to endorse or promote products derived from this software without
|
|
specific prior written permission.
|
|
|
|
--------------------------------------------------------------------------------
|
|
usb.ids -- USB vendor and product database BSD 3-Clause (dual-licensed)
|
|
--------------------------------------------------------------------------------
|
|
Maintained by Stephen J. Gowdy <linux.usb.ids@gmail.com>
|
|
http://www.linux-usb.org/usb.ids
|
|
|
|
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
|
|
the BSD option; the GPL option is not exercised and could not be, since
|
|
Apache-2.0 and GPL-2.0-only cannot be combined (see docs/licensing.md section
|
|
2).
|
|
|
|
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
|
|
own header, so what shipped is always knowable.
|
|
|
|
--------------------------------------------------------------------------------
|
|
Roboto Apache-2.0
|
|
--------------------------------------------------------------------------------
|
|
Copyright the Roboto Project Authors (https://github.com/googlefonts/roboto)
|
|
|
|
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
|
|
obligation beyond this notice. Intended for the desktop, window manager and
|
|
compositor.
|
|
|
|
--------------------------------------------------------------------------------
|
|
JetBrains Mono SIL OFL 1.1
|
|
--------------------------------------------------------------------------------
|
|
Copyright 2020 The JetBrains Mono Project Authors
|
|
(https://github.com/JetBrains/JetBrainsMono)
|
|
|
|
Shipped as /usr/share/fonts/JetBrainsMono-Regular.ttf, from ports/JetBrains_Mono
|
|
(full licence text at ports/JetBrains_Mono/OFL.txt). Intended for the terminal
|
|
and TTY.
|
|
|
|
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
|
|
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
|
|
(a pre-rasterised bitmap, for instance) may keep the name.
|
|
|
|
--------------------------------------------------------------------------------
|
|
"New File System For XV6" MIT License
|
|
--------------------------------------------------------------------------------
|
|
Copyright (c) Qi Ma, Leyi Pan, Ao Sun, Peiran Xu
|
|
|
|
kernel/fs/fs.c and parts of tools/mkfs.c derive from this project, which extends
|
|
xv6's file system with features SchOS still uses today:
|
|
|
|
- the HTree hashed directory index (BKDRHash, HASHRANGE, the primary/overflow
|
|
bucket layout), after Daniel Phillips, "A Directory Index for EXT2",
|
|
5th Annual Linux Showcase & Conference, 2001
|
|
- Ext4-style extents (T_EXTENT)
|
|
- the inode bitmap
|
|
- symbolic links, file permissions, lseek and append
|
|
|
|
Licensed under the MIT License, which permits this use and requires that the
|
|
copyright notice and permission notice be retained. This entry is that
|
|
retention; it was missing until 2026-08-09 and is recorded here regardless of
|
|
what happens to the code, because the obligation attaches to every copy already
|
|
made.
|
|
|
|
Distinct from xv6 itself (LICENSE.MIT), which this project in turn derives from.
|
|
|
|
================================================================================
|
|
|
|
The build downloads upstream tarballs into dist/ and applies the patches in
|
|
ports/<name>/patches/. Nothing in ports/ is SchOS code; do not add first-party
|
|
work there. See docs/layout.md.
|
|
|
|
Licence questions -- what may be copied in, what may never be, and how to check
|
|
a NetBSD file's clause before using it -- are worked through in
|
|
docs/licensing.md.
|
|
|
|
fastfetch MIT
|
|
https://github.com/fastfetch-cli/fastfetch
|
|
Copyright (c) 2022 Linus Dierheimer and contributors
|
|
|
|
Built from source by ports/fastfetch and installed as /bin/fastfetch.
|
|
Unpatched: see the note at the top of that Makefile about why what it
|
|
cannot detect becomes work in the kernel rather than a patch here.
|