Implement researched Guix package outcome for #52: [Guix packaging] aap/pdp6 #613

Closed
opened 2026-08-25 15:27:04 +00:00 by htayj · 2 comments
htayj commented 2026-08-25 15:27:04 +00:00 (Migrated from github.com)

Context

This delivery ticket was created from research issue #52 ([Guix packaging] aap/pdp6).

The host-validated research finding follows:

Canonical upstream is https://github.com/aap/pdp6, fixed as version 0-2645ed9 at commit 2645ed907d0267710866fd8228863ce8867f4dc6 (the pinned master snapshot, commit date 2026-03-19); use the existing Guix codeload source origin and hash recorded by larsbrinkhoff-pdp6-source in tay/packages/larsbrinkhoff-n-s.scm: https://codeload.github.com/aap/pdp6/tar.gz/2645ed907d0267710866fd8228863ce8867f4dc6, base32 0n9mg2qz85vcmpn5az9jw5i8xa6rc5h35pmhch8jbxx3rz9gvm9i. LICENSE at that exact revision grants MIT permission to use, modify, and redistribute the source and associated documentation. The exact revision has no .gitmodules file and no gitlink entries, so the only independently fetched upstream origin is aap/pdp6 itself; there is no separately fetched submodule whose license must be supplied. The external Guix build inputs are sdl2 (Modified BSD), sdl2-image (Zlib), and native pkg-config (GPL-2-or-later); pthread and libm come from the normal GNU build environment. The source-buildable host target is emu/pdp6: its pinned emu/Makefile has a concrete custom make recipe equivalent to make -C emu pdp6 and requires gcc, sdl2-config, pkg-config SDL2_image, pthread, and libm. Use gnu-build-system with the configure phase deleted, build only that target, and install the resulting C SDL2 host emulator. Do not select newemu: its pinned Makefile names newemu/ttytelnet.c, which is absent at the same revision; do not build emu/pdp6_s, emu/pdp6_n, fe6, panel, or other serial, network, FPGA, and cross-hardware paths. The local channel already has larsbrinkhoff-pdp6-source at this exact revision, but guix search and the local package inventory contain no equivalent installable package for this upstream origin. Implement module (tay packages pdp6) with public package name pdp6, inheriting that source snapshot, inputs sdl2, sdl2-image, and bash-minimal, native input pkg-config, and the implicit GCC/make toolchain. Install the binary under a private libexec runtime root and provide a bin/pdp6 launcher that changes directory to that root before exec. Ship a controlled init.ini containing only the local defaultconfig device and bus/memory setup from emu/emu.c (APR, TTY, paper-tape reader/punch, DC/DECtape, fast/core memory and connect lines), with no netmem or netcons commands and no mount directives; do not ship the stock init.ini because it attempts localhost:10007 and references absent dump/tape paths. The launcher must therefore start the graphical SDL virtual console from any caller directory without writing to the store, while excluding hardware serial, standalone-panel, FPGA, and network setup. Acceptance is: guix lint -L. pdp6 and guix build -L. pdp6 both succeed; then run the installed launcher in an isolated Guix container with no -N network permission, no device bindings, a fresh HOME/XDG tree, Xvfb :99 -screen 0 1399x740x24 -nolisten tcp, DISPLAY=:99, SDL_VIDEODRIVER=x11, SDL_AUDIODRIVER=dummy, SDL_JOYSTICK_DISABLED=1, and strace -f -e trace=network. Poll xwininfo -root -tree until it finds the window title PDP-6 console, terminate the emulator, and require the trace to contain no AF_INET or AF_INET6 calls; this proves the packaged host UI starts on a local display under network isolation without the excluded FPGA or network paths. This is a delivery brief and source audit, not a claim that the package has already passed lint, build, or runtime proof.

Acceptance criteria

  • Implement the viable package change identified in the host-validated research finding.
  • Preserve Guix source provenance, licensing, and deterministic build requirements recorded in the finding.
  • Add and pass a package-specific safe smoke proof using isolated HOME/XDG state before closure.

Imported from GitHub issue/PR. Originally posted by htayj on 2026-08-25T15:27:04Z.

<!-- goocastle-implementation-ticket:sequential-reviewer:52:1:implementation-ready --> ## Context This delivery ticket was created from research issue #52 ([Guix packaging] aap/pdp6). The host-validated research finding follows: Canonical upstream is https://github.com/aap/pdp6, fixed as version 0-2645ed9 at commit 2645ed907d0267710866fd8228863ce8867f4dc6 (the pinned master snapshot, commit date 2026-03-19); use the existing Guix codeload source origin and hash recorded by larsbrinkhoff-pdp6-source in tay/packages/larsbrinkhoff-n-s.scm: https://codeload.github.com/aap/pdp6/tar.gz/2645ed907d0267710866fd8228863ce8867f4dc6, base32 0n9mg2qz85vcmpn5az9jw5i8xa6rc5h35pmhch8jbxx3rz9gvm9i. LICENSE at that exact revision grants MIT permission to use, modify, and redistribute the source and associated documentation. The exact revision has no .gitmodules file and no gitlink entries, so the only independently fetched upstream origin is aap/pdp6 itself; there is no separately fetched submodule whose license must be supplied. The external Guix build inputs are sdl2 (Modified BSD), sdl2-image (Zlib), and native pkg-config (GPL-2-or-later); pthread and libm come from the normal GNU build environment. The source-buildable host target is emu/pdp6: its pinned emu/Makefile has a concrete custom make recipe equivalent to make -C emu pdp6 and requires gcc, sdl2-config, pkg-config SDL2_image, pthread, and libm. Use gnu-build-system with the configure phase deleted, build only that target, and install the resulting C SDL2 host emulator. Do not select newemu: its pinned Makefile names newemu/ttytelnet.c, which is absent at the same revision; do not build emu/pdp6_s, emu/pdp6_n, fe6, panel, or other serial, network, FPGA, and cross-hardware paths. The local channel already has larsbrinkhoff-pdp6-source at this exact revision, but guix search and the local package inventory contain no equivalent installable package for this upstream origin. Implement module (tay packages pdp6) with public package name pdp6, inheriting that source snapshot, inputs sdl2, sdl2-image, and bash-minimal, native input pkg-config, and the implicit GCC/make toolchain. Install the binary under a private libexec runtime root and provide a bin/pdp6 launcher that changes directory to that root before exec. Ship a controlled init.ini containing only the local defaultconfig device and bus/memory setup from emu/emu.c (APR, TTY, paper-tape reader/punch, DC/DECtape, fast/core memory and connect lines), with no netmem or netcons commands and no mount directives; do not ship the stock init.ini because it attempts localhost:10007 and references absent dump/tape paths. The launcher must therefore start the graphical SDL virtual console from any caller directory without writing to the store, while excluding hardware serial, standalone-panel, FPGA, and network setup. Acceptance is: guix lint -L. pdp6 and guix build -L. pdp6 both succeed; then run the installed launcher in an isolated Guix container with no -N network permission, no device bindings, a fresh HOME/XDG tree, Xvfb :99 -screen 0 1399x740x24 -nolisten tcp, DISPLAY=:99, SDL_VIDEODRIVER=x11, SDL_AUDIODRIVER=dummy, SDL_JOYSTICK_DISABLED=1, and strace -f -e trace=network. Poll xwininfo -root -tree until it finds the window title PDP-6 console, terminate the emulator, and require the trace to contain no AF_INET or AF_INET6 calls; this proves the packaged host UI starts on a local display under network isolation without the excluded FPGA or network paths. This is a delivery brief and source audit, not a claim that the package has already passed lint, build, or runtime proof. ## Acceptance criteria - Implement the viable package change identified in the host-validated research finding. - Preserve Guix source provenance, licensing, and deterministic build requirements recorded in the finding. - Add and pass a package-specific safe smoke proof using isolated HOME/XDG state before closure. --- Imported from [GitHub issue/PR](https://github.com/htayj/guix-channel/issues/613). Originally posted by [htayj](https://github.com/htayj) on 2026-08-25T15:27:04Z.
htayj commented 2026-08-26 08:19:10 +00:00 (Migrated from github.com)

Completed with a signed package, Guix lint, clean no-grafts rebuild, and isolated no-network Xvfb smoke proof of the local SDL console initialization.


Imported from GitHub comment. Originally posted by htayj on 2026-08-26T08:19:10Z.

Completed with a signed package, Guix lint, clean no-grafts rebuild, and isolated no-network Xvfb smoke proof of the local SDL console initialization. --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/613#issuecomment-5422561435). Originally posted by [htayj](https://github.com/htayj) on 2026-08-26T08:19:10Z.
htayj commented 2026-08-26 08:19:29 +00:00 (Migrated from github.com)

Correction: the signed commit is now integrated and pushed to master.


Imported from GitHub comment. Originally posted by htayj on 2026-08-26T08:19:29Z.

Correction: the signed commit is now integrated and pushed to master. --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/613#issuecomment-5422564719). Originally posted by [htayj](https://github.com/htayj) on 2026-08-26T08:19:29Z.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
tay/guix-channel#613
No description provided.