Two things, both asked for. **The crash report no longer says which monitors it reached.** "The report is on the virtio-gpu display too" was a line about the crash screen printed on the crash screen. The report says what happened and where to read it again; that is not part of it. **And the second head now shows the F8 menu and the boot.** It used to be black until vgpud started several seconds into userspace -- through the splash, through the menu, through every boot message -- which from the outside is indistinguishable from a display that does not work. Three stages now cover the whole boot and hand over to each other without coordinating: *The loader.* LocateProtocol() answers with the first GOP and offers no way to ask for the rest, so the rest are found by handle and fed the primary's framebuffer as a Blt source at the points where a screen is finished: the menu, the resolution chooser, system information, the splash, each segment of the kernel load. Blt rather than a second framebuffer to draw into, because a virtio GOP does not have one -- the same fact that made a virtio-only machine reboot-loop two commits ago. *The kernel.* gfx remembers which rows were drawn, as one span rather than a list of rectangles, because console output is lines and a span is what lines make. display_mirror_console() copies that span across: a line of boot text is one cell-row transfer, not a screen. Primed once after pci_init(), because a display that has just appeared has a black scanout and the console it should be showing was drawn by the loader into a framebuffer it knows nothing about. *Then vgpud*, from the same console framebuffer, unchanged. **Two bugs found building it, both worth the retelling.** The mirror ran per character from inside vt_feed -- which is inside the console lock -- and vga_disp_acquire() announces its back buffer with a cprintf. A CPU taking a lock it already holds, with a call chain that said exactly that. It runs at the end of consolewrite() and cprintf() now, outside the lock, which is also the better batching: one transfer per write instead of one per character. And "is this the console's own screen" was asked of the pointer acquire() returned. vga_fb hands back a back buffer it copies onto the console's framebuffer afterwards, so on a one-screen machine the answer was "a different screen" -- and the console was mirrored onto itself through two megabytes of intermediate, allocated for the purpose. display_ops grew scanout_phys, which is a fact about the hardware rather than a policy a driver can get subtly wrong, and it is asked first: it has no side effects and acquire() has two. Verified with two heads under QEMU, screendumping the virtio head every 400 ms from power-on: splash, splash, splash, then the console, and it stays. The F8 menu appears on it; choosing 1024x768 there brings both heads up at 1024x768 byte-identical. A panic still reaches both. Both supported configurations: one boot each, no traps, no panics, socktest and memfdtest green. One gap remains and is documented rather than hidden: while the kernel's driver resets the device during probe, QEMU shows "Display output is not active" for a fraction of a second. A device being taken over has no scanout until the new driver sets one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
204 lines
11 KiB
Text
204 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 -- 268
|
|
applets, which is defconfig's 236 plus a curated set from toys/pending/ (awk,
|
|
bc, diff and the rest); see ports/toybox/Makefile. 0BSD imposes no attribution
|
|
requirement at all; this entry is courtesy, not obligation.
|
|
|
|
--------------------------------------------------------------------------------
|
|
kilo (commit 323d93b) BSD 2-Clause
|
|
--------------------------------------------------------------------------------
|
|
Copyright (c) 2016 Salvatore Sanfilippo <antirez@gmail.com>
|
|
|
|
Built from ports/kilo. Supplies /bin/kilo and /bin/edit, the text editor. The
|
|
BSD 2-Clause terms require the copyright notice and disclaimer be retained in
|
|
binary distributions; the full text is installed at
|
|
/usr/share/licenses/kilo/LICENSE in every image.
|
|
|
|
--------------------------------------------------------------------------------
|
|
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.
|
|
|
|
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.
|