- Hyperswarm connection caps (env + /proc + disk.os replication_operator_sketch) - Protomux operator metrics schema; warm-cache invalidation on replication - ctx.bareOsSyscall nanosleep; socket bridge getsockopt/setsockopt (keepalive/nodelay) - Extension signer pin verification before kernel.ext.d scripts; ctx/DTS updates - Structured seeder logging (BARE_OS_SEED_LOG_*); release-checklist holepunch drift - POSIX profile/matrix/conformance lists + handbook/env appendix/kernel-extensions - Coreutils printf golden tests; sync kernel ↔ seeder parity after bundle
509 lines
14 KiB
JavaScript
509 lines
14 KiB
JavaScript
/**
|
|
* Stock `ctx.bareOsSyscall` op names (single source for `/proc` introspection).
|
|
* Keep in sync with `BARE_OS_SYSCALL_OPS` in `packages/bare-os-coreutils/src/getconf.js`
|
|
* and `docs/reference/posix-conformance-matrix.json`.
|
|
*/
|
|
|
|
/** @typedef {'stable' | 'experimental'} BareOsSyscallStability */
|
|
/** @typedef {'fs' | 'proc' | 'ipc' | 'signal' | 'vfs_meta'} BareOsSyscallCategory */
|
|
|
|
/**
|
|
* Rich syscall table for `/proc/bare_os/syscalls.json` (schema v3+; v4 adds fd/signal models in index.js).
|
|
* @type {ReadonlyArray<{ name: string, category: BareOsSyscallCategory, stability: BareOsSyscallStability }>}
|
|
*/
|
|
export const BARE_OS_SYSCALL_OPS_DETAIL = Object.freeze([
|
|
{ name: 'readFile', category: 'fs', stability: 'stable' },
|
|
{ name: 'writeFile', category: 'fs', stability: 'stable' },
|
|
{ name: 'readdir', category: 'fs', stability: 'stable' },
|
|
{ name: 'mkdir', category: 'fs', stability: 'stable' },
|
|
{ name: 'stat', category: 'fs', stability: 'stable' },
|
|
{ name: 'unlink', category: 'fs', stability: 'stable' },
|
|
{ name: 'chmod', category: 'fs', stability: 'stable' },
|
|
{ name: 'chdir', category: 'fs', stability: 'stable' },
|
|
{ name: 'getcwd', category: 'fs', stability: 'stable' },
|
|
{ name: 'readlink', category: 'fs', stability: 'stable' },
|
|
{ name: 'symlink', category: 'fs', stability: 'stable' },
|
|
{ name: 'exists', category: 'fs', stability: 'stable' },
|
|
{ name: 'lstat', category: 'fs', stability: 'stable' },
|
|
{ name: 'rmdir', category: 'fs', stability: 'stable' },
|
|
{ name: 'mount', category: 'vfs_meta', stability: 'experimental' },
|
|
{ name: 'umount', category: 'vfs_meta', stability: 'experimental' },
|
|
{ name: 'kill', category: 'signal', stability: 'stable' },
|
|
{ name: 'rename', category: 'fs', stability: 'stable' },
|
|
{ name: 'link', category: 'fs', stability: 'experimental' },
|
|
{ name: 'access', category: 'fs', stability: 'stable' },
|
|
{ name: 'utimes', category: 'fs', stability: 'stable' },
|
|
{ name: 'truncate', category: 'fs', stability: 'stable' },
|
|
{ name: 'ftruncate', category: 'fs', stability: 'experimental' },
|
|
{ name: 'fsync', category: 'fs', stability: 'experimental' },
|
|
{ name: 'fdatasync', category: 'fs', stability: 'experimental' },
|
|
{ name: 'pathconf', category: 'fs', stability: 'experimental' },
|
|
{ name: 'fcntl', category: 'fs', stability: 'stable' },
|
|
{ name: 'posixPoll', category: 'fs', stability: 'experimental' },
|
|
{ name: 'select', category: 'fs', stability: 'experimental' },
|
|
{ name: 'umask', category: 'fs', stability: 'stable' },
|
|
{
|
|
name: 'socket',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'ENOTSUP',
|
|
mapsTo: ['ctx.bare bare-tcp / bare-dgram', 'Hyperswarm/Protomux P2P'],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'bind',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'ENOTSUP',
|
|
mapsTo: ['bare-tcp Server.listen', 'not AF_INET kernel sockets'],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'listen',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'ENOTSUP',
|
|
mapsTo: ['bare-tcp listen backlog analogs'],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'accept',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'ENOTSUP',
|
|
mapsTo: ['bare-tcp accept'],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'connect',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'ENOTSUP',
|
|
mapsTo: ['bare-tcp connect', 'UDX'],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'send',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'ENOTSUP',
|
|
mapsTo: ['stream.write'],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'recv',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'ENOTSUP',
|
|
mapsTo: ['stream.read'],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'sendmsg',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'ENOTSUP',
|
|
mapsTo: ['flattened iovec send on SOCK_DGRAM bridge'],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'recvmsg',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'ENOTSUP',
|
|
mapsTo: ['SOCK_DGRAM bridge datagram + msgHdr envelope'],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'shutdown',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'ENOTSUP',
|
|
mapsTo: ['stream.end / destroy'],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'getsockopt',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("getsockopt")',
|
|
'BARE_OS_POSIX_SOCKET_FD_BRIDGE: SOL_SOCKET/SO_KEEPALIVE and IPPROTO_TCP/TCP_NODELAY on bridge fds only; else ENOSYS'
|
|
],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'setsockopt',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("setsockopt")',
|
|
'bridge fds: same levels/optnames as getsockopt; logical slot state only'
|
|
],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'readv',
|
|
category: 'fs',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("readv")',
|
|
'bounded sequential reads from posix-pipe read FD (BARE_OS_POSIX_FD_SIM)'
|
|
],
|
|
errnoHint: 'EINVAL'
|
|
},
|
|
{
|
|
name: 'writev',
|
|
category: 'fs',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("writev")',
|
|
'bounded concatenated write to posix-pipe write FD (BARE_OS_POSIX_FD_SIM)'
|
|
],
|
|
errnoHint: 'EINVAL'
|
|
},
|
|
{
|
|
name: 'mq_open',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['ctx.bareOsSyscall("mq_open")', 'bareOsIpc.mqOpen'],
|
|
errnoHint: 'EINVAL'
|
|
},
|
|
{
|
|
name: 'mq_send',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['ctx.bareOsSyscall("mq_send")', 'bareOsIpc.mqSend'],
|
|
errnoHint: 'EAGAIN'
|
|
},
|
|
{
|
|
name: 'mq_receive',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['ctx.bareOsSyscall("mq_receive")', 'bareOsIpc.mqReceive'],
|
|
errnoHint: 'EAGAIN'
|
|
}
|
|
])
|
|
|
|
/**
|
|
* POSIX.1 XSH-style names mapped to guest behavior (not separate `ctx.bareOsSyscall` ops).
|
|
* Merged into `/proc/bare_os/syscalls.json` **`opsDetail`** for Issue 7 traceability.
|
|
* @type {ReadonlyArray<{
|
|
* name: string,
|
|
* category: BareOsSyscallCategory,
|
|
* stability: BareOsSyscallStability,
|
|
* posixAlignment: 'simulated' | 'partial' | 'ENOTSUP',
|
|
* mapsTo: string[],
|
|
* errnoHint?: string
|
|
* }>}
|
|
*/
|
|
export const BARE_OS_POSIX_XSH_OPS_DETAIL = Object.freeze([
|
|
{
|
|
name: 'open',
|
|
category: 'fs',
|
|
stability: 'stable',
|
|
posixAlignment: 'simulated',
|
|
mapsTo: ['vfs.readFile', 'vfs.writeFile', 'vfs.exists', 'vfs.lstat'],
|
|
errnoHint: 'ENOENT'
|
|
},
|
|
{
|
|
name: 'close',
|
|
category: 'fs',
|
|
stability: 'stable',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['logical fd table eviction', 'IPC channel teardown'],
|
|
errnoHint: 'EBADF'
|
|
},
|
|
{
|
|
name: 'read',
|
|
category: 'fs',
|
|
stability: 'stable',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['vfs.readFile', 'ctx.bareOsBinReadStdin', 'IPC fifo consumer'],
|
|
errnoHint: 'EAGAIN'
|
|
},
|
|
{
|
|
name: 'write',
|
|
category: 'fs',
|
|
stability: 'stable',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['vfs.writeFile', 'ctx.bareOsBinWrite', 'IPC fifo producer'],
|
|
errnoHint: 'EIO'
|
|
},
|
|
{
|
|
name: 'readv',
|
|
category: 'fs',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['ctx.bareOsSyscall("readv")', 'posix-pipe read FD', 'bounded iovec count'],
|
|
errnoHint: 'EINVAL'
|
|
},
|
|
{
|
|
name: 'writev',
|
|
category: 'fs',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['ctx.bareOsSyscall("writev")', 'posix-pipe write FD', 'bounded total bytes'],
|
|
errnoHint: 'EINVAL'
|
|
},
|
|
{
|
|
name: 'getsockopt',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("getsockopt")',
|
|
'BARE_OS_POSIX_SOCKET_FD_BRIDGE: SOL_SOCKET/SO_KEEPALIVE and IPPROTO_TCP/TCP_NODELAY on bridge fds only; else ENOSYS'
|
|
],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'setsockopt',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("setsockopt")',
|
|
'bridge fds: same levels/optnames as getsockopt; logical slot state only'
|
|
],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'lseek',
|
|
category: 'fs',
|
|
stability: 'stable',
|
|
posixAlignment: 'ENOTSUP',
|
|
mapsTo: ['no byte-offset FD cursor in guest'],
|
|
errnoHint: 'ESPIPE'
|
|
},
|
|
{
|
|
name: 'nanosleep',
|
|
category: 'fs',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['ctx.bareOsSyscall("nanosleep")', 'Issue 7-style delay; capped wall sleep'],
|
|
errnoHint: 'EINVAL'
|
|
},
|
|
{
|
|
name: 'pipe',
|
|
category: 'ipc',
|
|
stability: 'stable',
|
|
posixAlignment: 'simulated',
|
|
mapsTo: ['mkfifo', '/run/bare-os/ipc/*', 'BARE_OS_POSIX_FD_SIM optional channel pairs'],
|
|
errnoHint: 'EMFILE'
|
|
},
|
|
{
|
|
name: 'dup',
|
|
category: 'fs',
|
|
stability: 'stable',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['ctx.bareOsRegisterLogicalFd'],
|
|
errnoHint: 'EBADF'
|
|
},
|
|
{
|
|
name: 'dup2',
|
|
category: 'fs',
|
|
stability: 'stable',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['shell redirect table', '2>&1 merge'],
|
|
errnoHint: 'EBADF'
|
|
},
|
|
{
|
|
name: 'fcntl',
|
|
category: 'fs',
|
|
stability: 'stable',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("fcntl")',
|
|
'F_GETFL',
|
|
'F_SETFL',
|
|
'F_GETLK',
|
|
'F_SETLK',
|
|
'F_SETLKW',
|
|
'cooperative session-scoped advisory locks (path or fd→path); F_SETLKW is EAGAIN when busy unless BARE_OS_POSIX_FCNTL_BLOCKING_WAIT (bounded wait via BARE_OS_FCNTL_LOCK_WAIT_MS_MAX)',
|
|
'O_APPEND',
|
|
'O_NONBLOCK',
|
|
'bareOsLogicalFdFlags'
|
|
],
|
|
errnoHint: 'EBADF'
|
|
},
|
|
{
|
|
name: 'poll',
|
|
category: 'fs',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['ctx.bareOsPosixPoll', 'ctx.bareOsSyscall("posixPoll")'],
|
|
errnoHint: 'EINVAL'
|
|
},
|
|
{
|
|
name: 'select',
|
|
category: 'fs',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['ctx.bareOsSyscall("select")', 'bareOsPosixPollProbe subset'],
|
|
errnoHint: 'EBADF'
|
|
},
|
|
{
|
|
name: 'umask',
|
|
category: 'fs',
|
|
stability: 'stable',
|
|
posixAlignment: 'partial',
|
|
mapsTo: ['vfs.env.UMASK octal', 'umask shell builtin'],
|
|
errnoHint: 'EINVAL'
|
|
},
|
|
{
|
|
name: 'nanosleep',
|
|
category: 'fs',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("nanosleep")',
|
|
'host setTimeout; seconds + nanoseconds; cap 3600s; not clock_nanosleep(2)'
|
|
],
|
|
errnoHint: 'EINVAL'
|
|
},
|
|
{
|
|
name: 'socket',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'ENOTSUP',
|
|
mapsTo: ['ctx.bareOsSyscall("socket")', 'ENOSYS-shaped probe'],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'bind',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("bind")',
|
|
'SOCK_STREAM bridge: port+host before listen; SOCK_DGRAM passive bind via bareDgram.Socket.bind (BARE_OS_POSIX_SOCKET_FD_BRIDGE)'
|
|
],
|
|
errnoHint: 'EINVAL'
|
|
},
|
|
{
|
|
name: 'listen',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("listen")',
|
|
'bareTcp.Server.listen when BARE_OS_POSIX_SOCKET_FD_BRIDGE'
|
|
],
|
|
errnoHint: 'EADDRINUSE'
|
|
},
|
|
{
|
|
name: 'accept',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("accept")',
|
|
'dequeue accepted TCP socket to new logical fd; EAGAIN when empty + O_NONBLOCK'
|
|
],
|
|
errnoHint: 'EAGAIN'
|
|
},
|
|
{
|
|
name: 'connect',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'ENOTSUP',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("connect")',
|
|
'SOCK_STREAM/SOCK_DGRAM bridge when BARE_OS_POSIX_SOCKET_FD_BRIDGE (DGRAM may follow bind on same fd)'
|
|
],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'send',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("send")',
|
|
'SOCK_DGRAM connected or bound (bound requires port+host args) + SOCK_STREAM (accepted) bridge write'
|
|
],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'recv',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("recv")',
|
|
'SOCK_DGRAM bridge dequeue; SOCK_STREAM accepted fd tcpRecvQueue (BARE_OS_POSIX_SOCKET_FD_BRIDGE)'
|
|
],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'recvfrom',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("recvfrom")',
|
|
'SOCK_DGRAM bridge + peer address; SOCK_STREAM accepted + remoteAddress/remotePort'
|
|
],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'sendmsg',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("sendmsg")',
|
|
'SOCK_DGRAM + SOCK_STREAM bridge flattened iovs (BARE_OS_POSIX_SOCKET_FD_BRIDGE); ancillary CMSGS ENOTSUP'
|
|
],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'recvmsg',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("recvmsg")',
|
|
'SOCK_DGRAM bridge + msgHdr.name from rinfo; SOCK_STREAM accepted + remote addr; scatter iov / SCM_RIGHTS ENOTSUP'
|
|
],
|
|
errnoHint: 'ENOSYS'
|
|
},
|
|
{
|
|
name: 'shutdown',
|
|
category: 'ipc',
|
|
stability: 'experimental',
|
|
posixAlignment: 'partial',
|
|
mapsTo: [
|
|
'ctx.bareOsSyscall("shutdown")',
|
|
'TCP bridge: destroy socket or close listening Server'
|
|
],
|
|
errnoHint: 'EINVAL'
|
|
}
|
|
])
|
|
|
|
/** Full `opsDetail` for proc JSON (ctx ops + POSIX XSH surface). */
|
|
export const BARE_OS_SYSCALL_OPS_DETAIL_FULL = Object.freeze([
|
|
...BARE_OS_SYSCALL_OPS_DETAIL,
|
|
...BARE_OS_POSIX_XSH_OPS_DETAIL
|
|
])
|
|
|
|
export const BARE_OS_STOCK_SYSCALL_OPS = Object.freeze(
|
|
BARE_OS_SYSCALL_OPS_DETAIL.map((o) => o.name)
|
|
)
|
|
|
|
export function bareOsStockSyscallOpsCsv() {
|
|
return BARE_OS_STOCK_SYSCALL_OPS.join(',')
|
|
}
|
|
|
|
export function bareOsPosixXshOpsCsv() {
|
|
return BARE_OS_POSIX_XSH_OPS_DETAIL.map((o) => o.name).join(',')
|
|
}
|