@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 +61 -7
- package/THIRD-PARTY-NOTICES.md +3444 -6
- package/bin/python.wasm +0 -0
- package/lib/libpython3.14.a +2 -2
- package/lib/python3.14/__pycache__/_slicc_site.cpython-314.pyc +0 -0
- package/lib/python3.14/_slicc_site.py +36 -6
- package/lib/python3.14/ensurepip/__init__.py +7 -1
- package/lib/python3.14/ensurepip/__pycache__/__init__.cpython-314.pyc +0 -0
- package/lib/python3.14/site-packages/slicc-executable.pth +1 -1
- package/package.json +27 -1
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-
|
|
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.
|
|
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
|
|
57
|
-
|
|
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
|
|
76
|
-
|
|
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
|
|