Skip to content

v0.0.7 - Process OS primitives, self-hosting, and a numerical leap (CPU sharding + GPU)

Choose a tag to compare

@eddmpython eddmpython released this 13 Jul 11:45

Cumulative release of this line since v0.0.6. Everything is additive (no changes or removals to the existing public surface); consumers pin by commit SHA, so nothing breaks. Default Pyodide stays v314.0.2.

browser-os primitives P1-P7 (all browser-measured)

  • KernelElection: leader election via Web Locks + BroadcastChannel RPC + journal failover (the OS survives a tab dying)
  • JobControl: expr & forks the live interactive namespace onto another core (prompt returns immediately; %jobs / %fg / %kill)
  • PyProc flow IPC: pipe / lock / semaphore / shm (SAB ring buffer, 982 MB/s, real blocking read + backpressure)
  • MachineContainer: machine-in-machine (a container kernel in a worker, depth 2, exposed as a Python value)
  • MachineJail: permission jail (a cooperative chokepoint plus the browser's own connect-src CSP wall)
  • DeviceFs fsWorld v2: /proc/<pid>/ctl (write = signal), /dev/fb0 framebuffer, /dev/random, /var/log

engine-independence

  • Self-hosting (npm run fetch:engine): serve the whole distribution from vendor/, boot with boot({indexURL:"/vendor/pyodide/"}) and zero CDN
  • Snapshot pre-manufacture wall mapped (the wall is loadPackage, not dlopen)

Onboarding

  • checkEnvironment(): diagnoses crossOriginIsolated / SAB / JSPI with actionable fixes. Reaching for the process OS without the headers now gives a clear error instead of a cryptic SharedArrayBuffer is not defined

Numerical leap (closing the numpy ~86x gap in two lanes)

  • PyProc.matmul: CPU sharding (row-block distribution), compute-bound near-linear, 2.48x end-to-end, exact
  • GpuCompute / GpuArray / GpuBridge: WebGPU compute with residency handles (upload once, chain matmul / map on the GPU, download once). Large f32 matmul measured 109x vs WASM numpy on a real GPU; Runtime.enableGpu() drives it from Python (pyprocGpu.matmul on numpy arrays, 92x). f32 only (WGSL has no f64); needs a windowed browser with a GPU (headless SKIPs)

New public surface (all additive)

checkEnvironment, SocketBridge, MachineContainer, JobControl, KernelElection, MachineJail, GpuCompute, GpuArray, GpuBridge + PyProc.matmul / exec / repl / pipe / lock / semaphore / shm + DeviceFs.track + Runtime.enableSocketBridge / enableGpu

Gates

Structure 455 + core browser 40/40 + wasiGate 10/10 + examples 5/5 + real-GPU probes all green.

Chromium / Edge only (JSPI + SharedArrayBuffer + crossOriginIsolated). The process OS and sockets need COOP/COEP headers; the GPU lane needs a windowed browser with a GPU.


한국어

v0.0.6 이후 이 라인의 누적 릴리즈. 전부 additive(기존 공개 표면 시그니처 변경·제거 없음), 소비자는 SHA 핀이라 즉시 깨지지 않는다. 기본 Pyodide v314.0.2 불변.

browser-os 근본 프리미티브 P1~P7(전부 브라우저 실측): KernelElection(Web Locks 선출 + 저널 failover = 탭 죽음 생존), JobControl(expr &로 살아있는 네임스페이스 fork), PyProc 흐름 IPC(pipe/lock/semaphore/shm, 982MB/s), MachineContainer(머신 안 머신), MachineJail(권한 감옥 = 협조 + CSP 벽), DeviceFs fsWorld v2(/proc//ctl, /dev/fb0, /dev/random, /var/log).

engine-independence: 자가 호스팅(npm run fetch:engine + boot({indexURL:"/vendor/pyodide/"})로 CDN 0), 스냅샷 사전 제조 벽 좌표 실측.

소비자 온보딩: checkEnvironment()가 crossOriginIsolated/SAB/JSPI 진단 + 실행 가능한 조치(암호 실패 대신 친절한 에러).

수치 성능 도약(numpy 86배를 두 레인으로): PyProc.matmul(CPU 샤딩, 종단 2.48배), GpuCompute/GpuArray/GpuBridge(WebGPU 잔류 핸들, f32 대규모 matmul 실 GPU 109배, Runtime.enableGpu()로 파이썬 numpy 직결 92배. f32 한정, 창 있는 브라우저 + GPU 필요).

Chromium/Edge 전용. 프로세스 OS·소켓은 COOP/COEP 헤더, GPU 레인은 창 있는 브라우저 + GPU 필요.