@volter/browser-wali 0.1.166 → 0.1.168

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +9 -0
  3. package/dist/browser-wali-command.d.ts +7 -0
  4. package/dist/browser-wali-command.d.ts.map +1 -1
  5. package/dist/browser-wali-command.js +70 -18
  6. package/dist/browser-wali-command.js.map +1 -1
  7. package/dist/bulk-memory.d.ts +4 -2
  8. package/dist/bulk-memory.d.ts.map +1 -1
  9. package/dist/bulk-memory.js +32 -9
  10. package/dist/bulk-memory.js.map +1 -1
  11. package/dist/capabilities.d.ts +1 -1
  12. package/dist/capabilities.d.ts.map +1 -1
  13. package/dist/capabilities.js +6 -2
  14. package/dist/capabilities.js.map +1 -1
  15. package/dist/child-processes.d.ts +2 -0
  16. package/dist/child-processes.d.ts.map +1 -1
  17. package/dist/child-processes.js +9 -1
  18. package/dist/child-processes.js.map +1 -1
  19. package/dist/clocks.d.ts +3 -0
  20. package/dist/clocks.d.ts.map +1 -0
  21. package/dist/clocks.js +44 -0
  22. package/dist/clocks.js.map +1 -0
  23. package/dist/coherent-file-locks.d.ts.map +1 -1
  24. package/dist/coherent-file-locks.js +2 -1
  25. package/dist/coherent-file-locks.js.map +1 -1
  26. package/dist/credentials.d.ts +4 -0
  27. package/dist/credentials.d.ts.map +1 -0
  28. package/dist/credentials.js +46 -0
  29. package/dist/credentials.js.map +1 -0
  30. package/dist/descriptors.d.ts +14 -0
  31. package/dist/descriptors.d.ts.map +1 -1
  32. package/dist/descriptors.js +45 -5
  33. package/dist/descriptors.js.map +1 -1
  34. package/dist/environment.d.ts +4 -0
  35. package/dist/environment.d.ts.map +1 -0
  36. package/dist/environment.js +23 -0
  37. package/dist/environment.js.map +1 -0
  38. package/dist/epoll-ready.d.ts +27 -0
  39. package/dist/epoll-ready.d.ts.map +1 -0
  40. package/dist/epoll-ready.js +88 -0
  41. package/dist/epoll-ready.js.map +1 -0
  42. package/dist/events.d.ts +1 -0
  43. package/dist/events.d.ts.map +1 -1
  44. package/dist/events.js +55 -24
  45. package/dist/events.js.map +1 -1
  46. package/dist/filesystem-host-session.d.ts +65 -0
  47. package/dist/filesystem-host-session.d.ts.map +1 -0
  48. package/dist/filesystem-host-session.js +951 -0
  49. package/dist/filesystem-host-session.js.map +1 -0
  50. package/dist/filesystem-host.d.ts +13 -81
  51. package/dist/filesystem-host.d.ts.map +1 -1
  52. package/dist/filesystem-host.js +14 -882
  53. package/dist/filesystem-host.js.map +1 -1
  54. package/dist/filesystem-protocol.d.ts +3 -1
  55. package/dist/filesystem-protocol.d.ts.map +1 -1
  56. package/dist/filesystem-remote.d.ts +8 -3
  57. package/dist/filesystem-remote.d.ts.map +1 -1
  58. package/dist/filesystem-remote.js +43 -20
  59. package/dist/filesystem-remote.js.map +1 -1
  60. package/dist/filesystem-service-client.d.ts +4 -0
  61. package/dist/filesystem-service-client.d.ts.map +1 -0
  62. package/dist/filesystem-service-client.js +16 -0
  63. package/dist/filesystem-service-client.js.map +1 -0
  64. package/dist/filesystem.d.ts +26 -4
  65. package/dist/filesystem.d.ts.map +1 -1
  66. package/dist/filesystem.js +633 -175
  67. package/dist/filesystem.js.map +1 -1
  68. package/dist/fork-memory.d.ts +23 -0
  69. package/dist/fork-memory.d.ts.map +1 -0
  70. package/dist/fork-memory.js +93 -0
  71. package/dist/fork-memory.js.map +1 -0
  72. package/dist/fork-worker.js +32 -11
  73. package/dist/fork-worker.js.map +1 -1
  74. package/dist/jumps.d.ts +7 -0
  75. package/dist/jumps.d.ts.map +1 -1
  76. package/dist/jumps.js +19 -1
  77. package/dist/jumps.js.map +1 -1
  78. package/dist/kernel-filesystem-worker.d.ts +2 -0
  79. package/dist/kernel-filesystem-worker.d.ts.map +1 -0
  80. package/dist/kernel-filesystem-worker.js +28 -0
  81. package/dist/kernel-filesystem-worker.js.map +1 -0
  82. package/dist/kernel-filesystem.d.ts +12 -0
  83. package/dist/kernel-filesystem.d.ts.map +1 -0
  84. package/dist/kernel-filesystem.js +45 -0
  85. package/dist/kernel-filesystem.js.map +1 -0
  86. package/dist/kernel-network-worker.d.ts +2 -0
  87. package/dist/kernel-network-worker.d.ts.map +1 -0
  88. package/dist/kernel-network-worker.js +14 -0
  89. package/dist/kernel-network-worker.js.map +1 -0
  90. package/dist/kernel-network.d.ts +14 -0
  91. package/dist/kernel-network.d.ts.map +1 -0
  92. package/dist/kernel-network.js +50 -0
  93. package/dist/kernel-network.js.map +1 -0
  94. package/dist/kernel-process-client.d.ts +6 -1
  95. package/dist/kernel-process-client.d.ts.map +1 -1
  96. package/dist/kernel-process-client.js +10 -1
  97. package/dist/kernel-process-client.js.map +1 -1
  98. package/dist/module-layout.d.ts +8 -0
  99. package/dist/module-layout.d.ts.map +1 -1
  100. package/dist/module-layout.js +263 -2
  101. package/dist/module-layout.js.map +1 -1
  102. package/dist/network-host.d.ts +6 -0
  103. package/dist/network-host.d.ts.map +1 -0
  104. package/dist/network-host.js +1582 -0
  105. package/dist/network-host.js.map +1 -0
  106. package/dist/network-protocol.d.ts +9 -2
  107. package/dist/network-protocol.d.ts.map +1 -1
  108. package/dist/network-protocol.js +3 -0
  109. package/dist/network-protocol.js.map +1 -1
  110. package/dist/network-service-client.d.ts +4 -0
  111. package/dist/network-service-client.d.ts.map +1 -0
  112. package/dist/network-service-client.js +16 -0
  113. package/dist/network-service-client.js.map +1 -0
  114. package/dist/network-worker.js +5 -1150
  115. package/dist/network-worker.js.map +1 -1
  116. package/dist/network.d.ts +13 -1
  117. package/dist/network.d.ts.map +1 -1
  118. package/dist/network.js +175 -48
  119. package/dist/network.js.map +1 -1
  120. package/dist/paths.d.ts +11 -0
  121. package/dist/paths.d.ts.map +1 -0
  122. package/dist/paths.js +97 -0
  123. package/dist/paths.js.map +1 -0
  124. package/dist/process-bridge.d.ts +12 -4
  125. package/dist/process-bridge.d.ts.map +1 -1
  126. package/dist/process-bridge.js +53 -17
  127. package/dist/process-bridge.js.map +1 -1
  128. package/dist/program.d.ts.map +1 -1
  129. package/dist/program.js +8 -0
  130. package/dist/program.js.map +1 -1
  131. package/dist/runtime.d.ts.map +1 -1
  132. package/dist/runtime.js +150 -92
  133. package/dist/runtime.js.map +1 -1
  134. package/dist/shared-buffer-pool.d.ts +18 -5
  135. package/dist/shared-buffer-pool.d.ts.map +1 -1
  136. package/dist/shared-buffer-pool.js +86 -14
  137. package/dist/shared-buffer-pool.js.map +1 -1
  138. package/dist/shared-file-layer.d.ts +3 -1
  139. package/dist/shared-file-layer.d.ts.map +1 -1
  140. package/dist/shared-file-layer.js +150 -35
  141. package/dist/shared-file-layer.js.map +1 -1
  142. package/dist/shared-pipes.d.ts +3 -1
  143. package/dist/shared-pipes.d.ts.map +1 -1
  144. package/dist/shared-pipes.js +105 -33
  145. package/dist/shared-pipes.js.map +1 -1
  146. package/dist/signal-interruption.d.ts +9 -0
  147. package/dist/signal-interruption.d.ts.map +1 -0
  148. package/dist/signal-interruption.js +6 -0
  149. package/dist/signal-interruption.js.map +1 -0
  150. package/dist/signals.d.ts +17 -6
  151. package/dist/signals.d.ts.map +1 -1
  152. package/dist/signals.js +101 -22
  153. package/dist/signals.js.map +1 -1
  154. package/dist/snapshot-filesystem.d.ts +12 -1
  155. package/dist/snapshot-filesystem.d.ts.map +1 -1
  156. package/dist/snapshot-filesystem.js +241 -73
  157. package/dist/snapshot-filesystem.js.map +1 -1
  158. package/dist/socket-flags.d.ts +3 -0
  159. package/dist/socket-flags.d.ts.map +1 -0
  160. package/dist/socket-flags.js +9 -0
  161. package/dist/socket-flags.js.map +1 -0
  162. package/dist/special-files.d.ts +6 -0
  163. package/dist/special-files.d.ts.map +1 -0
  164. package/dist/special-files.js +56 -0
  165. package/dist/special-files.js.map +1 -0
  166. package/dist/stdin.d.ts.map +1 -1
  167. package/dist/stdin.js +13 -5
  168. package/dist/stdin.js.map +1 -1
  169. package/dist/symlink.d.ts +2 -1
  170. package/dist/symlink.d.ts.map +1 -1
  171. package/dist/symlink.js +25 -93
  172. package/dist/symlink.js.map +1 -1
  173. package/dist/system.d.ts +2 -4
  174. package/dist/system.d.ts.map +1 -1
  175. package/dist/system.js +46 -29
  176. package/dist/system.js.map +1 -1
  177. package/dist/thread-coordinator-worker.js +58 -24
  178. package/dist/thread-coordinator-worker.js.map +1 -1
  179. package/dist/thread-lifecycle.d.ts +9 -0
  180. package/dist/thread-lifecycle.d.ts.map +1 -0
  181. package/dist/thread-lifecycle.js +30 -0
  182. package/dist/thread-lifecycle.js.map +1 -0
  183. package/dist/thread-worker.js +125 -44
  184. package/dist/thread-worker.js.map +1 -1
  185. package/dist/threads.d.ts +6 -0
  186. package/dist/threads.d.ts.map +1 -1
  187. package/dist/threads.js +46 -6
  188. package/dist/threads.js.map +1 -1
  189. package/dist/tty-job-control.d.ts +13 -0
  190. package/dist/tty-job-control.d.ts.map +1 -0
  191. package/dist/tty-job-control.js +56 -0
  192. package/dist/tty-job-control.js.map +1 -0
  193. package/dist/tty-settings.d.ts +3 -0
  194. package/dist/tty-settings.d.ts.map +1 -0
  195. package/dist/tty-settings.js +25 -0
  196. package/dist/tty-settings.js.map +1 -0
  197. package/dist/types.d.ts +26 -0
  198. package/dist/types.d.ts.map +1 -1
  199. package/dist/wait-state.d.ts +8 -0
  200. package/dist/wait-state.d.ts.map +1 -1
  201. package/dist/wait-state.js +15 -0
  202. package/dist/wait-state.js.map +1 -1
  203. package/dist/worker-program-protocol.d.ts +22 -2
  204. package/dist/worker-program-protocol.d.ts.map +1 -1
  205. package/dist/worker-program-worker.js +31 -9
  206. package/dist/worker-program-worker.js.map +1 -1
  207. package/dist/worker-program.d.ts +12 -2
  208. package/dist/worker-program.d.ts.map +1 -1
  209. package/dist/worker-program.js +214 -36
  210. package/dist/worker-program.js.map +1 -1
  211. package/dist/write-vector.d.ts +3 -0
  212. package/dist/write-vector.d.ts.map +1 -0
  213. package/dist/write-vector.js +35 -0
  214. package/dist/write-vector.js.map +1 -0
  215. package/package.json +1 -1
package/dist/program.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { realtimeMilliseconds } from "./monotonic-clock.js";
2
2
  import { normalizeProcessFilesystemPolicy } from "@volter/browser-runtime/browser-process-filesystem-policy.js";
3
3
  import { BrowserByteVault } from "@volter/browser-runtime/browser-byte-vault.js";
4
+ import { setBrowserFileTimes } from "@volter/browser-runtime/browser-file-times.js";
4
5
  import { installProgramResources } from "@volter/browser-runtime/browser-program-resources.js";
5
6
  import { BrowserWaliWorkerProgram } from "./worker-program.js";
6
7
  /** Where the host puts each program's marker; the programs themselves are its parent's other children. */
@@ -82,6 +83,13 @@ class PrivateFileOverlay {
82
83
  }
83
84
  file.mtimeMs = typeof mtime === "number" ? mtime : Number(mtime);
84
85
  }
86
+ utimesMsSync(path, atimeMs, mtimeMs) {
87
+ const file = this.privateFile(path);
88
+ if (file)
89
+ file.mtimeMs = mtimeMs;
90
+ else
91
+ setBrowserFileTimes(this.shared, path, atimeMs, mtimeMs);
92
+ }
85
93
  privateFile(path) {
86
94
  return this.files.find((file) => file.path === path);
87
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAGV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAWpB,qBAAa,0BAA2B,SAAQ,KAAK;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;gBAA1B,OAAO,EAAE,SAAS,MAAM,EAAE;CAIhD;AA+CD,qBAAa,kBAAkB;IACvB,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;CAi3B1F"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAGV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAWpB,qBAAa,0BAA2B,SAAQ,KAAK;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;gBAA1B,OAAO,EAAE,SAAS,MAAM,EAAE;CAIhD;AA+CD,qBAAa,kBAAkB;IACvB,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;CA46B1F"}
package/dist/runtime.js CHANGED
@@ -1,4 +1,10 @@
1
+ import { waliRaisesBrokenPipe } from "./socket-flags.js";
2
+ import { waliTerminalAccess, waliTerminalOperation, waliTerminalSettingsIoctl } from "./tty-job-control.js";
3
+ import { setWaliSignalInterruption } from "./signal-interruption.js";
1
4
  import { resolveWaliExec } from "./exec-format.js";
5
+ import { createWaliEnvironmentImports } from "./environment.js";
6
+ import { captureWaliForkMemory, restoreWaliForkMemory } from "./fork-memory.js";
7
+ import { gatherWaliWriteVector } from "./write-vector.js";
2
8
  import { WaliKernelProcessClient, forkKernelProcessIdentity, kernelTerminalIoctl, parkWaliStopped } from "./kernel-process-client.js";
3
9
  import { releaseWaliSharedBuffers } from "./shared-buffer-pool.js";
4
10
  import { hostWait, setHostIdle } from "./host-idle.js";
@@ -28,7 +34,7 @@ import { applyProcessFilesystemPatch, createBrowserProcessSharedState, closeShar
28
34
  import { BrowserFileLockClient } from "@volter/browser-runtime/browser-file-locks.js";
29
35
  import { BrowserFileCoherenceClient } from "@volter/browser-runtime/browser-file-coherence.js";
30
36
  import { WaliCoherentFileLockClient } from "./coherent-file-locks.js";
31
- import { monotonicMilliseconds, realtimeMilliseconds } from "./monotonic-clock.js";
37
+ import { realtimeMilliseconds } from "./monotonic-clock.js";
32
38
  const EBADF = 9n;
33
39
  const EINVAL = 22n;
34
40
  const encoder = new TextEncoder();
@@ -182,10 +188,14 @@ export class BrowserWaliRuntime {
182
188
  * things about who decided.
183
189
  */
184
190
  const exit = (status, name = "SYS_exit_group") => {
185
- const notice = `[WALI] ${name}(${status & 0xff}) on the MAIN thread -- the process is ending here,`
186
- + ` not in a pthread. If the program did not ask to exit, this is the caller to find.`;
187
- console.error(notice);
188
- options.onDiagnostic?.(notice);
191
+ // Only a process with pthreads has another thread that could have ended it;
192
+ // without one, every exit (each fork's included) printed and relayed this.
193
+ if (threadPool) {
194
+ const notice = `[WALI] ${name}(${status & 0xff}) on the MAIN thread -- the process is ending here,`
195
+ + ` not in a pthread. If the program did not ask to exit, this is the caller to find.`;
196
+ console.error(notice);
197
+ options.onDiagnostic?.(notice);
198
+ }
189
199
  throw new WaliProcessExit(status & 0xff);
190
200
  };
191
201
  const signalSelf = (signal) => {
@@ -193,12 +203,12 @@ export class BrowserWaliRuntime {
193
203
  return -22n;
194
204
  if (signal === 0)
195
205
  return 0n;
196
- // blocked, it stays pending until the mask admits it (raise queues only for a handler)
206
+ // A blocked default action is pending too; delivery consults the thread mask.
197
207
  if (signal !== 9 && (signalHost.mask & (1n << BigInt(signal - 1))) !== 0n) {
198
- new WaliSignals(signalState).raise(signal);
208
+ new WaliSignals(signalState).raise(signal, 0, 0, 0, true);
199
209
  return 0n;
200
210
  }
201
- const disposition = signal === 9 || signal === 19 ? "default" : new WaliSignals(signalState).raise(signal);
211
+ const disposition = signal === 9 ? "default" : new WaliSignals(signalState).raise(signal);
202
212
  if (disposition === "default" && defaultStops(signal) && kernelProcesses)
203
213
  return kernelProcesses.call("kill", pid, signal);
204
214
  if (disposition === "default" && defaultTerminates(signal))
@@ -245,7 +255,7 @@ export class BrowserWaliRuntime {
245
255
  ...(options.filesystemUpdatePort ? { updatePort: options.filesystemUpdatePort } : {}),
246
256
  ...(options.fileLocks ? { fileLocks: options.fileLocks } : {}),
247
257
  ...(options.fileCoherence ? { fileCoherence: options.fileCoherence } : {}),
248
- });
258
+ }, filesystemOnMainThread ? undefined : await options.filesystemService?.());
249
259
  }
250
260
  if (filesystemPolicy && threaded && !filesystemCoordinator && !inheritedDescriptors)
251
261
  throw new Error("Confined WALI threads require the shared filesystem owner.");
@@ -262,6 +272,11 @@ export class BrowserWaliRuntime {
262
272
  ...(runtimeFilesystem ? { filesystem: runtimeFilesystem } : {}),
263
273
  cwd: options.cwd ?? "/",
264
274
  stdin,
275
+ ...(options.terminalStdin ? { terminalStdin: options.terminalStdin } : {}),
276
+ ...(options.onTerminalOutput ? { emitTerminal: (value) => {
277
+ options.onTerminalOutput(value.slice());
278
+ return BigInt(value.byteLength);
279
+ } } : {}),
265
280
  executablePath,
266
281
  memory,
267
282
  emit,
@@ -280,19 +295,34 @@ export class BrowserWaliRuntime {
280
295
  ...(options.onDiagnostic ? { onDiagnostic: options.onDiagnostic } : {}),
281
296
  });
282
297
  const fileDescriptorImports = fileDescriptors.imports();
283
- const environmentFile = fileDescriptors.writeEnvironmentFile(options.env ?? {}, pid);
298
+ // A fork child resumes inside the parent's image, whose environ is already
299
+ // in memory; libc reads the environment file only at startup, so a fork
300
+ // would write and remove one no one reads (four filesystem round trips).
301
+ const directEnvironment = waliDescriptors.some((descriptor) => descriptor.name === "__cl_get_envc");
302
+ const environmentFile = options.forkState || directEnvironment ? undefined : fileDescriptors.writeEnvironmentFile(options.env ?? {}, pid);
284
303
  const sharedFileClient = inheritedDescriptors ?? filesystemCoordinator?.filesystem();
285
304
  const sharedFileHost = sharedFileClient
286
305
  ? new WaliSharedFileDescriptorHost(sharedFileClient, stdioAliasRegistry, sharedPipeState, memory) : undefined;
287
306
  const memoryManager = new WaliMemoryManager(memory, (fd, offset, length) => sharedFileHost?.readForMapping(fd, offset, length)
288
307
  ?? fileDescriptors.readForMapping(fd, offset, length), mmapCursor, (fd) => sharedFileHost?.mappingPath(fd) ?? fileDescriptors.mappingPath(fd), (path, offset, value) => sharedFileHost?.writeForMapping(path, offset, value)
289
308
  ?? fileDescriptors.writeForMapping(path, offset, value), sharedMmapRegistry, options.onDiagnostic, () => imageExtent ?? memory().buffer.byteLength);
290
- const signalHost = new WaliSignalHost(new WaliSignals(signalState), memory, () => instance?.exports.__indirect_function_table, () => Number(memoryManager.imports().SYS_mmap(0, 4096, 3, 0x22, -1, 0)), privateTreeHeld(() => instance?.exports, memory));
309
+ const signalHost = new WaliSignalHost(new WaliSignals(signalState), memory, () => instance?.exports.__indirect_function_table, () => Number(memoryManager.imports().SYS_mmap(0, 4096, 3, 0x22, -1, 0)), privateTreeHeld(() => instance?.exports, memory), signal => {
310
+ if (defaultStops(signal)) {
311
+ if (!kernelProcesses)
312
+ throw new Error("ENOSYS: default stop needs the kernel process owner.");
313
+ kernelProcesses.call("stop", signal);
314
+ parkWaliStopped(options.processIdentity);
315
+ }
316
+ else if (defaultTerminates(signal))
317
+ exit(128 + signal, `signal ${signal}`);
318
+ }, true);
291
319
  signalHost.mask = options.forkState?.signalMask ?? 0n;
292
320
  // The same number the thread pool is built with below, so the CPU count
293
321
  // the guest is told about can never exceed the workers that exist.
294
322
  const threadPoolSize = options.threadPoolSize ?? 18;
295
- const systemHost = new WaliSystemHost(memory, pid, stdin, pthreadFatal, options.terminal, threadPoolSize, () => memoryManager.growAhead());
323
+ if (sharedFileClient)
324
+ fileDescriptors.descriptors.descriptorLimits = sharedFileClient.descriptorLimits;
325
+ const systemHost = new WaliSystemHost(memory, pid, stdin, pthreadFatal, options.terminal, threadPoolSize, () => memoryManager.growAhead(), fileDescriptors.descriptors.descriptorLimits);
296
326
  const hostDoorbell = filesystemOnMainThread ? filesystemCoordinator?.doorbell() : undefined;
297
327
  // ADR-0046: every wait of this thread answers the other threads and the page from here on.
298
328
  setHostIdle(hostDoorbell ? { pump: () => filesystemCoordinator.pump(true), doorbell: hostDoorbell } : undefined);
@@ -307,7 +337,7 @@ export class BrowserWaliRuntime {
307
337
  // hundredth copy of the notice buries the first.
308
338
  let threadPoolExhaustionReported = false;
309
339
  if (options.network || childDoor) {
310
- networkCoordinator = await WaliNetworkCoordinator.create(options.network, sharedPipeState, stdin instanceof SharedWaliStdinReader ? stdin.buffer : undefined, stdioAliasRegistry.buffer, signalState, options.waitAgent?.activity);
340
+ networkCoordinator = await WaliNetworkCoordinator.create(options.network, sharedPipeState, stdin instanceof SharedWaliStdinReader ? stdin.buffer : undefined, stdioAliasRegistry.buffer, signalState, options.waitAgent?.activity, options.networkService ? await options.networkService() : undefined, !options.forkState, fileDescriptors.descriptors.descriptorLimits, options.terminalStdin instanceof SharedWaliStdinReader ? options.terminalStdin.buffer : undefined);
311
341
  }
312
342
  const networkHost = networkCoordinator ? new WaliNetworkHost(memory, networkCoordinator.createChannel(), signalHost, options.processIdentity) : undefined;
313
343
  const sharedPipeHost = new WaliSharedPipeHost(memory, sharedPipeState, sharedFileClient ? undefined : localDescriptors, sharedFileClient);
@@ -530,11 +560,12 @@ export class BrowserWaliRuntime {
530
560
  const image = resolveWaliExec(runtimeFilesystem, path, readCStringArray(argvPointer), currentCwd());
531
561
  if (typeof image === "number")
532
562
  return BigInt(image);
533
- // A NULL envp is the process's own environment (see inheritEnvironment).
534
- const env = envPointer === 0 ? { ...options.env } : {};
563
+ // Linux treats NULL envp as an empty vector. A null-prototype record
564
+ // also retains names such as __proto__ without object setter rules.
565
+ const env = Object.create(null);
535
566
  for (const entry of readCStringArray(envPointer)) {
536
567
  const separator = entry.indexOf("=");
537
- if (separator > 0)
568
+ if (separator >= 0)
538
569
  env[entry.slice(0, separator)] = entry.slice(separator + 1);
539
570
  }
540
571
  sharedFileClient.prepareSpawn();
@@ -542,7 +573,7 @@ export class BrowserWaliRuntime {
542
573
  const stdin = exportPipe(0, "reader");
543
574
  const stdout = exportPipe(1, "writer");
544
575
  const stderr = exportPipe(2, "writer");
545
- const completion = options.forkState ?? createBrowserProcessSharedState();
576
+ const completion = options.execCompletion ?? options.forkState ?? createBrowserProcessSharedState();
546
577
  options.browserProcess.spawn({
547
578
  // The kernel's exec: the image changes, the process does not. The pid
548
579
  // and the parent go across, and the child numbers ITS children from
@@ -557,13 +588,17 @@ export class BrowserWaliRuntime {
557
588
  ...(filesystemPolicy ? { filesystemPolicy } : {}),
558
589
  ...(stdin ? { stdin } : {}), ...(stdout ? { stdout } : {}), ...(stderr ? { stderr } : {}),
559
590
  });
560
- if (options.forkState)
591
+ // An inherited image forwards the existing process completion to its
592
+ // successor. It owns no coordinator which needs keeping alive, and
593
+ // must not wait on a private record or publish an intermediate exit.
594
+ if (options.forkState || options.execCompletion)
561
595
  throw new WaliProcessReplaced();
562
596
  // A root owns the descriptor coordinator the replacement borrows.
563
597
  // Keep servicing it until completion; never resume the old guest image.
564
598
  const control = new Int32Array(completion.control);
565
599
  while (Atomics.load(control, 0) === 0)
566
600
  hostWait(control, 0, 0);
601
+ const exitCode = Atomics.load(control, 1);
567
602
  const patch = decodeProcessSnapshot(completion);
568
603
  releaseWaliSharedBuffers(completion.bufferLease, 2);
569
604
  if (patch) {
@@ -574,9 +609,10 @@ export class BrowserWaliRuntime {
574
609
  if (snapshot)
575
610
  options.browserProcess.restore?.(snapshot);
576
611
  }
577
- throw new WaliProcessExit(Atomics.load(control, 1));
612
+ throw new WaliProcessExit(exitCode);
578
613
  };
579
614
  const builtins = {
615
+ ...createWaliEnvironmentImports(options.env ?? {}, memory),
580
616
  __init: () => 0,
581
617
  __deinit: () => 0,
582
618
  __proc_exit: (status) => exit(Number(status)),
@@ -593,28 +629,14 @@ export class BrowserWaliRuntime {
593
629
  ? fileDescriptors.copyCString(Number(pointer), environmentFile, Number(size)) : 0,
594
630
  SYS_write: (fd, pointer, length) => emit(Number(fd), copyOut(Number(pointer), Number(length))),
595
631
  SYS_writev: (fd, iovPointer, iovCount) => {
596
- let written = 0n;
597
- for (let index = 0; index < Number(iovCount); index += 1) {
598
- const offset = Number(iovPointer) + index * 8;
599
- assertMemoryRange(memory(), offset, 8);
600
- const pointer = view().getUint32(offset, true);
601
- const length = view().getUint32(offset + 4, true);
602
- const result = emit(Number(fd), copyOut(pointer, length));
603
- if (result < 0n)
604
- return result;
605
- written += result;
606
- }
607
- return written;
632
+ const value = gatherWaliWriteVector(memory(), Number(iovPointer), Number(iovCount));
633
+ return typeof value === "bigint" ? value : emit(Number(fd), value);
608
634
  },
609
635
  SYS_exit: (status) => exit(Number(status), "SYS_exit"),
610
636
  SYS_exit_group: (status) => exit(Number(status), "SYS_exit_group"),
611
637
  SYS_getpid: () => BigInt(pid),
612
638
  SYS_getppid: () => BigInt(parentProcessId),
613
639
  SYS_gettid: () => BigInt(pid),
614
- SYS_getuid: () => 1000n,
615
- SYS_geteuid: () => 1000n,
616
- SYS_getgid: () => 1000n,
617
- SYS_getegid: () => 1000n,
618
640
  SYS_set_tid_address: () => BigInt(pid),
619
641
  SYS_sched_yield: () => 0n,
620
642
  SYS_sched_setscheduler: () => 0n,
@@ -692,13 +714,6 @@ export class BrowserWaliRuntime {
692
714
  }
693
715
  return tid;
694
716
  },
695
- SYS_clock_gettime: (clockId, pointer) => {
696
- const nowNanoseconds = clockNanoseconds(Number(clockId));
697
- if (nowNanoseconds === undefined)
698
- return -EINVAL;
699
- writeTimespec(view(), Number(pointer), nowNanoseconds);
700
- return 0n;
701
- },
702
717
  SYS_gettimeofday: (pointer) => {
703
718
  if (Number(pointer) !== 0) {
704
719
  const microseconds = BigInt(Math.floor(realtimeMilliseconds() * 1_000));
@@ -723,11 +738,26 @@ export class BrowserWaliRuntime {
723
738
  // epoll, eventfd, and timerfd. Root and pthread instances must share it:
724
739
  // Tokio passes waker descriptors across those instance boundaries.
725
740
  ...(networkHost ? networkHost.imports({ ...pipeImports, ...eventImports }) : eventImports),
726
- SYS_ioctl: (fd, request, argument) => sharedPipeHost.ioctl(Number(fd), Number(request))
727
- ?? fileDescriptors.ioctl(Number(fd), Number(request))
728
- ?? (kernelProcesses && options.terminal && fileDescriptors.stdioFd(Number(fd)) !== undefined
729
- && ((Number(request) >>> 0) === 0x540f || (Number(request) >>> 0) === 0x5410)
730
- ? kernelTerminalIoctl(kernelProcesses, memory(), Number(request), Number(argument)) : systemImports.SYS_ioctl(fileDescriptors.stdioFd(Number(fd)) ?? fd, request, argument)),
741
+ SYS_ioctl: (fd, request, argument) => {
742
+ if (fileDescriptors.terminalFd(Number(fd)) && (Number(request) >>> 0) === 0x541b)
743
+ return fileDescriptors.terminalAvailable(Number(argument));
744
+ if (networkHost?.isNetworkFd(Number(fd)))
745
+ return networkHost.ioctl(Number(fd), Number(request) >>> 0, Number(argument));
746
+ const operation = Number(request) >>> 0;
747
+ const stream = fileDescriptors.stdioFd(Number(fd));
748
+ if (stream === undefined || operation === 0x5421 || operation === 0x5451 || operation === 0x5450) {
749
+ return pipeImports.SYS_ioctl(fd, request, argument);
750
+ }
751
+ if (kernelProcesses && options.terminal) {
752
+ const settings = waliTerminalSettingsIoctl(kernelProcesses, memory(), operation, Number(argument));
753
+ if (settings !== undefined)
754
+ return settings;
755
+ }
756
+ if (kernelProcesses && options.terminal && (operation === 0x540f || operation === 0x5410)) {
757
+ return kernelTerminalIoctl(kernelProcesses, memory(), Number(request), Number(argument));
758
+ }
759
+ return systemImports.SYS_ioctl(stream, request, argument);
760
+ },
731
761
  // Every other prctl is a no-op, as the capability table advertises. ADR-0047's
732
762
  // handshake goes to the table that holds the files: the filesystem's host,
733
763
  // or this thread's own. After the spreads, since a threaded program's thin
@@ -770,20 +800,46 @@ export class BrowserWaliRuntime {
770
800
  const timed = !sampled || (spent.calls & (SAMPLE_EVERY - 1)) === 0;
771
801
  const began = timed ? performance.now() : 0;
772
802
  try {
773
- const result = waliCall(descriptor.name, () => handler(...args), args);
774
- options.onSyscallResult?.(descriptor.name, result);
775
- if (!jumps.isCapturing()) {
776
- // Linux pipe.c anon_pipe_write sends SIGPIPE to the writer as
777
- // well as returning EPIPE. Raise it in the calling guest, after
778
- // descriptor routing (including remote inherited descriptors),
779
- // before libc can turn the error into a builtin diagnostic.
780
- // send/sendto with MSG_NOSIGNAL do not use this write boundary.
781
- if (result === -32n && (descriptor.name === "SYS_write" || descriptor.name === "SYS_writev"))
782
- signalSelf(13);
783
- signalHost.deliver(result === -4n);
803
+ for (;;) {
804
+ const result = waliCall(descriptor.name, () => {
805
+ const request = descriptor.name === "SYS_ioctl" ? Number(args[1]) >>> 0 : 0;
806
+ const candidate = waliTerminalOperation(descriptor.name, request);
807
+ const terminal = (candidate !== undefined || descriptor.name === "SYS_ioctl")
808
+ && options.terminal && kernelProcesses && fileDescriptors.stdioFd(Number(args[0])) !== undefined;
809
+ const operation = terminal ? candidate : undefined;
810
+ if (operation && kernelProcesses) {
811
+ const access = waliTerminalAccess(kernelProcesses, options.processIdentity, signalHost, operation);
812
+ if (access !== 0n)
813
+ return access;
814
+ }
815
+ const value = handler(...args);
816
+ if ((descriptor.name === "SYS_open" || descriptor.name === "SYS_openat")
817
+ && typeof value === "bigint" && value >= 0n && fileDescriptors.terminalFd(Number(value))) {
818
+ const attached = kernelProcesses?.call("ttyopen") ?? (options.terminal ? 0n : -6n);
819
+ if (attached < 0n) {
820
+ pipeImports.SYS_close(value);
821
+ return attached;
822
+ }
823
+ }
824
+ return value;
825
+ }, args);
826
+ options.onSyscallResult?.(descriptor.name, result);
827
+ if (!jumps.isCapturing()) {
828
+ // Linux pipe.c anon_pipe_write sends SIGPIPE to the writer as
829
+ // well as returning EPIPE. Raise it in the calling guest, after
830
+ // descriptor routing (including remote inherited descriptors),
831
+ // before libc can turn the error into a builtin diagnostic.
832
+ // Socket send calls suppress the signal only with MSG_NOSIGNAL.
833
+ if (result === -32n && waliRaisesBrokenPipe(descriptor.name, args))
834
+ signalSelf(13);
835
+ const restart = signalHost.deliver(result === -4n);
836
+ if (result === -4n && restart && (RESTARTABLE_STREAM_CALLS.has(descriptor.name)
837
+ || waliTerminalOperation(descriptor.name, Number(args[1]) >>> 0) === "change"))
838
+ continue;
839
+ }
840
+ parkWaliStopped(options.processIdentity);
841
+ return result;
784
842
  }
785
- parkWaliStopped(options.processIdentity);
786
- return result;
787
843
  }
788
844
  finally {
789
845
  spent.calls += 1;
@@ -803,13 +859,7 @@ export class BrowserWaliRuntime {
803
859
  env,
804
860
  });
805
861
  if (options.forkState) {
806
- const snapshot = options.forkState.memory;
807
- bytes().set(new Uint8Array(snapshot));
808
- // This transferred image has one consumer. A live child needs its
809
- // restored memory, not a second full image retained by forkState.
810
- // The browser baseline supplies ES2024 transfer; this package's
811
- // declaration lib remains ES2023 for its other APIs.
812
- snapshot.transfer(0);
862
+ restoreWaliForkMemory(memory(), options.forkState);
813
863
  for (const [name, value] of Object.entries(options.forkState.globals)) {
814
864
  const global = instance.exports[name];
815
865
  if (!(global instanceof WebAssembly.Global))
@@ -817,7 +867,9 @@ export class BrowserWaliRuntime {
817
867
  global.value = value;
818
868
  }
819
869
  memoryManager.restoreFork(options.forkState.mappings);
820
- systemImports.SYS_umask(options.forkState.umask);
870
+ // The owner's copy of this table already holds the umask; only the local
871
+ // table needs it, so setting it is no round trip.
872
+ localFileImports.SYS_umask(options.forkState.umask);
821
873
  }
822
874
  else if (typeof instance.exports.asyncify_start_unwind === "function") {
823
875
  const stack = instance.exports.__stack_pointer;
@@ -869,6 +921,7 @@ export class BrowserWaliRuntime {
869
921
  ...(options.processIdentity ? { processIdentity: options.processIdentity } : {}),
870
922
  executablePath,
871
923
  argv,
924
+ env: options.env ?? {},
872
925
  cwd: fileDescriptors.currentWorkingDirectory(),
873
926
  stdioAliasRegistry: stdioAliasRegistry.buffer,
874
927
  sharedPipes: sharedPipeState,
@@ -879,7 +932,9 @@ export class BrowserWaliRuntime {
879
932
  ...(options.browserProcess?.filesystemPolicyVersion === 1 ? { childFilesystemPolicyVersion: 1 } : {}),
880
933
  ...(options.threadOutputPorts ? { outputPorts: options.threadOutputPorts } : {}),
881
934
  ...(stdin instanceof SharedWaliStdinReader ? { stdin: stdin.buffer } : {}),
935
+ ...(options.terminalStdin instanceof SharedWaliStdinReader ? { terminalStdin: options.terminalStdin.buffer } : {}),
882
936
  terminal: options.terminal === true,
937
+ ...(options.onTerminalOutput ? { onTerminalOutput: options.onTerminalOutput } : {}),
883
938
  onStdout: (chunk) => { emit(1, chunk); },
884
939
  onStderr: (chunk) => { emit(2, chunk); },
885
940
  ...(networkCoordinator ? { network: networkCoordinator } : {}),
@@ -898,6 +953,11 @@ export class BrowserWaliRuntime {
898
953
  let exitCode = 0;
899
954
  let replaced = false;
900
955
  const rootStackPointer = Number(instance.exports.__stack_pointer?.value ?? 0);
956
+ setWaliSignalInterruption(() => {
957
+ const words = signalHost.signals.words, generation = Atomics.load(words, 1);
958
+ return { pending: (signalHost.signals.pending() & ~signalHost.mask) !== 0n,
959
+ guards: [{ words, index: 1, value: generation }] };
960
+ });
901
961
  try {
902
962
  try {
903
963
  if (rewinding)
@@ -938,19 +998,26 @@ export class BrowserWaliRuntime {
938
998
  childWaitControls.set(forkResult, new Int32Array(control));
939
999
  if (registered < 0)
940
1000
  throw new Error(`Fork child registration failed: ${registered}`);
941
- const mask = Number(systemImports.SYS_umask(0));
942
- systemImports.SYS_umask(mask);
943
- options.onDiagnostic?.(`[WALI] fork snapshot: ${memory().buffer.byteLength} bytes, Asyncify stack ${view().getUint32(asyncifyData, true) - asyncifyData - 8} bytes.`);
1001
+ // Rewind reads the Asyncify data only up to its current position. With
1002
+ // the stack lowest in memory (layout.stackTop), below the stack pointer
1003
+ // is unused stack; one page under it is kept as margin.
1004
+ const stackPointer = Number(globals.__stack_pointer ?? 0);
1005
+ const unused = [{ start: view().getUint32(asyncifyData, true), end: view().getUint32(asyncifyData + 4, true) },
1006
+ ...(layout.stackTop !== undefined && stackPointer > 0 && stackPointer <= layout.stackTop
1007
+ ? [{ start: 0, end: stackPointer - 65_536 }] : [])];
1008
+ const snapshot = captureWaliForkMemory(memory(), threaded, unused);
1009
+ options.onDiagnostic?.(`[WALI] fork snapshot: ${memory().buffer.byteLength} bytes, payload ${snapshot.memory.byteLength} bytes, Asyncify stack ${view().getUint32(asyncifyData, true) - asyncifyData - 8} bytes.`);
1010
+ const forked = sharedFileClient.copyForForkChannel();
944
1011
  options.browserProcess.fork({
945
1012
  module, memoryLayout: layout, pid: forkResult, ...completion,
946
- descriptorTable: sharedFileClient.copyForForkChannel(),
1013
+ descriptorTable: forked.channel,
947
1014
  childPidAllocator: nextChildPid.buffer,
948
- argv, env: { ...options.env }, cwd: currentCwd(), executablePath,
1015
+ argv, env: { ...options.env }, cwd: forked.cwd, executablePath,
949
1016
  ...(filesystemPolicy ? { filesystemPolicy } : {}),
950
- forkState: { ...completion, memory: bytes().slice().buffer, globals,
1017
+ forkState: { ...completion, ...snapshot, globals,
951
1018
  allocator: memoryManager.allocatorControl().slice(0), mappings: memoryManager.forkSnapshot(),
952
1019
  signalState: forkSignals.state, signalMask: forkSignals.mask,
953
- asyncifyData, jumps: jumps.forkSnapshot(), umask: mask, parentPid: pid },
1020
+ asyncifyData, jumps: jumps.forkSnapshot(), umask: forked.umask, parentPid: pid },
954
1021
  });
955
1022
  rewinding = true;
956
1023
  asyncify("asyncify_start_rewind", asyncifyData);
@@ -974,6 +1041,7 @@ export class BrowserWaliRuntime {
974
1041
  }
975
1042
  finally {
976
1043
  // First, so a teardown step that throws cannot leave a process's pipe buffers held (review of 945655a).
1044
+ setWaliSignalInterruption(undefined);
977
1045
  forgetWaliSharedPipeState();
978
1046
  setWaliWaitPublisher(undefined);
979
1047
  threadPool?.terminate();
@@ -988,6 +1056,10 @@ export class BrowserWaliRuntime {
988
1056
  }
989
1057
  else
990
1058
  syncFilesystem();
1059
+ // Inherited images have no private filesystem to publish at exit.
1060
+ // Flush the one owner's writes before closing this image's table.
1061
+ if (inheritedDescriptors)
1062
+ inheritedDescriptors.prepareSpawn();
991
1063
  sharedFileClient?.closeProcess();
992
1064
  if (!sharedFileClient)
993
1065
  fileDescriptors.descriptors.exit();
@@ -1018,6 +1090,9 @@ export class BrowserWaliRuntime {
1018
1090
  };
1019
1091
  }
1020
1092
  }
1093
+ // Linux restarts interrupted blocking stream I/O when the handler has SA_RESTART.
1094
+ // Timeout-bearing poll/sleep/sigtimedwait calls are deliberately not retried here.
1095
+ const RESTARTABLE_STREAM_CALLS = new Set(["SYS_read", "SYS_write", "SYS_readv", "SYS_writev", "SYS_recv", "SYS_recvfrom", "SYS_recvmsg"]);
1021
1096
  /** The calls through which a process makes a child: fork, exec, the browser's spawn door, and the wait for one. */
1022
1097
  const CHILD_PROCESS_SYSCALLS = new Set(["SYS_fork", "SYS_execve", "SYS_browser_spawn", "SYS_browser_spawn_confined_v1", "SYS_wait4"]);
1023
1098
  /** A run longer than this prints where its time went (`[wali-profile]`). */
@@ -1067,23 +1142,6 @@ function concatenate(chunks) {
1067
1142
  }
1068
1143
  return result;
1069
1144
  }
1070
- function clockNanoseconds(clockId) {
1071
- if (clockId === 0) {
1072
- const milliseconds = typeof performance === "undefined"
1073
- ? Date.now() : performance.timeOrigin + performance.now();
1074
- return BigInt(Math.floor(milliseconds * 1_000_000));
1075
- }
1076
- if (clockId === 1 || clockId === 4) {
1077
- return BigInt(Math.floor(monotonicMilliseconds() * 1_000_000));
1078
- }
1079
- return undefined;
1080
- }
1081
- function writeTimespec(view, pointer, nanoseconds) {
1082
- if (pointer < 0 || pointer + 16 > view.byteLength)
1083
- throw new WebAssembly.RuntimeError("WALI timespec pointer is out of bounds.");
1084
- view.setBigInt64(pointer, nanoseconds / 1000000000n, true);
1085
- view.setBigInt64(pointer + 8, nanoseconds % 1000000000n, true);
1086
- }
1087
1145
  function fillRandom(destination) {
1088
1146
  if (!globalThis.crypto?.getRandomValues)
1089
1147
  throw new Error("Web Crypto is required for SYS_getrandom.");