Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,9 @@ Host: `toyos-net-tcp`, `toyos-dns`, `toyos-mdns`, `toyos-swap`, `toyos-inspect`,
- an `env` request is answered with a failure, never left unanswered;
- a program whose connection goes is ended: no `spin` left running for the next exec to list.
- metal `https_tls13` (and `https_tls13_e1000e`, the same fetch on the 82574): ureq and rustls
fetch over TLS 1.3 on the I219.
fetch over TLS 1.3 on the I219. Stage 3 of
`issues/design-debt/the-internet-clients-work-unchanged.md` owns this row and deletes this
line.
- metal `sshd_files`: sftp moves files byte for byte.
- unrepresentable `netd_seeds_its_stack`: the stack cannot be built without the kernel's seed.

Expand Down
69 changes: 69 additions & 0 deletions issues/build/toyos-builds-itself.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,75 @@ AArch64 one step behind, on `issues/kernel/toyos-runs-on-arm64.md`'s track.
again to the same bytes.
*Exit*: the fixed point, reached with no host in the loop.

**Decided** (owner, 2026-10-01).
- LLVM ships as a binary seed. C is accepted because the compiler is LLVM, in
programs too, important ones included.
- cargo's C dependencies are accepted.
- Perl and Python come to ToyOS.
- Make it work, then optimise, then compare: no performance study now, and no
comparison before a compilation inside ToyOS succeeds.

**To build** (2026-10-01), in an order that is open. Where a stage names
libc's state it is `userland/libc` at `15625e0cb`.
- **The `libc` crate gains a ToyOS module**, checked by `ctest` against
`userland/libc`'s headers. `libc` 0.2.189 has none (`rg -i toyos` over its
`src` matches nothing) and is empty for an OS it does not know
(`src/lib.rs`), and `ToyOSOrg/libc` does not exist (GitHub's API answers
404). cargo's `curl-sys`, `libssh2-sys` and `libgit2-sys` import its C types
unconditionally.
- **libc gains `select`.** curl 8.21.0, which `curl-sys` 0.4.90 builds, does
not compile without it (`lib/curlx/wait.c`: `#error "We cannot compile
without select() support."`) and waits on its sockets through it: `select.c`
calls `poll` only under `HAVE_POLL`, which `curl-sys` does not define. Stage
3 of `issues/kernel/a-childs-end-is-an-event-and-a-parent-takes-its-children-down.md`
builds none, because a descriptor is a handle and passes `FD_SETSIZE`; what
`select` answers for such a descriptor is open.
- **libc gains what cargo's libraries call**, among them `setvbuf` and
`socketpair`, which it does not define; a `realpath` that resolves, a file
`mmap` and record locks
(`issues/build/libc-refuses-what-toyos-cannot-yet-answer.md`); file
identities
(`issues/build/libc-stat-answers-one-serial-number-for-every-file.md`),
served like the locks by fsd; and socket descriptors that are pollable and
can be non-blocking
(`issues/build/libc-close-of-a-socket-ends-the-process.md`). Read from each
library's source and not run: SQLite's default VFS takes `fcntl` record
locks and keys them on `st_dev` and `st_ino`; libgit2 opens every repository
through `realpath` and reads packs through a file `mmap`; curl and libssh2
wait on non-blocking sockets, curl's multi handle wakes through a
`socketpair`, and its TLS key log sets its buffering through `setvbuf`.
- **cargo's eight C libraries are cross-built for ToyOS**: curl, libgit2,
libssh2, OpenSSL, SQLite, nghttp2, zlib and blake3. Compiled and linked
with the toolchain's clang against that libc's C sysroot, the sources of
nghttp2, zlib and blake3 build with nothing undefined, and the other five
stop on headers, types or functions libc lacks. `openssl-src` 300.6.1 knows
no ToyOS target and refuses one it does not know (`src/lib.rs`), and
`openssl-sys` is a `cfg(unix)` dependency of `curl-sys` and `libssh2-sys`,
which ToyOS is not. Open until M4: whether cargo's OpenSSL is built for
ToyOS through its Perl `Configure`, or cargo takes curl's rustls backend
there.
- **The tools a self-build runs are built for ToyOS**: Perl and Python, ported
to start a child by spawn and never by fork; brush as the POSIX `sh`
(`issues/build/ninja-runs-every-command-through-a-bin-sh-toyos-does-not-have.md`);
uutils; make; CMake, its libuv ported to spawn; and awk. Those written in C
or C++ wait on stage 3 of the child-process track and on
`issues/filesystem/there-is-no-dev-null.md`. A search of Perl 5.44.0's
sources for `posix_spawn` matches nothing. Open: which Python, which make and
which awk.
- **`pkg` installs a toolchain**: an archive past 256 MiB, and links. It
inflates a whole archive in memory under `MAX_INFLATED`, 256 MiB, and refuses
every link (`userland/pkg/src/main.rs`, `archive.rs`). A toolchain's size is
measured on a proxy, the Linux-host release
`toolchain-linux-x86_64-48dd24f826263d6c`: stripped with `llvm-objcopy
--strip-all`, its `librustc_driver` is 184.7 MB, its clang 122.8 MB and its
lld 78.6 MB, beside 181.1 MB of `x86_64-unknown-toyos` libraries. And the
loader finds a package's own libraries
(`issues/filesystem/a-package-cannot-ship-its-own-libraries.md`): rustc's
launcher names `librustc_driver` as needed (`llvm-readobj --needed-libs`).
- **The toolchain is `pkg` packages, and the image carries none of it.** Open:
how it is split into packages, and how a self-host test's guest reaches
them.

**Blocked on other tracks.** M2 needs packages over HTTPS
(`issues/filesystem/a-package-is-a-directory-under-apps-and-the-installer-is-a-program.md`)
and the network stack under it (`issues/hardware/the-lan-is-not-yet-production-grade.md`,
Expand Down
26 changes: 20 additions & 6 deletions issues/design-debt/the-internet-clients-work-unchanged.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,26 @@ netd, `toyos::net` and std's ToyOS networking in the `rust/` fork.
lossy transfers byte-exact, timeouts honoured, a departed client freeing
everything in netd. **Exit**: each is a guest test against the host's own
TCP stack, with a hash over every byte moved.
3. **TLS.** `rustls` with the `graviola` provider and the Mozilla root set
as a pinned data file in the signed image, used as published; what breaks
is fixed in this repository's layers or carried upstream as a fork.
**Exit**: an unmodified `rustls` client completes a handshake with a
host-side server in the harness, and refuses a wrong name and an untrusted
root.
3. **TLS.** `rustls` with the `ring` provider (owner, 2026-10-02; `graviola`
is an option for later) and the Mozilla root set as a pinned data file in
the signed image, used as published; what breaks is fixed in this
repository's layers or carried upstream as a fork. This stage owns the
T14's `https_tls13` row, and stage H of
`issues/build/the-guest-suite-runs-only-what-no-cheaper-tier-reaches.md`
points here for it. The guest test of that name ran the tree's one ToyOS
program on `rustls`; the program and its judge's server installed
`rustls-rustcrypto` 0.0.2-alpha, and #660 cut both. The row comes back on
`ring` and waits for it; `rustls-rustcrypto` does not come back (owner,
2026-10-02). Whether `ring` builds for the ToyOS target is open and
untried: no build compiles it. `rustls-rustcrypto` is still named by
doom's build script, which installs it on the host, and by a line the cut
left in `tests/toyos-rust-tests`
(`issues/build/the-guest-test-crate-depends-on-three-crates-no-test-uses.md`).
Open: what doom's build script installs instead.
**Exit**: `https_tls13` is a `METAL` row: on the T14's I219 an unmodified
`ureq` and `rustls` client on the `ring` provider fetches over TLS 1.3
from a server the harness runs, and refuses a wrong name and an untrusted
root; and no manifest names `rustls-rustcrypto`.
4. **HTTP.** An HTTP crate used as published. **Exit**: an unmodified client
fetches a body over HTTPS, following a redirect, byte-exact.
5. **The proof is `pkg install <url>`** — the package track's HTTPS stage
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@ directory is `issues/isolation/every-program-sees-only-the-files-it-was-given.md
signal-set calls; `environ`, `setenv`, `unsetenv`; `kill` with `SIGKILL` for
a child or a `-pgid` of its children, 0 as a probe, `EINVAL` for other
signals until stage 6; `system`, `popen` and `pclose` through
`/system/bin/shell -c`. No `select`: a descriptor is a handle and passes
`FD_SETSIZE`. A handler for any signal libc imitates runs at once, beside the
`/system/bin/shell -c`. No `select` in this stage: `issues/build/toyos-builds-itself.md`
owns it. A handler for any signal libc imitates runs at once, beside the
program: inside a blocking call of a thread that leaves the signal unblocked
(`ppoll` and `sigsuspend` under their mask), and, while no thread is in one,
on libc's own thread. After it `read`, `recv`, `accept`, `wait`, `waitpid`
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
status: open
kind: tooling
opened: 2026-10-02
---

# Kernel issues cite the cut HTTPS tests as cover that runs

`520c0d129` deleted the guest tests `https_tls13` and `https_tls13_e1000e`, and
three issues still give one or both as tests that run:

- `issues/kernel/a-claims-own-refusals-are-read-by-nothing.md`
- `issues/kernel/no-boot-reaches-the-refusal-that-keeps-a-bar-read-inside-a-declared-window.md`
- `issues/kernel/no-boot-reaches-the-retry-that-undoes-a-placement-nothing-answered.md`

One citation is cover no tier holds and no track owes. The last two give
`https_tls13_e1000e` as what reads `Refusal::BarReferenceEmpty`: its judge
asserted how many BARs the boot kept back, and that refusal's words. Outside
`kernel/` and `issues/` no file names the refusal, its words or the kept-BAR
record, and stage H of
`issues/build/the-guest-suite-runs-only-what-no-cheaper-tier-reaches.md` lists
that test for its fetch alone, on a line stage 3 of
`issues/design-debt/the-internet-clients-work-unchanged.md` deletes.

**Exit**: none of the three cites a test of either name that the tree lacks,
and `BarReferenceEmpty` has a reader that reds when the refusal goes, or one of
the three lists it as unread.

Owner: the orchestrator.
Loading