- conforms_to::[[Observation Form Contract]]
- has_epistemic_status::[[Retrospective Observation]]
- in_practice_domain::[[eOS Continuum]]
- authored_by::[[Christopher Allen]]
- has_lifecycle::[[Seed Stage]]↗
- has_curation::[[Working Draft]]↗
ChatTheatre Kernellib Carries Object Registry and Granular Resource Tracking Absent From Cloud-Server Kernel
Claim
ChatTheatre/kernellib at HEAD d86b427 (2020-09-24) implements an object registry daemon (objregd) and tracks callouts, events, editors, tick usage, and create-time resources as named resource categories. dworkin/cloud-server's src/kernel/ at HEAD 9994bc3 (2026-03-14) implements neither: there is no objregd daemon, and the resource map carries only objects, stack, ticks, and fileblocks. Both trees share daemon names (accessd, rsrcd, userd, driver) and the binary KERNEL() / SYSTEM() privilege macros, but they diverge sharply on multi-agent state coordination and resource granularity.
Grounds
This is a Retrospective Observation. The grounds are direct reading of the source trees at fixed worktree HEADs; the limits are that the snapshots cannot reconstruct the development history that produced the divergence -- in particular, whether kernellib added the missing features after forking from dworkin/kernellib (in 2016, per kernellib's README) or whether cloud-server stripped features the shared ancestor carried. Both directions of historical reading are consistent with the snapshots; the snapshots themselves cannot adjudicate between them.
What the worktrees show, file by file:
-
Object registry, present in kernellib, absent in cloud-server:
- ChatTheatre/kernellib
src/kernel/sys/objregd.c-- the daemon. - ChatTheatre/kernellib
src/kernel/lib/api/objreg.c-- the API wrapper exposingfirst_link(),next_link(),prev_link()for traversing the per-owner doubly-linked list of objects. - ChatTheatre/kernellib
src/kernel/include/kernel/objreg.h-- the header. - cloud-server's
src/kernel/sys/,src/kernel/lib/api/, andsrc/include/kernel/carry no equivalent. No file matchingobjreg*exists under cloud-server's kernel tree.
- ChatTheatre/kernellib
-
Resource map, kernellib
src/kernel/sys/rsrcd.c:
c
resources = ([
"callouts" : ({ -1, 0, 0 }),
"objects" : ({ -1, 0, 0 }),
"events" : ({ -1, 0, 0 }),
"stack" : ({ -1, 0, 0 }),
"ticks" : ({ -1, 10, 3600 }),
"tick usage" : ({ -1, 10, 3600 }),
"filequota" : ({ -1, 0, 0 }),
"editors" : ({ -1, 0, 0 }),
"create stack" : ({ -1, 0, 0 }),
"create ticks" : ({ -1, 0, 0 }),
]);
- Resource map, cloud-server
src/kernel/sys/rsrcd.c:
c
resources = ([
"objects" : ({ -1, 0, 0 }),
"stack" : ({ -1, 0, 0 }),
"ticks" : ({ -1, 10, 3600 }),
"fileblocks" : ({ -1, 0, 0 }),
]);
-
TLS API surface: kernellib exposes
set_tls_size(),query_tls_size(),set_tlvar(),get_tlvar()viasrc/kernel/lib/api/tls.candsrc/kernel/include/kernel/tls.h. Cloud-server's TLS lives in driver-internal macros (TLSVAR()and named slot indices likeTLS_PUT_ATOMIC,TLS_GET_ATOMIC) declared insrc/include/kernel/kernel.h; the API surface is narrower and atomicity-focused. -
License declarations: kernellib
LICENSEdeclares CC0 1.0 Universal (public domain). cloud-serverLICENSEdeclares the Unlicense. Both trees are public domain; the classification is verified directly against the LICENSE files at the cited HEADs. -
Lineage: kernellib's
README.mdrecords the fork fromdworkin/kernellibat commite602afe(2016-03-05), with the 2016 release note quoted: "The kernellib is and has always been in the public domain (even though it was distributed with DGD)." Cloud-server has no analogous lineage record at root level; its kernel subtree is part of the larger application repository. -
Native protocol support: kernellib carries connection-object handlers for three transport protocols, each as an
obj/<protocol>.cclone inheritingLIB_CONN(src/kernel/lib/connection.c), with corresponding registration hooks onuserd:
| Protocol | Kernellib coverage | Default port (kernel.dgd) |
Source |
|---|---|---|---|
| Telnet | Full -- connection lifecycle, login flow, manager registration | telnet_port = 6047 |
src/kernel/obj/telnet.c, userd::set_telnet_manager(port, obj) |
| Binary | Full -- connection lifecycle plus admin-backdoor login on first binary port | binary_port = 6048 |
src/kernel/obj/binary.c, userd::set_binary_manager(port, obj) |
| Datagram | Full at the connection-object level; not bound in the default config (applications register a port and manager at runtime) | (none) | src/kernel/obj/datagram.c, userd::set_datagram_manager(port, obj) |
| HTTP / HTTPS | Not in kernellib. Cloud-server carries src/usr/HTTP/ at its application layer; kernellib's kernel surface has no equivalent |
-- | -- |
| WebSocket | Not in kernellib. No native handler at any layer | -- | -- |
| SSH | Not in kernellib. No native handler at any layer | -- | -- |
| TLS / SSL (transport-layer security) | Not in kernellib. Note the name collision: kernellib's lib/api/tls.c and include/kernel/tls.h are Task-Local Storage, exposing set_tlvar() / get_tlvar() for transactional context; they are not transport-layer security and do not provide cipher / certificate / handshake handling |
-- | src/kernel/lib/api/tls.c (TLS = Task-Local Storage, not Transport Layer Security) |
Bytestream framing on the wire is delegated to the underlying DGD driver; kernellib's role is the LPC-side connection lifecycle (open, close, receive_message, send_message, redirect). Higher-protocol layers (HTTP request parsing, WebSocket frame handling, TLS termination) are application concerns kernellib does not address.
- Cryptographic primitives: kernellib does not carry cryptographic primitives at the kernel-library level. The only crypto-touching code in the kernellib tree is in
src/kernel/obj/user.c's login flow, callinghash_string("crypt", ...)for password hashing:
c
if (hash_string("crypt", str, password) != password) { ... }
password = hash_string("crypt", str);
hash_string() is a DGD driver kfun (not a kernellib primitive). dworkin/dgd's driver at HEAD aafc3784 provides the following crypto-related kfuns in the standard set, each backed by a name-dispatched table that extensions can extend via KFun::add():
| Kfun | Built-in algorithms | Source |
|---|---|---|
hash_string(algorithm, ...) |
"crypt" (Unix password hash with random or fixed salt), "MD5", "SHA1", "CRC16", "CRC32" |
src/kfun/extra.cpp (FUNCDEF at line 1005, dispatcher at line 1429) |
crypt(string) |
Convenience wrapper around hash_string("crypt", ...) |
src/kfun/extra.cpp:1450 |
encrypt(algorithm, ...) |
"DES key" (key preparation), "DES" (block encryption) |
src/kfun/extra.cpp:28, dispatcher at line 67 |
decrypt(algorithm, ...) |
"DES" (block decryption) |
src/kfun/extra.cpp:89, dispatcher at line 134 |
The encrypt / decrypt / hash_string dispatchers consult name-prefixed extension tables (kfenc, kfdec, kfhsh in src/kfun/table.cpp); extension modules can register additional algorithms by adding kfuns whose names start with "encrypt ", "decrypt ", or "hash " -- the prefix is stripped at registration. Modern primitives -- SHA-256 / SHA-384 / SHA-512, AES, RSA, Ed25519, X25519, HMAC, ChaCha20 / Poly1305 -- are not in the standard kfun set; applications needing them either link a DGD extension that registers them or implement them in LPC. There is no built-in support for X.509 certificate parsing, key-derivation functions (PBKDF2 / Argon2), or constant-time comparison helpers.
For downstream agent-identity work, this means: agent identity that needs cryptographic verification (signed capability tokens, content-addressed identifiers, sealed audit logs) requires either a DGD extension layer registering modern primitives, an LPC-level implementation of the chosen scheme, or an architectural choice to delegate crypto to an external service.
The Retrospective limits: structural comparison without access to the development branches that produced each tree. A full archaeology would clone dworkin/kernellib, walk its history alongside dworkin/cloud-server's, and identify which features moved which direction at which commit. That work would refine but not contradict the structural claim above.
What Would Revise It
-
Direct evidence kernellib's features came from
dworkin/kernellib(not from Skotos) would shift the framing of the divergence: the features would be retained-from-ancestor, not Skotos-added. Two paths to find this: (a) clonedworkin/kernelliband check whetherobjregdand the extended resource categories existed in its history; (b) read kernellib's git log for evidence of when Skotos vs dworkin authored each feature. -
Evidence cloud-server's
src/kernel/has been deliberately pruned -- e.g., a commit that removesobjregd.cor that strips resource categories -- would shift the framing the other direction: cloud-server's kernel is the deliberately-minimal selection from a richer ancestor. -
A new release of either tree that adds or removes the cited features would invalidate the snapshot claim. As of authoring time the cited HEADs are stable: kernellib at
d86b427(last update 2020-09-24, three-and-a-half years before this Observation), cloud-server at9994bc3(last update 2026-03-14, six weeks before this Observation). -
A finding that the resource categories cited from kernellib are dead code (declared in
rsrcdbut never enforced or queried) would weaken the claim's relevance, even though the structural fact would stand. Worth checking if a future adoption decides to graft these patterns: do callees actually consulteditors,events,tick usagequotas, or are the categories vestigial?
Sources
- ChatTheatre/kernellib
src/kernel/sys/rsrcd.c-- kernellib's resource daemon, 679 lines. - dworkin/cloud-server
src/kernel/sys/rsrcd.c-- cloud-server's resource daemon, 366 lines. - ChatTheatre/kernellib
src/kernel/sys/objregd.c-- kernellib's object registry daemon (no cloud-server counterpart). - ChatTheatre/kernellib
src/kernel/lib/api/objreg.c-- theobjregAPI wrapper. - ChatTheatre/kernellib
src/kernel/lib/api/tls.c-- kernellib's TLS API (Task-Local Storage; not transport-layer security). - ChatTheatre/kernellib
src/kernel/obj/telnet.c,src/kernel/obj/binary.c,src/kernel/obj/datagram.c-- the three connection-protocol clones inheriting LIB_CONN. - ChatTheatre/kernellib
src/kernel/lib/connection.c-- LIB_CONN base class for all three protocol handlers. - ChatTheatre/kernellib
src/kernel/sys/userd.c-- manager hooksset_telnet_manager(port, obj),set_binary_manager(port, obj),set_datagram_manager(port, obj). - ChatTheatre/kernellib
src/kernel/obj/user.c-- the only crypto-touching call in kernellib (hash_string("crypt", ...)for password hashing in the login flow). - ChatTheatre/kernellib
kernel.dgd-- default config:telnet_port = 6047,binary_port = 6048; no datagram, HTTP, WebSocket, SSH, or TLS-transport ports. - ChatTheatre/kernellib
src/doc/kernel/overview-- kernel-library documentation describing the telnet-or-binary login model and the manager-installation pattern. - dworkin/dgd
src/kfun/extra.cpp-- driver kfun source withencrypt,decrypt,hash_string,crypt,hash_crc16,hash_crc32,kf_md5,kf_sha1definitions. Algorithm names verified by reading the FUNCDEF declarations (lines 28, 89, 799, 891, 1003-1005, 1450). - dworkin/dgd
src/kfun/table.cpp-- kfun dispatcher tables (kfenc,kfdec,kfhsh) and theKFun::add()extension-registration logic at line 309. - ChatTheatre/kernellib
LICENSE-- CC0 1.0 declaration. - ChatTheatre/kernellib
README.md-- lineage notes and CC0 declarations from contributors (Skotos Tech, Dyvers Hands, Christopher Allen, Noah Gibbs). - dworkin/cloud-server
LICENSE-- Unlicense declaration.
External: https://github.com/ChatTheatre/kernellib, https://github.com/dworkin/cloud-server.
Relations
-
conforms_to::[[Observation Form Contract]]
- This Observation carries
has_epistemic_status::[[Retrospective Observation]], names its grounds (direct source reading) and the limits of those grounds (snapshot, not history), and states concrete revision conditions -- the structural obligations the Observation Form Contract enforces.
- This Observation carries
-
grounded_in::[[Cloud Server (Croes, 2012, rev. 2026)]]
- The Cloud Server Reference node carries the cloud-server side of the comparison, including its License and the eight-primitives mapping. This Observation's claim leans on the Reference's structural inventory of cloud-server's kernel; without that inventory, the "absent from cloud-server" half of the claim could not be evaluated.
-
informs_downstream::[[Foundation Choice Decision]]
- The MVA's foundation tradeoff (cloud-server adoption vs clean-room reimplementation) leans on this Observation. Specifically: kernellib's
objregdand granular resource tracking are evidence that the SkotOS production stack found those features useful enough to maintain; if the eOS-Harness MVA needs comparable multi-agent coordination, building on cloud-server means either grafting from kernellib or accepting cloud-server's leaner default. The Decision node cites this Observation as evidence.
- The MVA's foundation tradeoff (cloud-server adoption vs clean-room reimplementation) leans on this Observation. Specifically: kernellib's
-
contrasts_with::[[Cloud Server's src/kernel/ Strips Object Registry and Granular Resource Tracking From the Common Ancestor]]
- A sibling Observation framing the divergence from cloud-server's perspective rather than kernellib's. That Observation does not yet exist; its filename is reserved here so a future authoring covers the cloud-server-stripped framing without restating evidence.