modus

News

What a person can now see or use in modus, newest first: 16 entries. Each entry is one file of news/, written in the step that made the thing, and never moved or merged. The technical list of the changes of each release is on the page Releases. The same entries as a feed: news.xml (Atom).

The kinds: Shown a person can now see or use a new thing; Measured a number about a thing that exists, with its conditions; Decided the owner chose a thing that a person sees; Fixed a thing that a person saw fail now works.

The zero of Paper Mono has a slash

Decided - release 0.79.0 - the guide The text of the system: a vector font with subpixel bands

The owner chose the slashed zero of Paper Mono. The tool reads the form from the feature table of the font file, so the form is the one that the font designer drew. A zero and a capital O are now different on every text grid of the system. The system can also draw B612, a font with letters of different widths, from a cache that the tool builds ahead.

The text of the system is a vector font with subpixel bands (Paper Mono by default); the program settings changes it to Spleen 8x16 and back while every window runs

From news/2026-11-12-slashed-zero.md.

A QUIC connection carries several streams

Shown - release 0.80.0 - the guide QUIC

A QUIC connection of the system now carries several streams at one time. The caller gives a table of stream records, and each stream has its own limit of bytes. The server keeps a table of 1024 addresses and gives each address a budget of new connections. An independent read found that a reset stated a wrong count of bytes sent. This is corrected, with a test.

A QUIC connection carries several streams

From news/2026-11-12-quic-streams.md.

A QUIC server answers on the network

Shown - release 0.76.0 - the guide QUIC

The program quic_echo listens on the UDP port 4433 and writes back each stream that a client sends. QUIC is a library in the program. quic_echo makes its key at its start and shows its public key in its window: a client pins that key. kerneltool test quic runs a client of the host against it: 1 MiB each way, the same with loss, 8 clients, a wrong pinned key and a flood of 1000 forged packets. kerneltool test quic-real runs the QUIC client of OpenSSL 3.6.5, openssl s_client -quic, against quic_echo, and checks the echo and the pinned key. In the machine tests of the step, the first test made 19 checks and the second 9.

A QUIC server answers on the network

From news/2026-11-12-quic-server.md.

The mark of the system is a heron

Decided - release 0.75.0 - the guide The design rules

The system has a mark: a heron of square cells on a grid of 24 by 24, each part filled with one gradient, and the name modus under it. The owner chose it after six rounds of proposals that the owner refused. The mark is data in support/mark, and kerneltool logo writes its files in resources/logo, on a dark and on a light background. The file of the mark at 1024 by 1024 pixels has 16 KiB with its compression, in place of 3 MiB with none.

The mark of modus: a heron of square pixels that stands on one leg in water, a blue body, a pale neck, an orange beak and a violet crest and tail, above the name modus in square letters

From news/2026-11-12-mark.md.

Windows name things in B612 and show values in Paper Mono

Shown - release 0.82.0 - the guide The design rules

The elements of the interface now draw in two fonts. A text that names or explains is in B612: a card title, a label, a button, a line of a list. A value is in Paper Mono: a number, a typed text, a cell of a table. Each window that uses the interface library takes the rule with no change of its code. Measured in the machine, one whole frame of the window of the elements: 264 us in one font, 328 us in two, at a host load above 10. The bar, the menus and the title bars stay in Paper Mono for now.

The interface package: each element live, the draw table of the last frame, the damage by difference

From news/2026-11-12-interface-two-fonts.md.

The heron is in the bar and on the boot display

Shown - release 0.77.0 - the guide The design rules

The mark of the system is a heron of square pixels. The bar of the desktop now shows it at its left end. The boot display shows it in its head, beside the name. The picture is drawn from one table of 24 by 24 cells, the same table that kerneltool logo reads.

The desktop: console, life, monitor and plasma. The title bar of the window in front goes from blue to a darker blue; the others are quiet

From news/2026-11-12-heron-in-the-bar.md.

Programs can use AVX, and a kernel entry is faster

Measured - release 0.81.0 - the guide Architecture

The kernel now saves the vector registers of a program with xsave, so a program can use AVX. The kernel saves and restores them only when a processor changes thread. The kernel itself holds no vector instruction, and the build disassembles the kernel to prove it. Measured under QEMU with KVM on a Ryzen 7 5800X, one thread that enters the kernel in a loop, two runs: 8 063 360 and 8 359 466 entries in one second. The step before made 5 669 546 and 5 613 013. AVX-512 is not tested: the host has none.

The extended state of each thread: more threads than processors hold every ymm or zmm register, the x87 stack and MXCSR across kernel entries, one square for each register; and the cost of one empty kernel entry with xmm, ymm and zmm in use

From news/2026-11-12-extended-state.md.

The text of the system is a vector font

Shown - release 0.58.0 - the guide The text of the system: a vector font with subpixel bands

Every window, the console, the terminal and the boot display draw their text with a vector font, with subpixel bands, blended in linear light. The first font was JetBrains Mono. The font is monospace on the grid of 8 by 16 pixels, so no window changes its size. The build draws each character 32 to 126 at three scales into one glyph cache of 390 624 bytes in the boot image. One glyph from the cache takes 309 ns, against 35 ns for Spleen 8x16, in the machine of the test. The program settings changes the font to Spleen 8x16 and back while every program runs. The picture compares six candidate fonts.

Six candidate fonts beside Spleen 8x16, each from a glyph cache in fixed point, and a word of each enlarged

From news/2026-11-11-vector-font.md.

Every program gets versions of its data

Shown - release 0.67.0 - the guide Architecture

The storage service keeps the state of an object before each change, with no save action and no code in the program. In notes, Up and Down step through the versions of the note, with the date of each, and Enter restores the version shown. The note before a restore stays a version. From the console or from the host, a person lists the versions of an object, reads one, compares two and restores one. In the main machine test, one commit of the note took 3778 us in the mean of 8. When a store reaches its limit of blocks, the service removes the oldest versions first.

Every program gets versions of its data

From news/2026-11-11-storage-versions.md.

The settings are kept across a stop

Shown - release 0.74.0 - the guide The text of the system: a vector font with subpixel bands

The font, the order of the color stripes, the pointer theme and the grid fit of the text are kept in the store of the program settings. They come back at the next boot. A loss of power during a change gives the old settings or the new ones, never a mix. The settings are one record of 48 bytes, and a change writes the record in one commit before it changes the settings page. Before this release, a stop of the machine lost the settings.

The settings are kept across a stop

From news/2026-11-11-settings-kept.md.

The same source gives the same bytes on all threads of the compiler

Measured - release 0.64.0 - the guide One source, one module: the build and the threads of the compiler

The hash of a module is its identity, so one source must give one module. In the release 0.59.0, the threads of the compiler changed the order of the declarations, and a module could differ from one build to the next; a patch of the compiler corrected it. With the release dev-2026-11a of Odin, the compiler runs on all its threads with no patch. kerneltool repeat all 20 built each module 20 times, with one compiler thread for each of the 16 processors of the host, at a host load of 24 to 42. Each of the 64 modules gave one module, one LLVM IR file and one object, and the boot program gave one file. Each kerneltool check builds everything two times and compares the bytes.

From news/2026-11-11-same-bytes.md.

Paper Mono is the font of the system

Decided - release 0.74.0 - the guide The text of the system: a vector font with subpixel bands

The owner chose Paper Mono as the monospace font of the system. The console, the terminal and every window now draw their text in Paper Mono, in place of JetBrains Mono. The grid stays 8 by 16 pixels. The titles of the cards are in Paper Mono SemiBold. Paper Mono is under the SIL OFL 1.1. In the same release, a glyph of the vector font over a plain background takes 109 ns in place of 181 ns on the host, the least of many runs, with the same pixels.

The text of the system is a vector font with subpixel bands (Paper Mono by default); the program settings changes it to Spleen 8x16 and back while every window runs

From news/2026-11-11-paper-mono.md.

An HTTP server in the system answers the host

Shown - release 0.52.0 - the guide The network: TCP as a library in the program

The program server is an HTTP/1.1 server. Its TCP is a library in the program, since the release 0.48.0. It keeps connections open, answers pipelined requests in order, and answers HEAD. Its pages are in its private store, and server.put and server.remove change them from the console. The machine test fetches its pages with the TCP of the host, through QEMU user networking, a stack that this project did not write. In the machine test of the release, with a new connection for each request, server answered 239 to 250 requests in one second, and GET /hello from the program fetch took 2.7 ms.

A simple HTTP/1.1 server: keep-alive, pipelining, HEAD and each refusal status, the pages of its private store that the console puts with server.put; the connections and the last requests, live

From news/2026-11-11-http-server.md.

A failed call names each thing that went wrong

Shown - release 0.71.0 - the guide Module contract

An export can now give each thing that went wrong in a call, not only the first. The caller gives an optional table of error records, and the export writes one record for each fault. A caller with no table gets the one error record of before. monitor.counts_named names each row of its argument that names no count. The console and kerneltool call print each detail on its own line after the error. In the check of the step, a call from the host printed "detail 2 of 2: monitor.counts_named: row 3 of the argument names names nothing that exists". The cost for a caller is not measured.

From news/2026-11-11-error-details.md.

A module of cryptography for every program

Shown - release 0.70.0 - the guide Cryptography

The module cryptography gives ChaCha20-Poly1305, AES-128-GCM, SHA-256, HMAC, HKDF, X25519 and Ed25519 to each program. Its code is taken from core:crypto of Odin, and kerneltool cryptography-origin proves that each taken file is its origin with the listed changes only. A tag or a signature that does not verify is an error, and the caller gets no byte of the text. On the machine, the program cryptography_vectors runs the vectors of the standards through the module: 7 of 7 pass. The seal of 1200 bytes with ChaCha20-Poly1305 takes 2.4 us, about 490 MB/s, in the mean of 100 calls at a host load of about 20.

A module of cryptography for every program

From news/2026-11-11-cryptography-module.md.

The console completes names with a fuzzy match

Shown - release 0.73.0 - the guide The line of the console

While a person types in the console, a list under the line shows the names that match: the commands, the exports, the services, the variables and the modules. The match is fuzzy: the typed characters appear in the name in their order, so mcnt finds monitor.count. The list lights the matched characters and gives the signature of each name at its right. Tab or Enter takes a name. The history of the console keeps 256 lines, and Control-R searches them with the same match. One key reads at most 4096 names, with at most 320 steps for each name. The time of one key is not measured in this release.

The completion list of the console: "mcnt" matches monitor.count by a fuzzy match, the matched letters lit, each name with what it is and its signature

From news/2026-11-11-console-completion.md.