From d4330a8f85b2178e694fdc96aeb7979db47c3923 Mon Sep 17 00:00:00 2001 From: tannevaled Date: Sun, 1 Nov 2026 03:52:43 +0100 Subject: [PATCH] Document the plan9 port (386, amd64, arm) rbgo now compiles and vets for plan9; the conformance page lists it among the compile-on-every-target pairs and states what works and what raises there. Nothing runs on Plan 9 in CI. Refs go-embedded-ruby/ruby#832 Co-Authored-By: Claude Opus 5.5 --- content/en/conformance.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/content/en/conformance.md b/content/en/conformance.md index 6c52adc..fdddab8 100644 --- a/content/en/conformance.md +++ b/content/en/conformance.md @@ -74,15 +74,24 @@ On top of the oracle, the interpreter holds a hard CI gate: IO's position is a Go `int`, so on 32-bit targets it stops at 2**31-1; - a **compile on every target** job (since v0.8.3) runs `go vet`, default and `rbgo_core` builds, for every GOOS/GOARCH pair `go tool dist list` names - except plan9: aix, android, darwin, dragonfly, freebsd, illumos, ios, js, - linux (all 13 arches), netbsd, openbsd, solaris, wasip1, windows. It only - compiles. Where modernc.org/sqlite has no port (linux/mips*, linux/ppc64, AIX, + (plan9 since v0.8.5): aix, android, darwin, dragonfly, freebsd, illumos, ios, + js, linux (all 13 arches), netbsd, openbsd, plan9 (386, amd64, arm), solaris, + wasip1, windows. It only compiles. Where modernc.org/sqlite has no port (linux/mips*, linux/ppc64, AIX, Solaris, illumos, DragonFly, most NetBSD and OpenBSD arches), the store gems (SQLite3, Sequel, ActiveRecord's adapter, Bolt, Bleve, Etcd, Confd) load but raise `NotImplementedError` on use; Errno names and `Process::RLIMIT_*` constants a system lacks follow MRI (a `NOERROR` constant, or no constant). - plan9 does not compile: its `syscall` package has no errno numbers and no - `Kill`, `Flock`, `Getrlimit` or `Stat_t`; + plan9 (since v0.8.5) compiles and vets but **nothing runs there in CI**, as no + lane has a Plan 9 kernel. Its `syscall` package has no errno numbers and no + `Kill`, `Flock`, `Getrlimit`, `Umask` or `Stat_t`, so: `Errno::Exxx::Errno` + carries the Linux number and a failed call's error string is mapped to a class + by the Go standard library's rules (an unrecognised string raises a plain + `SystemCallError`); `Process.kill` writes a note to `/proc//note`; + `Process.getrlimit` and the other POSIX process calls, and `File#flock`, raise + `NotImplementedError`; `File::Stat` is built from the Plan 9 `Dir`; and the + NATS, Kafka and Parquet gems (whose drivers do not build there) load but raise + `NotImplementedError` on use. The string mapping is pure Go and unit-tested on + every platform; - a **`wasip1/wasm`** lane builds the interpreter and runs it under wazero; - with **every feature differential-tested against MRI 4.0.5**.