@ai-ecoverse/wasix-python 3.14.2-16 → 3.14.2-19

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.
package/README.md CHANGED
@@ -4,9 +4,9 @@ CPython 3.14 for slicc WASIX (`commands` `python` / `python3`).
4
4
 
5
5
  ## Features
6
6
 
7
- - PIE dynamic-main (`dylink.0`) on wasix-sysroot 2025.9.30-18's `sysroot-ehpic` (legacy wasm EH), SOABI `cpython-314-wasm32-wasix`; native side modules (py-numpy, py-scipy, py-pandas, …) load by `dlopen`
7
+ - PIE dynamic-main (`dylink.0`) on wasix-sysroot 2025.9.30-28's `sysroot-ehpic` (legacy wasm EH), SOABI `cpython-314-wasm32-wasix`; native side modules (py-numpy, py-scipy, py-pandas, …) load by `dlopen`
8
8
  - **File modes** (3.14.2-12, on slicc-kernel ≥ 1.35.1; older kernels keep the no-op modes): `os.umask`, `open()`/`os.mkdir` create modes, `os.chmod`, `tempfile.mkstemp` 600 / `mkdtemp` 700, pip console scripts 755
9
- - Built in: `ssl`/`hashlib` (OpenSSL 3.5.9, `@ai-ecoverse/wasix-openssl`), `zlib` 1.3.1, `bz2`, `lzma` (xz 5.8.4), `sqlite3` (3.53.4; FTS5, JSON, math, R*Tree; no WAL, no extensions), `readline` 8.3 (ncurses 6.5 terminfo compiled in: xterm, screen, tmux, vt100, linux), `ctypes` / `_ctypes` (wasix-org/libffi; needs slicc-kernel#306 step 1 for `call_dynamic` + `closure_{allocate,free}`), `mmap`, `fcntl`, `termios`, `resource`, `pwd`, `grp`, `select`
9
+ - Built in: `ssl`/`hashlib` (OpenSSL 3.5.9, `@ai-ecoverse/wasix-openssl`), `zlib` 1.3.1, `bz2`, `lzma` (xz 5.8.4), `sqlite3` (3.54.0; FTS5, JSON, math, R*Tree; no WAL, no extensions), `readline` 8.3 (ncurses 6.5 terminfo compiled in: xterm, screen, tmux, vt100, linux), `ctypes` / `_ctypes` (wasix-org/libffi; needs slicc-kernel#306 step 1 for `call_dynamic` + `closure_{allocate,free}`), `mmap`, `fcntl`, `termios`, `resource`, `pwd`, `grp`, `select`
10
10
  - No `fork`/`vfork`; `subprocess` via `os.posix_spawn` (`proc_spawn2`/`3`)
11
11
  - `os.getuid()`/`getgid()`/`getgroups()` and `pwd`/`grp` come from slicc-kernel's process credentials and its `/etc/passwd`/`/etc/group` (3.14.2-13, wasix-sysroot -20; slicc-kernel ≥ 1.44.0, no fallback: ids are -1 on older kernels). Root is uid 0 with home `/root`.
12
12
  - Advisory file locks (`flock`, `fcntl` F_SETLK*, `lockf`) are no-ops (Emscripten parity)
@@ -18,6 +18,52 @@ CPython 3.14 for slicc WASIX (`commands` `python` / `python3`).
18
18
 
19
19
  Since 3.14.2-12 the package is cross-built from source in CI (`build.sh`); see `THIRD-PARTY-NOTICES.md` for the statically linked libraries.
20
20
 
21
+ Since 3.14.2-19 (wasix-sysroot -28):
22
+ - signal masks are real: `signal.pthread_sigmask` blocks and unblocks
23
+ through slicc-kernel (≥ 1.88.0), a blocked signal stays pending
24
+ (`signal.sigpending()`) without running its handler or interrupting
25
+ `time.sleep`, and its handler runs once when it is unblocked. Up to
26
+ 3.14.2-18 `pthread_sigmask` raised `OSError(0, 'Error')`. Kernels
27
+ before 1.88.0 take wasix-sysroot -28's ENOSYS fallback (its README).
28
+ `signal.sigtimedwait`/`sigwaitinfo`/`sigwait` raise ENOSYS (slicc-kernel#520);
29
+ - `sqlite3` (3.54.0 since this release, 3.53.4 before) keeps its compile options; `PRAGMA compile_options` adds `MAX_SCHEMA=10000000`;
30
+ - `THIRD-PARTY-NOTICES.md` carries the licence text of every statically
31
+ linked component (see the license paragraph below).
32
+
33
+ Since 3.14.2-18:
34
+ - `ctypes.CDLL(None)` has no `fork` (nor `_Fork`, `__wasi_proc_fork`, …):
35
+ python.wasm no longer exports them (homescoop#296). In 3.14.2-17 calling
36
+ `ctypes.CDLL(None).fork()` crashed the interpreter (a wasm trap): fork needs
37
+ Asyncify on every frame between it and `main`, and ctypes' frames have none.
38
+ `os.fork` stays absent; `subprocess`, `os.posix_spawn` and `os.system` work
39
+ as before.
40
+
41
+ Since 3.14.2-17 (wasix-sysroot -27):
42
+ - `os.utime(path)`, `pathlib.Path.touch()` and everything else that sets a
43
+ file's times to "now" set them to now; up to 3.14.2-16 they set them to
44
+ 0 (1970) (wasix-sysroot's broken `utimensat(NULL)`, homescoop#294).
45
+ - `os.times()`, `resource.getrusage(RUSAGE_SELF)` and `time.clock`-style
46
+ callers report the process CPU time slicc-kernel keeps; system and
47
+ children's times are 0. Up to -16 they held wall-clock values.
48
+ - An empty path is `FileNotFoundError` (`os.stat("")`, `open("")`), as on
49
+ Linux; files have owners on slicc-kernel ≥ 1.59.0 with users on
50
+ (`os.chown`, `os.stat().st_uid`), and `os.access` asks the kernel
51
+ (≥ 1.63.0).
52
+ - **A system site directory every user shares:**
53
+ `/usr/local/lib/python3.14/site-packages` is added (with `site.addsitedir`,
54
+ so its `.pth` files run) after python's own site-packages and the py-*
55
+ packages it finds, when it exists. An embedder can drop a `.pth` there once
56
+ for every user. A virtual environment sees it only with
57
+ `--system-site-packages`, as on Linux.
58
+ - The py-* discovery cache is per user:
59
+ `${XDG_CACHE_HOME:-~/.cache}/slicc-site/`, never in the package directory
60
+ (which other users cannot write); without a home or a writable cache
61
+ directory there is no cache.
62
+ - `pip` and `pip3` are commands (`python3 -m pip`); `pip install --user`
63
+ installs into the user's own site-packages.
64
+ - `python -m venv` takes about half as long: ensurepip runs the package's own
65
+ compiled pip instead of pip from the zipped wheel.
66
+
21
67
  Since 3.14.2-16 (wasix-sysroot -22: the `slicc.libc` marker, no exported
22
68
  itimer helper):
23
69
  - ctypes calls variadic C functions (`printf`, `snprintf`, `sscanf`,
@@ -30,11 +76,11 @@ itimer helper):
30
76
  Pass `c_double` for `%f`: ctypes does not promote, and a variadic `c_float`
31
77
  raises `RuntimeError: ffi_prep_cif_var failed` (libffi rejects it, as on
32
78
  every platform).
79
+ 3.14.2-15 could not call them at all ("ffi_prep_cif_var failed").
33
80
  - Signals during blocking calls follow PEP 475 on slicc-kernel ≥ 1.53.3, which
34
81
  answers -22-marked programs with EINTR: a signal whose handler returns does
35
82
  not shorten `time.sleep`/`select`/`poll`, and ^C raises `KeyboardInterrupt`
36
83
  at once (`cert/signals.mjs`).
37
- 3.14.2-15 could not call them at all ("ffi_prep_cif_var failed").
38
84
 
39
85
  Since 3.14.2-15:
40
86
  - `ctypes` / `_ctypes` (wasix-org/libffi) — needs slicc-kernel ≥ 1.51.0 (#306 /
@@ -53,8 +99,8 @@ Since 3.14.2-15:
53
99
  and if the `wasix-python` it resolves to (Node's lookup from its real
54
100
  directory) is this python's exact version, so side modules never mix
55
101
  interpreter builds; the first package of a name wins. `python -v` reports
56
- what was skipped and why. The scan is cached in `.slicc-site-cache` in
57
- python's directory (keyed on the package directories and their
102
+ what was skipped and why. The scan is cached per user in
103
+ `${XDG_CACHE_HOME:-~/.cache}/slicc-site/` (since 3.14.2-17; keyed on the package directories and their
58
104
  `package.json` stamps; `-v` always rescans); with the cache, a start costs
59
105
  about 2 ms more than with discovery off, and less than the same directories
60
106
  on `PYTHONPATH`. As with `PYTHONPATH`, `.pth` files in those directories are
@@ -72,8 +118,16 @@ Since 3.14.2-14 (wasix-sysroot -21):
72
118
  a byte), and `os.get_terminal_size` and `isatty` answer per descriptor
73
119
  (slicc-kernel ≥ 1.48.0; older kernels keep the previous behaviour).
74
120
 
75
- The license is `PSF-2.0 AND GPL-3.0-or-later`, because GNU Readline is linked
76
- statically. Since 3.14.2-13, `time.tzset()` exists and honours POSIX `TZ` rules.
121
+ The license is `PSF-2.0 AND GPL-3.0-or-later`, because GNU Readline
122
+ (GPL-3.0-or-later) is linked statically: `bin/python.wasm` as a whole is a
123
+ combined work distributed under the GPL-3.0-or-later. CPython's PSF-2.0 and
124
+ the other linked components' licences are GPL-compatible. If you redistribute
125
+ `python.wasm`, or an application that bundles it, the GPL-3.0's terms apply to
126
+ it: redistributors pass on the Corresponding Source, which is the homescoop
127
+ repository at the release's commit plus the sha256-pinned upstream archives
128
+ its recipe lists; homescoop keeps those available. Since 3.14.2-19,
129
+ `THIRD-PARTY-NOTICES.md` has every linked component's licence text, not just a
130
+ table. Since 3.14.2-13, `time.tzset()` exists and honours POSIX `TZ` rules.
77
131
  The sysconfig records (`_sysconfigdata*`, `_sysconfig_vars*.json`) carry no
78
132
  build-machine paths, host compilers or private stub archives.
79
133