Popeye Solver — third-party components and licensing ==================================================== 1. Popeye (vendor/py.js, vendor/py.wasm) ----------------------------------------- Popeye is a chess problem solving program. Upstream: https://github.com/thomas-maeder/popeye Licence: GNU General Public License, version 2. The full text is in COPYING, next to this file. Authors Popeye was begun in 1983 by Philippe Schnoebelen, in a Pascal dialect under MS-DOS, and converted to C by Norbert Geissler. Version 4.103 credits, in its own py-engl.txt: Thomas Maeder, Stephen Emmerson, Norbert Geissler, Torsten Linss, Elmar Bartel, Joshua Green, Mu-Tsun Tsai The files vendor/py.js and vendor/py.wasm are a compiled form of Popeye and are therefore covered by the GPL. Built from: tag v4.103 (commit 8bf65b054482cae04fc36e07c6b880fb4f93c673) toolchain Emscripten 6.0.9 command make -f makefile.unx TOOLCHAIN=emcc Changes made to the upstream source popeye-build/popeye-4.103-emscripten.patch holds every change, and there are only four. No C source file was touched; the patch is confined to the Emscripten toolchain description. a) toolchains/emcc/make.incl, makefile.unx, .gitignore Cherry-picked from upstream's own feature/emcc branch (commit 6a8b140d26cc6b41f9457ab15fafb871826f7dd6, pull request #549, "Improve Emscripten support"). Modernises the link flags and adds the generated .wasm to the clobber list. b) -sENVIRONMENT=worker -> -sENVIRONMENT=worker,node So the same build can be run from node for regression testing. c) -sMIN_SAFARI_VERSION=120000 -> 150000 Emscripten 6.0.9 refuses anything below 150000. d) OTHER += -Wno-c23-extensions Emscripten's clang is newer than the compilers upstream tests with and raises "enumerator value which exceeds the range of int" for optimisations/intelligent/proof.c, which upstream's -pedantic-errors turns into a hard error. Diagnostic only; no effect on code generation. Corresponding source GPL v2 section 3(a) asks that object code be accompanied by the complete corresponding source. It is here, shipped beside the binary: popeye-build/popeye-4.103-wasm-src.tar.gz That archive is upstream v4.103 with the patch already applied — the exact tree py.wasm was built from. Nothing else is needed; it does not depend on upstream staying reachable. To rebuild from it: tar xzf popeye-build/popeye-4.103-wasm-src.tar.gz cd popeye-4.103-wasm source /path/to/emsdk/emsdk_env.sh # Emscripten 6.0.9 make -f makefile.unx TOOLCHAIN=emcc The build writes py.js and py.wasm into the source root; those are the two files in vendor/. With Emscripten 6.0.9 the result is byte-for-byte identical to what ships here — verified, SHA-256: py.js c3a20d79dc7440d17104612d42fea20218a114c53d26698e603c284a27da4bf7 py.wasm ec9974550a7a34f63dd50669e3db8c646f52703c50f6ef36813aa9ce21069c3b popeye-build/popeye-4.103-emscripten.patch is the same change on its own, for reading rather than building. 2. Solution parser (vendor/solution-parser.js) ----------------------------------------------- Transpiled with esbuild from src/services/solutionParser.ts in the private repository chess-problems (same author as this page). TypeScript types were erased; nothing else was changed. Not third-party. 3. Piece artwork (vendor/pieces.js) ------------------------------------ The cburnett chess piece set, as SVG path data. Licence: BSD. Copied from chess-problems/local-experiments/anki-miniature/pieces.json and converted from JSON to an ES module so the page needs no extra fetch. 4. Board renderer (src/board.js) --------------------------------- Adapted from chess-problems/local-experiments/anki-miniature/board-svg.mjs (same author). Not third-party.