1DOLLY 72PACKAGE python3REQUIRES HOST runtime@04REQUIRES HOST dso@05REQUIRES HOST http@06REQUIRES HOST sockets@078FROM /v0.1.4/Dollyfile-system 915c71d4ce772989e3076060967824e48ccd6a1a6259624fe6213542df088dbc9USE /v0.1.4/Dollyfile-libdolly-sockets 53258b5e913671f33fe70294b3ae9f164f2c38e68c13c45b7e5ba29e4526c49710USE /v0.1.4/demos/tools/Dollyfile-sqlite acf076d29343fc13c102b4b642714564182fb3a14eaba57a9921503f7ec83a1911USE /v0.1.4/demos/tools/Dollyfile-bzip2 9cfdf6c3cad66c99f5fab4905323ffdfd7298745577c5224f99bcb976468e84c12USE /v0.1.4/demos/tools/Dollyfile-xz 97034a7e8088aba5b63ff0a5f8fea7b42e7e44c88c69ea20e23ad165ae1e658d1314REQUIRES HEADER curl15REQUIRES HEADER dso16REQUIRES HEADER libc17REQUIRES HEADER runtime18REQUIRES HEADER zlib19REQUIRES HEADER sqlite320REQUIRES HEADER bzlib21REQUIRES HEADER lzma22REQUIRES LIB curl23REQUIRES LIB z24REQUIRES LIB sqlite325REQUIRES LIB bz226REQUIRES LIB lzma27REQUIRES TOOL ar28REQUIRES TOOL cc29REQUIRES TOOL c++30REQUIRES TOOL cp31REQUIRES TOOL make32REQUIRES TOOL mkdir33REQUIRES TOOL mv34REQUIRES TOOL rm35REQUIRES TOOL tar36REQUIRES TOOL test37REQUIRES TOOL touch3839INSTALL /v0.1.4/demos/python/Dollyfile-libffi 5e6a33f1ebf1a038fb1799089b2f806acb35df54f315c1b140a544e78c92c7fc40EXPORTS LIB ffi /usr/lib/libffi.a41EXPORTS HEADER /usr/include/ffi.h42EXPORTS HEADER /usr/include/ffitarget.h43FILE /usr/share/licenses/libffi/LICENSE4445FILE /usr/share/licenses/sqlite/blessing46FILE /usr/share/licenses/bzip2/LICENSE47FILE /usr/share/licenses/xz/COPYING48FILE /usr/share/licenses/xz/COPYING.0BSD49REQUIRES HEADER http50REQUIRES HEADER ffi51REQUIRES HEADER ffitarget52REQUIRES LIB ffi53REQUIRES TOOL gzip54555657EXPORTS ENV PYTHONDONTWRITEBYTECODE 15859606162SOURCE /v0.1.4/dist/static/python/cpython.tar.gz 144cb80ac66c69736e4c9c387df6f2fb3c51e70a6e27cfdfe1ad50f20e989c71 /tmp/cpython.tar.gz6364SLOP gzip -dc /tmp/cpython.tar.gz | tar -xf - -C /6566SOURCE /v0.1.4/dist/static/python/runtimes/cpython-platform.c 20c5c120f835ce94ceb9be08cc25c4623ae333d844b2d3c3098ffed36f3b41eb /usr/src/python/Python/dolly_platform.c67SOURCE /v0.1.4/dist/static/python/runtimes/cpython-extension-check.c 1763ec04e582beee6066af81c93fe20e8cf0d83ae7d41d935b395c5cb3cdf071 /usr/src/python/Modules/dolly_extension_check.c68SOURCE /v0.1.4/dist/static/python/runtimes/cpython-socket-stubs.c 2aebdbdf3722dfa79f7b7eeb178b4beae2894a3d35ef12501054fb667342b335 /usr/src/python/Modules/dolly_socket_stubs.c69SOURCE /v0.1.4/dist/static/python/runtimes/cpython-http.c 13610f3322a4d09aa558e5d31523a082303835bf7c5981557c09443562cdc2da /usr/src/python/Modules/dolly_http.c70SOURCE /v0.1.4/dist/static/python/runtimes/cpython-transport.py 4567a855ff8459f6671c770dd69d93c84870bef3acd272f11ca28a394c9be92d /usr/src/python/Lib/_dolly_transport.py71SOURCE /v0.1.4/dist/static/python/runtimes/cpython-process.c 9dfbbe0c2de367d829b4fec488ff4e17488324c4cc4c750b34de2c82547fb943 /usr/src/python/Modules/dolly_process.c72SOURCE /v0.1.4/dist/static/python/runtimes/cpython-subprocess.py cabc2b4eb15e61332c2b63454724c3b390c5f2a2f0effa2889861e123835b785 /usr/src/python/Lib/_dolly_subprocess.py7374SLOP CWD /usr/src/python touch \75 Python/frozen_modules/*.h767778798081SLOP CWD /usr/src/python cc \82 -c \83 -O0 \84 -std=c11 \85 -fno-builtin \86 -fno-strict-aliasing \87 -IInclude/internal \88 -IInclude/internal/mimalloc \89 -IObjects \90 -IInclude \91 -IPython \92 -I. \93 -DPy_BUILD_CORE \94 Python/tracemalloc.c \95 -o Python/tracemalloc.o96SLOP CWD /usr/src/python cc \97 -c \98 -O0 \99 -std=c11 \100 -fno-builtin \101 -fno-strict-aliasing \102 -IInclude/internal \103 -IInclude/internal/mimalloc \104 -IObjects \105 -IInclude \106 -IPython \107 -I. \108 -DPy_BUILD_CORE \109 Modules/arraymodule.c \110 -o Modules/arraymodule.o111SLOP CWD /usr/src/python cc \112 -c \113 -O0 \114 -std=c11 \115 -IInclude/internal \116 -IInclude/internal/mimalloc \117 -IObjects \118 -IInclude \119 -IPython \120 -I. \121 -DPy_BUILD_CORE \122 Python/dolly_platform.c \123 -o Python/dolly_platform.o124SLOP CWD /usr/src/python cc \125 -c \126 -O0 \127 -std=c11 \128 -IInclude/internal \129 -IInclude/internal/mimalloc \130 -IObjects \131 -IInclude \132 -IPython \133 -I. \134 -DPy_BUILD_CORE \135 -DDATE='"Jan 01 1970"' \136 -DTIME='"00:00:00"' \137 Modules/getbuildinfo.c \138 -o Modules/getbuildinfo.o139SLOP CWD /usr/src/python cc \140 -c \141 -O0 \142 -std=c11 \143 -IInclude/internal \144 -IInclude/internal/mimalloc \145 -IObjects \146 -IInclude \147 -IPython \148 -I. \149 -DPy_BUILD_CORE \150 -DPLATFORM='"dolly"' \151 Python/getplatform.c \152 -o Python/getplatform.o153SLOP CWD /usr/src/python cc \154 -c \155 -O0 \156 -std=c11 \157 -IInclude/internal \158 -IInclude/internal/mimalloc \159 -IObjects \160 -IInclude \161 -IPython \162 -I. \163 -DPy_BUILD_CORE \164 -DABIFLAGS='""' \165 -DMULTIARCH='"dolly_0_wasm64"' \166 Python/sysmodule.c \167 -o Python/sysmodule.o168SLOP CWD /usr/src/python cc \169 -c \170 -O0 \171 -std=c17 \172 Modules/dolly_socket_stubs.c \173 -o Modules/dolly_socket_stubs.o174SLOP CWD /usr/src/python make \175 -o configure \176 -o config.status \177 -o Makefile.pre \178 -o Makefile \179 -o Modules/config.c \180 -o Modules/getbuildinfo.o \181 -o Python/getplatform.o \182 -o Python/sysmodule.o \183 -o Python/tracemalloc.o \184 -o Modules/arraymodule.o \185 python \186 libpython3.14.a \187 SHELL=/bin/slop \188 CC=cc \189 LINKCC=cc \190 AR=ar \191 BLDSHARED=cc\ -shared \192 INSTSONAME=libpython3.14.a \193 DYNLOADFILE=dynload_shlib.o \194 PY_CFLAGS=-O2\ -std=c11\ -fno-builtin\ -fno-strict-aliasing \195 PY_CFLAGS_NODIST= \196 PY_CPPFLAGS=-IInclude/internal\ -IInclude/internal/mimalloc\ -IObjects\ -IInclude\ -IPython\ -I. \197 CFLAGSFORSHARED= \198 PY_CORE_LDFLAGS= \199 LDFLAGS= \200 LINKFORSHARED=-rdynamic \201 MODULE_MATH_LDFLAGS= \202 MODULE_CMATH_LDFLAGS= \203 MODULE__STATISTICS_LDFLAGS= \204 MODULE__DATETIME_LDFLAGS= \205 MODULE_PYEXPAT_LDFLAGS=Modules/expat/libexpat.a \206 MODULE__SOCKET_CFLAGS=-Dfreeaddrinfo=dolly_py_freeaddrinfo\ -Dgai_strerror=dolly_py_gai_strerror\ -Dgetaddrinfo=dolly_py_getaddrinfo\ -Dgethostbyaddr=dolly_py_gethostbyaddr\ -Dgethostname=dolly_py_gethostname\ -Dgetnameinfo=dolly_py_getnameinfo\ -Dgetprotobyname=dolly_py_getprotobyname\ -Dgetservbyport=dolly_py_getservbyport\ -Dhtonl=dolly_py_htonl\ -Dif_freenameindex=dolly_py_if_freenameindex\ -Dif_indextoname=dolly_py_if_indextoname\ -Dif_nameindex=dolly_py_if_nameindex\ -Dif_nametoindex=dolly_py_if_nametoindex\ -Dinet_aton=dolly_py_inet_aton\ -Dinet_ntop=dolly_py_inet_ntop\ -Dinet_pton=dolly_py_inet_pton\ -Dntohl=dolly_py_ntohl\ -Dpoll=dolly_py_poll \207 MODULE_BINASCII_CFLAGS=-DUSE_ZLIB_CRC32 \208 MODULE_BINASCII_LDFLAGS=-lz \209 MODULE_ZLIB_CFLAGS= \210 MODULE_ZLIB_LDFLAGS=-lz \211 MODULE__CTYPES_CFLAGS=-DHAVE_FFI_PREP_CIF_VAR\ -DHAVE_FFI_PREP_CLOSURE_LOC\ -DHAVE_FFI_CLOSURE_ALLOC \212 MODULE__CTYPES_LDFLAGS=-lffi \213 LIBS=-ldolly-sockets \214 SYSLIBS= \215 LIBM= \216 LIBC= \217 SHLIBS= \218 MACHDEP_OBJS=Python/dolly_platform.o\ Modules/dolly_socket_stubs.o \219 DTRACE=220221222223224225SLOP mkdir \226 -p \227 /usr/lib/python3.14 \228 /usr/lib/python3.14/lib-dynload229SLOP cp \230 -R \231 /usr/src/python/Lib/. \232 /usr/lib/python3.14233SLOP test \234 -f \235 /usr/lib/python3.14/encodings/__init__.py236SLOP cp \237 /usr/src/python/libpython3.14.a \238 /usr/lib/libpython3.14.a239SLOP mv \240 /usr/src/python/python \241 /usr/bin/python242SLOP ln -sf python /usr/bin/python3243SLOP mkdir \244 -p \245 /usr/include/python3.14246SLOP cp \247 -R \248 /usr/src/python/Include/. \249 /usr/include/python3.14250SLOP cp \251 /usr/src/python/pyconfig.h \252 /usr/include/python3.14/pyconfig.h253SLOP CWD /usr/src/python slop \254 -c \255 'export _PYTHON_PROJECT_BASE=/usr/src/python; python -m sysconfig --generate-posix-vars'256SLOP cp \257 /usr/src/python/build/lib.dolly_0-wasm64-3.14/_sysconfigdata__dolly_dolly_0_wasm64.py \258 /usr/lib/python3.14/_sysconfigdata__dolly_dolly_0_wasm64.py259SLOP mkdir \260 -p \261 /usr/lib/python3.14/config-3.14-dolly_0_wasm64262SLOP cp \263 /usr/src/python/Makefile \264 /usr/lib/python3.14/config-3.14-dolly_0_wasm64/Makefile265SLOP cc \266 -shared \267 -O0 \268 -std=c17 \269 -I/usr/include/python3.14 \270 /usr/src/python/Modules/dolly_extension_check.c \271 -o /usr/lib/python3.14/lib-dynload/dolly_extension_check.cpython-314-dolly_0_wasm64.so272273EXPORTS TOOL python274EXPORTS TOOL python3275EXPORTS ENV PYTHONUTF8 1276EXPORTS LIB python /usr/lib/libpython3.14.a277EXPORTS HEADER /usr/include/python3.14278279SLOP python \280 --version281SLOP python \282 -c 'import pathlib; p = pathlib.Path("/tmp/python-check.txt"); p.write_text("PYTHON-WASM64"); assert p.read_text() == "PYTHON-WASM64"'283SLOP python \284 -c 'import dolly_extension_check; assert dolly_extension_check.answer() == 42'285SLOP python \286 -c 'import mmap, pathlib; p = pathlib.Path("/tmp/mmap-check"); p.write_bytes(b"DOLLY"); f = p.open("rb"); m = mmap.mmap(f.fileno(), 5, access=mmap.ACCESS_READ); assert m[:] == b"DOLLY"; m.madvise(mmap.MADV_SEQUENTIAL); m.close(); f.close()'287SLOP python \288 -c 'import sysconfig; assert sysconfig.get_platform() == "dolly_0-wasm64"; assert sysconfig.get_config_var("EXT_SUFFIX") == ".cpython-314-dolly_0_wasm64.so"'289SLOP python \290 -c 'import os, subprocess; assert subprocess.check_output(["echo", "spawn-ok"], text=True).strip() == "spawn-ok"; assert subprocess.check_output(["python", "-c", "print(6 * 7)"], text=True).strip() == "42"; child_env = dict(os.environ, DOLLY_CHILD_ENV="explicit"); assert subprocess.check_output(["python", "-c", "import os; print(os.environ[\"DOLLY_CHILD_ENV\"])"] , env=child_env, text=True, timeout=1).strip() == "explicit"'291SLOP python \292 -c 'import threading; seen = []; worker = threading.Thread(target=seen.append, args=(42,)); worker.start(); worker.join(); assert seen == [42] and not worker.is_alive()'293SLOP python \294 -c 'import hashlib; assert hashlib.md5(b"abc", usedforsecurity=False).hexdigest() == "900150983cd24fb0d6963f7d28e17f72"'295SLOP python \296 -c 'import ctypes; libc = ctypes.CDLL(None); libc.strlen.argtypes = [ctypes.c_char_p]; libc.strlen.restype = ctypes.c_size_t; assert libc.strlen(b"dolly") == 5; callback_type = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int); callback = callback_type(lambda value: value + 1); assert callback(41) == 42'297SLOP python \298 -c 'import locale, sys; assert sys.flags.utf8_mode == 1; assert locale.getpreferredencoding(False).lower() == "utf-8"; assert sys.getfilesystemencoding().lower() == "utf-8"'299SLOP python \300 -c 'from pathlib import Path; p = Path("/tmp/python-header-check/check.cpp"); p.parent.mkdir(); p.write_text("#include <Python.h>\nint python_header_check = 42;\n", encoding="utf-8")'301SLOP c++ \302 -c \303 -std=c++17 \304 -I/usr/include/python3.14 \305 /tmp/python-header-check/check.cpp \306 -o /tmp/python-header-check/check.o307SLOP python \308 -c 'import os, sys, termios, tty; assert not os.isatty(0); assert sys.stdin.buffer.read(1) == b""'309310FILE /usr/share/licenses/cpython/LICENSE311312FILE /usr/share/licenses/cpython/DOLLY-CHANGES313 Dolly's changes to CPython: cpython-dolly.patch ports posixmodule, getpath,314 faulthandler, the thread stubs, subprocess, threading, site, platform,315 sysconfig, uuid, ctypes.util and the pager to sys.platform "dolly", where316 processes use Dolly's spawn and wait, there is no fork and thread targets317 run serially. Built-in modules added by Dolly carry HTTP through the318 browser's broker (_dolly_http, _dolly_transport), fail name resolution319 and ssl explicitly, and run libffi over process-local calls. The patched source is320 published beside this image as dist/static/python/cpython.tar.gz.321EXPORTS FOLDER python-stdlib /usr/lib/python3.14322323SLOP rm \324 -rf \325 /tmp/cpython.tar.gz \326 /tmp/mmap-check \327 /tmp/python \328 /tmp/python-header-check \329 /tmp/python-check.txt \330 /usr/lib/python3.14/test \331 /usr/src/python332REQUIRES TOOL python333334335SLOP python \336 /usr/lib/python3.14/ensurepip/_bundled/pip-26.2.1-py3-none-any.whl/pip \337 install \338 --no-compile \339 --no-index \340 --disable-pip-version-check \341 --root-user-action=ignore \342 /usr/lib/python3.14/ensurepip/_bundled/pip-26.2.1-py3-none-any.whl343FOLDER /usr/lib/python3.14/site-packages344EXPORTS TOOL pip345EXPORTS TOOL pip3346347348349INSTALL /v0.1.4/Dollyfile-cc dadb1af6ae3450a3a48bf4c955fe40d012a9a20d6dc3eca63c4f2737ab4080cc350351352353354355356FILE /etc/pip.conf357 [global]358 disable-pip-version-check = true359 root-user-action = ignore360 progress-bar = off361 config-settings = setup-args=-Dbuildtype=debug362363SLOP python \364 -c 'import urllib.request; assert urllib.request.HTTPHandler.__module__ == "_dolly_transport"'365SLOP pip \366 --version367FILE /usr/share/man/cat1/python3.1368 python3, python, pip: CPython and pip, with the cc package pip builds native369 packages with.370 371 python3 SCRIPT runs a script; python3 alone, the prompt372 pip install PACKAGE installs a wheel or builds an sdist373 374 An sdist with C code is compiled by cc. One built with Meson (NumPy,375 Pandas) needs Ninja too: amy install ninja. Its settings for every sdist are376 in /etc/pip.conf. urllib.request and requests send through the page's HTTP377 broker and its policy. sys.platform is "dolly"; Emscripten and Pyodide378 wheels do not fit it. Upstream's documentation: https://docs.python.org/3/379