<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>News of modus</title>
<subtitle>What a person can now see or use in modus, newest first.</subtitle>
<id>https://github.com/sachahjkl/kernel/tree/master/news</id>
<updated>2026-11-12T00:00:00Z</updated>
<author><name>modus</name><uri>https://github.com/sachahjkl/kernel</uri></author>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html"/>
<link rel="self" type="application/atom+xml" href="https://modus.froment.software/news.xml"/>
<icon>https://modus.froment.software/pictures/heron_192.png</icon>
<entry>
<title>The zero of Paper Mono has a slash</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-12-slashed-zero.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-12-slashed-zero"/>
<published>2026-11-12T00:00:00Z</published>
<updated>2026-11-12T00:00:00Z</updated>
<category term="Decided"/>
<summary>The owner chose the slashed zero of Paper Mono.</summary>
<content type="html">&lt;p&gt;The owner chose the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-slashed-zero&quot;&gt;slashed zero&lt;/a&gt; of Paper Mono. The tool reads the form from the feature &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-table&quot;&gt;table&lt;/a&gt; of the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-font&quot;&gt;font&lt;/a&gt; file, so the form is the one that the font designer drew. A zero and a capital O are now different on every &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-text-grid&quot;&gt;text grid&lt;/a&gt; of the system. The system can also draw B612, a font with letters of different widths, from a cache that the tool builds ahead.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/font_vector.png&quot; width=&quot;1024&quot; height=&quot;768&quot; alt=&quot;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&quot;&gt;&lt;/p&gt;</content>
</entry>
<entry>
<title>A QUIC connection carries several streams</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-12-quic-streams.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-12-quic-streams"/>
<published>2026-11-12T00:00:00Z</published>
<updated>2026-11-12T00:00:00Z</updated>
<category term="Shown"/>
<summary>A QUIC connection of the system now carries several streams at one time.</summary>
<content type="html">&lt;p&gt;A QUIC &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-connection&quot;&gt;connection&lt;/a&gt; of the system now carries several streams at one time. The caller gives a table of &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-stream-record&quot;&gt;stream records&lt;/a&gt;, and each stream has its own &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-limit&quot;&gt;limit&lt;/a&gt; of &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-bytes&quot;&gt;bytes&lt;/a&gt;. The server keeps a table of 1024 addresses and gives each address a &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-budget&quot;&gt;budget&lt;/a&gt; of new connections. An independent read found that a reset stated a wrong count of bytes sent. This is corrected, with a test.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/quic_echo.png&quot; width=&quot;1024&quot; height=&quot;768&quot; alt=&quot;A QUIC connection carries several streams&quot;&gt;&lt;/p&gt;</content>
</entry>
<entry>
<title>A QUIC server answers on the network</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-12-quic-server.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-12-quic-server"/>
<published>2026-11-12T00:00:00Z</published>
<updated>2026-11-12T00:00:00Z</updated>
<category term="Shown"/>
<summary>The program quic_echo listens on the UDP port 4433 and writes back each stream that a client sends.</summary>
<content type="html">&lt;p&gt;The &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-program&quot;&gt;program&lt;/a&gt; &lt;a class=&quot;reference&quot; href=&quot;reference/modules/quic_echo.html&quot;&gt;&lt;code&gt;quic_echo&lt;/code&gt;&lt;/a&gt; listens on the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-udp-port&quot;&gt;UDP port&lt;/a&gt; 4433 and writes back each stream that a client sends. QUIC is a library in the program. &lt;a class=&quot;reference&quot; href=&quot;reference/modules/quic_echo.html&quot;&gt;&lt;code&gt;quic_echo&lt;/code&gt;&lt;/a&gt; makes its key at its start and shows its public key in its window: a client pins that key. &lt;code&gt;kerneltool test quic&lt;/code&gt; &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-run&quot;&gt;runs&lt;/a&gt; a client of the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-host&quot;&gt;host&lt;/a&gt; against it: 1 MiB each way, the same with loss, 8 clients, a wrong &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-pinned-key&quot;&gt;pinned key&lt;/a&gt; and a flood of 1000 forged packets. &lt;code&gt;kerneltool test quic-real&lt;/code&gt; runs the QUIC client of OpenSSL 3.6.5, &lt;code&gt;openssl s_client -quic&lt;/code&gt;, against &lt;a class=&quot;reference&quot; href=&quot;reference/modules/quic_echo.html&quot;&gt;&lt;code&gt;quic_echo&lt;/code&gt;&lt;/a&gt;, and &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-check&quot;&gt;checks&lt;/a&gt; the echo and the pinned key. In the machine tests of the step, the first test made 19 checks and the second 9.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/quic_echo.png&quot; width=&quot;1024&quot; height=&quot;768&quot; alt=&quot;A QUIC server answers on the network&quot;&gt;&lt;/p&gt;</content>
</entry>
<entry>
<title>The mark of the system is a heron</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-12-mark.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-12-mark"/>
<published>2026-11-12T00:00:00Z</published>
<updated>2026-11-12T00:00:00Z</updated>
<category term="Decided"/>
<summary>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.</summary>
<content type="html">&lt;p&gt;The system has a &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-mark&quot;&gt;mark&lt;/a&gt;: 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 &lt;a href=&quot;https://github.com/sachahjkl/kernel/blob/0524d2e664e353d847341727fda52ad5dc7b09fc/support/mark&quot;&gt;&lt;code&gt;support/mark&lt;/code&gt;&lt;/a&gt;, and &lt;code&gt;kerneltool logo&lt;/code&gt; writes its files in &lt;a href=&quot;https://github.com/sachahjkl/kernel/blob/0524d2e664e353d847341727fda52ad5dc7b09fc/resources/logo&quot;&gt;&lt;code&gt;resources/logo&lt;/code&gt;&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/modus.png&quot; width=&quot;1024&quot; height=&quot;1024&quot; alt=&quot;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&quot;&gt;&lt;/p&gt;</content>
</entry>
<entry>
<title>Windows name things in B612 and show values in Paper Mono</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-12-interface-two-fonts.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-12-interface-two-fonts"/>
<published>2026-11-12T00:00:00Z</published>
<updated>2026-11-12T00:00:00Z</updated>
<category term="Shown"/>
<summary>The elements of the interface now draw in two fonts.</summary>
<content type="html">&lt;p&gt;The &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-element&quot;&gt;elements&lt;/a&gt; of the interface now draw in two fonts. A text that names or explains is in B612: a &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-card&quot;&gt;card&lt;/a&gt; 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 &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-frame&quot;&gt;frame&lt;/a&gt; of the window of the elements: 264 us in one font, 328 us in two, at a host load above 10. The &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-bar&quot;&gt;bar&lt;/a&gt;, the menus and the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-title-bar&quot;&gt;title bars&lt;/a&gt; stay in Paper Mono for now.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/interface_elements.png&quot; width=&quot;1024&quot; height=&quot;768&quot; alt=&quot;The interface package: each element live, the draw table of the last frame, the damage by difference&quot;&gt;&lt;/p&gt;</content>
</entry>
<entry>
<title>The heron is in the bar and on the boot display</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-12-heron-in-the-bar.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-12-heron-in-the-bar"/>
<published>2026-11-12T00:00:00Z</published>
<updated>2026-11-12T00:00:00Z</updated>
<category term="Shown"/>
<summary>The mark of the system is a heron of square pixels.</summary>
<content type="html">&lt;p&gt;The mark of the system is a heron of square pixels. The bar of the desktop now shows it at its left end. The &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-boot-display&quot;&gt;boot display&lt;/a&gt; shows it in its head, beside the name. The &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-picture&quot;&gt;picture&lt;/a&gt; is drawn from one table of 24 by 24 cells, the same table that &lt;code&gt;kerneltool logo&lt;/code&gt; reads.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/desktop.png&quot; width=&quot;1024&quot; height=&quot;768&quot; alt=&quot;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&quot;&gt;&lt;/p&gt;</content>
</entry>
<entry>
<title>Programs can use AVX, and a kernel entry is faster</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-12-extended-state.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-12-extended-state"/>
<published>2026-11-12T00:00:00Z</published>
<updated>2026-11-12T00:00:00Z</updated>
<category term="Measured"/>
<summary>The kernel now saves the vector registers of a program with xsave, so a program can use AVX.</summary>
<content type="html">&lt;p&gt;The &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-kernel&quot;&gt;kernel&lt;/a&gt; now saves the vector registers of a program with &lt;code&gt;xsave&lt;/code&gt;, so a program can use AVX. The kernel saves and &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-restore&quot;&gt;restores&lt;/a&gt; them only when a &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-processor&quot;&gt;processor&lt;/a&gt; changes &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-thread&quot;&gt;thread&lt;/a&gt;. 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.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/extended_state.png&quot; width=&quot;1024&quot; height=&quot;768&quot; alt=&quot;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&quot;&gt;&lt;/p&gt;</content>
</entry>
<entry>
<title>The text of the system is a vector font</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-11-vector-font.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-11-vector-font"/>
<published>2026-11-11T00:00:00Z</published>
<updated>2026-11-11T00:00:00Z</updated>
<category term="Shown"/>
<summary>Every window, the console, the terminal and the boot display draw their text with a vector font, with subpixel bands, blended in linear light.</summary>
<content type="html">&lt;p&gt;Every window, the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-console&quot;&gt;console&lt;/a&gt;, the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-terminal&quot;&gt;terminal&lt;/a&gt; and the boot display draw their text with a vector font, with &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-subpixel-band&quot;&gt;subpixel bands&lt;/a&gt;, 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 &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-glyph-cache&quot;&gt;glyph cache&lt;/a&gt; of 390 624 bytes in the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-boot-image&quot;&gt;boot image&lt;/a&gt;. One &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-glyph&quot;&gt;glyph&lt;/a&gt; from the cache takes 309 ns, against 35 ns for Spleen 8x16, in the machine of the test. The program &lt;a class=&quot;reference&quot; href=&quot;reference/modules/settings.html&quot;&gt;&lt;code&gt;settings&lt;/code&gt;&lt;/a&gt; changes the font to Spleen 8x16 and back while every program runs. The picture compares six candidate fonts.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/font_candidates.png&quot; width=&quot;1024&quot; height=&quot;768&quot; alt=&quot;Six candidate fonts beside Spleen 8x16, each from a glyph cache in fixed point, and a word of each enlarged&quot;&gt;&lt;/p&gt;</content>
</entry>
<entry>
<title>Every program gets versions of its data</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-11-storage-versions.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-11-storage-versions"/>
<published>2026-11-11T00:00:00Z</published>
<updated>2026-11-11T00:00:00Z</updated>
<category term="Shown"/>
<summary>The storage service keeps the state of an object before each change, with no save action and no code in the program.</summary>
<content type="html">&lt;p&gt;The &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-storage-service&quot;&gt;storage service&lt;/a&gt; keeps the state of an &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-object&quot;&gt;object&lt;/a&gt; before each change, with no save action and no code in the program. In &lt;a class=&quot;reference&quot; href=&quot;reference/modules/notes.html&quot;&gt;&lt;code&gt;notes&lt;/code&gt;&lt;/a&gt;, Up and Down step through the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-version&quot;&gt;versions&lt;/a&gt; of the note, with the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-date&quot;&gt;date&lt;/a&gt; of each, and Enter restores the version shown. The note before a restore stays a version. From the console or from the host, a &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-person&quot;&gt;person&lt;/a&gt; lists the versions of an object, reads one, compares two and restores one. In the main machine test, one &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-commit&quot;&gt;commit&lt;/a&gt; of the note took 3778 us in the mean of 8. When a store reaches its limit of &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-block&quot;&gt;blocks&lt;/a&gt;, the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-service&quot;&gt;service&lt;/a&gt; removes the oldest versions first.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/notes_versions.png&quot; width=&quot;1024&quot; height=&quot;768&quot; alt=&quot;Every program gets versions of its data&quot;&gt;&lt;/p&gt;</content>
</entry>
<entry>
<title>The settings are kept across a stop</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-11-settings-kept.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-11-settings-kept"/>
<published>2026-11-11T00:00:00Z</published>
<updated>2026-11-11T00:00:00Z</updated>
<category term="Shown"/>
<summary>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.</summary>
<content type="html">&lt;p&gt;The font, the order of the color stripes, the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-pointer-theme&quot;&gt;pointer theme&lt;/a&gt; and the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-grid-fit&quot;&gt;grid fit&lt;/a&gt; of the text are kept in the store of the program &lt;a class=&quot;reference&quot; href=&quot;reference/modules/settings.html&quot;&gt;&lt;code&gt;settings&lt;/code&gt;&lt;/a&gt;. They come back at the next boot. A loss of power during a change gives the old &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-setting&quot;&gt;settings&lt;/a&gt; or the new ones, never a mix. The settings are one &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-record&quot;&gt;record&lt;/a&gt; of 48 bytes, and a change writes the record in one commit before it changes the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-settings-page&quot;&gt;settings page&lt;/a&gt;. Before this &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-release&quot;&gt;release&lt;/a&gt;, a stop of the machine lost the settings.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/settings_kept.png&quot; width=&quot;1024&quot; height=&quot;768&quot; alt=&quot;The settings are kept across a stop&quot;&gt;&lt;/p&gt;</content>
</entry>
<entry>
<title>The same source gives the same bytes on all threads of the compiler</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-11-same-bytes.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-11-same-bytes"/>
<published>2026-11-11T00:00:00Z</published>
<updated>2026-11-11T00:00:00Z</updated>
<category term="Measured"/>
<summary>The hash of a module is its identity, so one source must give one module.</summary>
<content type="html">&lt;p&gt;The hash of a &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-module&quot;&gt;module&lt;/a&gt; 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. &lt;code&gt;kerneltool repeat all 20&lt;/code&gt; 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 &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-boot-program&quot;&gt;boot program&lt;/a&gt; gave one file. Each &lt;code&gt;kerneltool check&lt;/code&gt; builds everything two times and compares the bytes.&lt;/p&gt;
</content>
</entry>
<entry>
<title>Paper Mono is the font of the system</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-11-paper-mono.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-11-paper-mono"/>
<published>2026-11-11T00:00:00Z</published>
<updated>2026-11-11T00:00:00Z</updated>
<category term="Decided"/>
<summary>The owner chose Paper Mono as the monospace font of the system.</summary>
<content type="html">&lt;p&gt;The owner chose Paper Mono as the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-monospace-font&quot;&gt;monospace font&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/font_vector.png&quot; width=&quot;1024&quot; height=&quot;768&quot; alt=&quot;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&quot;&gt;&lt;/p&gt;</content>
</entry>
<entry>
<title>An HTTP server in the system answers the host</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-11-http-server.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-11-http-server"/>
<published>2026-11-11T00:00:00Z</published>
<updated>2026-11-11T00:00:00Z</updated>
<category term="Shown"/>
<summary>The program server is an HTTP/1.1 server.</summary>
<content type="html">&lt;p&gt;The program &lt;a class=&quot;reference&quot; href=&quot;reference/modules/server.html&quot;&gt;&lt;code&gt;server&lt;/code&gt;&lt;/a&gt; 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 &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-request&quot;&gt;requests&lt;/a&gt; in order, and answers &lt;code&gt;HEAD&lt;/code&gt;. Its pages are in its &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-private-store&quot;&gt;private store&lt;/a&gt;, and &lt;code&gt;server.put&lt;/code&gt; and &lt;code&gt;server.remove&lt;/code&gt; 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, &lt;a class=&quot;reference&quot; href=&quot;reference/modules/server.html&quot;&gt;&lt;code&gt;server&lt;/code&gt;&lt;/a&gt; answered 239 to 250 requests in one second, and &lt;code&gt;GET /hello&lt;/code&gt; from the program &lt;a class=&quot;reference&quot; href=&quot;reference/modules/fetch.html&quot;&gt;&lt;code&gt;fetch&lt;/code&gt;&lt;/a&gt; took 2.7 ms.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/server_real.png&quot; width=&quot;1024&quot; height=&quot;768&quot; alt=&quot;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&quot;&gt;&lt;/p&gt;</content>
</entry>
<entry>
<title>A failed call names each thing that went wrong</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-11-error-details.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-11-error-details"/>
<published>2026-11-11T00:00:00Z</published>
<updated>2026-11-11T00:00:00Z</updated>
<category term="Shown"/>
<summary>An export can now give each thing that went wrong in a call, not only the first.</summary>
<content type="html">&lt;p&gt;An &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-export&quot;&gt;export&lt;/a&gt; can now give each thing that went wrong in a call, not only the first. The caller gives an optional table of &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-error-record&quot;&gt;error records&lt;/a&gt;, and the export writes one record for each fault. A caller with no table gets the one error record of before. &lt;code&gt;monitor.counts_named&lt;/code&gt; names each row of its argument that names no count. The console and &lt;code&gt;kerneltool call&lt;/code&gt; print each detail on its own line after the error. In the check of the step, a call from the host printed &amp;quot;detail 2 of 2: monitor.counts_named: row 3 of the argument names names nothing that exists&amp;quot;. The cost for a caller is not measured.&lt;/p&gt;
</content>
</entry>
<entry>
<title>A module of cryptography for every program</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-11-cryptography-module.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-11-cryptography-module"/>
<published>2026-11-11T00:00:00Z</published>
<updated>2026-11-11T00:00:00Z</updated>
<category term="Shown"/>
<summary>The module cryptography gives ChaCha20-Poly1305, AES-128-GCM, SHA-256, HMAC, HKDF, X25519 and Ed25519 to each program.</summary>
<content type="html">&lt;p&gt;The module &lt;a class=&quot;reference&quot; href=&quot;reference/modules/cryptography.html&quot;&gt;&lt;code&gt;cryptography&lt;/code&gt;&lt;/a&gt; gives ChaCha20-Poly1305, AES-128-GCM, SHA-256, HMAC, HKDF, X25519 and Ed25519 to each program. Its code is taken from &lt;code&gt;core:crypto&lt;/code&gt; of Odin, and &lt;code&gt;kerneltool cryptography-origin&lt;/code&gt; proves that each taken file is its &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-origin&quot;&gt;origin&lt;/a&gt; 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 &lt;a class=&quot;reference&quot; href=&quot;reference/modules/cryptography_vectors.html&quot;&gt;&lt;code&gt;cryptography_vectors&lt;/code&gt;&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/cryptography_vectors.png&quot; width=&quot;1024&quot; height=&quot;768&quot; alt=&quot;A module of cryptography for every program&quot;&gt;&lt;/p&gt;</content>
</entry>
<entry>
<title>The console completes names with a fuzzy match</title>
<id>https://github.com/sachahjkl/kernel/blob/master/news/2026-11-11-console-completion.md</id>
<link rel="alternate" type="text/html" href="https://modus.froment.software/news.html#news-2026-11-11-console-completion"/>
<published>2026-11-11T00:00:00Z</published>
<updated>2026-11-11T00:00:00Z</updated>
<category term="Shown"/>
<summary>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.</summary>
<content type="html">&lt;p&gt;While a person types in the console, a list under the line shows the names that match: the &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-command&quot;&gt;commands&lt;/a&gt;, the exports, the services, the variables and the modules. The match is fuzzy: the typed characters appear in the name in their order, so &lt;code&gt;mcnt&lt;/code&gt; finds &lt;code&gt;monitor.count&lt;/code&gt;. The list lights the matched characters and gives the signature of each name at its &lt;a class=&quot;term&quot; href=&quot;reference/glossary.html#term-right&quot;&gt;right&lt;/a&gt;. 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.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://modus.froment.software/pictures/console_completion.png&quot; width=&quot;1024&quot; height=&quot;768&quot; alt=&quot;The completion list of the console: &amp;quot;mcnt&amp;quot; matches monitor.count by a fuzzy match, the matched letters lit, each name with what it is and its signature&quot;&gt;&lt;/p&gt;</content>
</entry>
</feed>
