Modules
The 77 modules that the tool builds, 74 of them in the boot image. A program is a module whose source is in programs/; the others are modules that a program loads or calls. The purpose of each is the first sentence of the comment before package in its source.
| Module | Kind | Boot image | Exports | Imports | Purpose |
|---|---|---|---|---|---|
test_callee | module | no | 1 | A test module with one export | |
test_caller | module | no | 1 | test_callee | A test module that imports test_callee and has the entry |
kernel | module | no | 1 | The kernel (docs/ARCHITECTURE.md, systems K1 to K5) | |
root | program | yes | 1 | The root service: the first program (docs/ARCHITECTURE.md, U2) | |
input | program | yes | 1 | The input service: the device service of the PS/2 keyboard and mouse (docs/ARCHITECTURE.md, U4) | |
compositor | program | yes | 3 | The compositor (docs/ARCHITECTURE.md, U8): the service that owns the display | |
console | program | yes | 1 | The console (property 19): a program that has a terminal | |
monitor | program | yes | 6 | A system tool: the memory of the machine and the programs that run, as a picture that changes twice per second | |
plasma | program | yes | 1 | A demonstration: an animation that the processor computes for each frame | |
life | program | yes | 4 | A demonstration: Conway's Game of Life | |
paint | program | yes | 5 | A demonstration: drawing with the pointer | |
fault | program | yes | 1 | A program that writes to an address that it does not have | |
temple | program | yes | 1 | A demonstration, for fun: the temple of Jon | |
node | program | yes | 1 | One node of the `rings` demonstration (package relay) | |
rings | program | yes | 1 | A demonstration of communication between programs (properties 2, 4, 6) | |
threads | program | yes | 1 | A demonstration of threads (docs/ARCHITECTURE.md, decision 6) | |
workers | program | yes | 1 | A demonstration of the lock and of the word wait | |
rights | program | yes | 1 | A demonstration of rights on handles (properties 2 and 20) | |
origin | program | yes | 1 | A demonstration of the origin of a handle and of Handle_Revoke (properties 2 and 13) | |
limits | program | yes | 1 | A demonstration of the limits of a budget: processor time and log records (property 20) | |
budget | program | yes | 1 | A demonstration of budgets (properties 2 and 20) | |
flow | program | yes | 1 | A measure of one ring (properties 4 and 6) | |
crowd | program | yes | 1 | A measure of the shared queue and of the event | |
tally | program | yes | 6 | A count that its callers add to | |
manual | program | yes | 17 | The manual: it shows the documentation of each module of the boot image | |
clock | program | yes | 1 | A measure of the time page | |
randomness | program | yes | 1 | The randomness of the system, shown (docs/RANDOMNESS.md) | |
extended_state | program | yes | 1 | The extended state of each thread, kept by the kernel (docs/ARCHITECTURE.md, "The extended state of the processor") | |
terminal | program | yes | 1 | The terminal: it shows the text that a program gives as records, and it gives the keys of the person to that program (support/terminal) | |
flood | program | yes | 1 | A program that writes lines to its terminal as fast as it can | |
processors | program | yes | 1 | A demonstration of several processors | |
boot | program | yes | 1 | A system tool: how the machine started, at any time | |
pages | program | yes | 1 | A system tool: what the page tables give, as the kernel reads it from the tables themselves | |
frames | program | yes | 1 | A demonstration of paging as a tool of the system (paging, second part) | |
twin | program | yes | 1 | A program that the program `frames` starts several times, to show the shared code of a module and a page that two programs share (package support:twins) | |
locks | program | yes | 1 | The measures of the locks of the kernel | |
shortage | program | yes | 1 | The real shortage of page frames (docs/ARCHITECTURE.md, "The frame caches") | |
scheduler | program | yes | 1 | The scheduling strategies of the kernel, measured side by side (docs/SCHEDULING.md) | |
address_space | program | yes | 1 | A program drives its own virtual memory (docs/ARCHITECTURE.md, "The virtual memory of a program") | |
locker | program | yes | 1 | A program that the program `locks` starts several times, to load the kernel from several programs at one time (package support:lockers) | |
log | program | yes | 2 | A system tool: the log of the machine, as records | |
block | program | yes | 1 | The block service: the device service of one virtio block device (virtio 1.x over PCI, the "modern" interface) | |
frame | program | yes | 1 | The frame service: the device service of one virtio network device (virtio 1.x over PCI, the "modern" interface) | |
network | program | yes | 1 | The network service: the one client of the frame service of the network device, and the service that gives each program with the grant one endpoint of datagrams (contract/datagram) | |
net | program | yes | 1 | The first layer of the network, shown case by case: the link and the address, an ARP answer of the gateway, an echo of the gateway, a UDP datagram to an echo server and its answer, the refusals of the grant, the frames from the wire that the network service refused, and the measures | |
remote | program | yes | 1 | The remote service: the calls of the host (docs/MODULE_CONTRACT.md, section 4, "A call from the host") | |
server | program | yes | 5 | A simple HTTP/1.1 server of this system (RFC 9110, RFC 9112): TCP in the program (support/tcp), one thread, one table of connections, and records of fixed size for all its state | |
fetch | program | yes | 1 | A web client of this system: TCP in the program (support/tcp) over a segment endpoint with a client grant | |
inspect | program | yes | 4 | A developer tool: the memory and the execution of one program, live (docs/TOOLS.md) | |
disk | program | yes | 1 | A measure of the block service (contract/block), on a disk of its own: the disk of the measures, that holds no data of a program | |
storage | program | yes | 12 | The storage service: it keeps the private store of each program on the data disk, through a block service | |
notes | program | yes | 1 | A program that keeps its state when it stops and when the machine stops: a note and a count, in its private store | |
host | program | yes | 1 | The call host: a program that loads one module and executes the isolated calls of its exports (property 19, package isolated) | |
probe | module | yes | 8 | A module of commands that tests the sandbox of an isolated call (property 19) | |
math | module | yes | 8 | A module of commands (property 19) | |
cryptography | module | yes | 14 | The cryptography of the system as one module of code: each export is a primitive of Odin's core:crypto that the system took (support/cryptography, docs/CRYPTOGRAPHY.md), in the forms of the system | |
cryptography_vectors | program | yes | 1 | cryptography | The module `cryptography` as it ships, at work (docs/CRYPTOGRAPHY.md) |
quic_echo | program | yes | 1 | cryptography | A QUIC echo server (docs/QUIC.md, section 6): QUIC in the program (support/quic), over a datagram endpoint with a listen grant of UDP |
sample | module | yes | 14 | A module of commands that take a record, a handle or a table (property 19) | |
hostile_exports | module | yes | 5 | Exports that are wrong on purpose, for the tests of the callers (docs/MODULE_CONTRACT.md, "Tables and bytes as parameters") | |
calendar | module | yes | 1 | The days of the months of the Gregorian calendar | |
calendar_fixed | module | yes | 1 | The days of the months of the Gregorian calendar, with the correction of the module calendar | |
calendar_changed | module | yes | 1 | The days of the months of a calendar that a parameter chooses | |
agenda | module | yes | 4 | calendar | A module of commands that imports the module calendar |
lonely | module | yes | 1 | test_callee | A module of commands whose import is not in the boot image |
imports | program | yes | 1 | calendar | A demonstration of the loader: a module with imports, and the replacement of an import (docs/MODULE_CONTRACT.md, "Replacement of an import") |
errors | program | yes | 1 | A program that shows the errors of the system: one case for each kind of error | |
interface_elements | program | yes | 1 | The elements of the interface package, live (docs/INTERFACE.md) | |
tables | program | yes | 1 | Tables and bytes as parameters (docs/MODULE_CONTRACT.md, "Tables and bytes as parameters"): one description, three ways to call | |
interface_module | module | yes | 8 | The interface package as a module (docs/INTERFACE.md, section 7; the test of the claim "the functions are written so the package can become a module later with the same calls") | |
interface_through_module | program | yes | 1 | interface_module | The interface package as a module, for one program (docs/INTERFACE.md, section 7) |
text_shaping | module | yes | 2 | Text shaping as a module (docs/FONTS.md, section 12.3): each export calls one function of support/text_shaping over tables in memory of the caller | |
vector_glyphs | program | yes | 1 | The choice of the vector font (docs/FONTS.md, "The font file"): the same lines of the system in each candidate font and in Spleen 8x16, one word of each enlarged, and the measures of the text path | |
interface_font | program | yes | 1 | The interface font (docs/FONTS.md, section 12): B612 Regular and Bold, placed by support/text_shaping and drawn by graphics.text_proportional | |
pointers | program | yes | 1 | The pointer themes of the boot image (docs/POINTERS.md), as a table that a person reads: each pointer shape of a theme at each of its sizes, its hot spot marked, its frames, and the theme with its license and its attribution | |
settings | program | yes | 4 | The settings of the person (docs/FONTS.md, "The setting"): the font of the system, the order of the color stripes of the screen, the pointer theme and the grid fit of the vector font | |
date | program | yes | 2 | The date of the machine: this service reads the real-time clock of the machine (the CMOS clock, ports 0x70 and 0x71) at its start and each 10 seconds, and writes in the date page the date of the time 0 of the system |
Read from module_builds in tools/kerneltool/modules.odin and from the source folder of each module.
