Implement researched Guix package outcome for #78: [Guix packaging] NatronGitHub/Natron #628

Open
opened 2026-08-26 10:22:07 +00:00 by htayj · 1 comment
htayj commented 2026-08-26 10:22:07 +00:00 (Migrated from github.com)

Context

This delivery ticket was created from research issue #78 ([Guix packaging] NatronGitHub/Natron).

The host-validated research finding follows:

Implementation-ready for a core Natron host package. Canonical upstream is https://github.com/NatronGitHub/Natron; use Guix version 2.6.0-0.20260724 for the CMake project version 2.6.0 at the immutable RB-2.6 commit 3763d805d7d277d10af10025ae41af677682b3e6. Fetch it with a recursive git-fetch and pin/verify every submodule below; the existing source-snapshot codeload hash 1x4pwgxnzjdg5mvzyr2bf7i55x4aaw58yfwvpgiglhp0jpn9rxyn covers only the parent archive and cannot produce a buildable tree because submodule contents are absent. The parent redistribution grant is GPL-2.0-or-later, explicitly stated by LICENSE_SHORT.txt and LICENSE.txt at github.com/NatronGitHub/Natron@3763d805d7/LICENSE_SHORT.txt and github.com/NatronGitHub/Natron@3763d805d7/LICENSE.txt. Independently fetched origins and exact-revision license evidence are: NatronGitHub/google-mock at 17945db42c0b42496b2f3c6530307979f2e2a5ce, BSD-3-Clause in github.com/NatronGitHub/google-mock@17945db42c/LICENSE; NatronGitHub/google-test at 50d6fc317c843a2e40dbf08c2efd3f068801ae6d, BSD-3-Clause in github.com/NatronGitHub/google-test@50d6fc317c/LICENSE; NatronGitHub/openfx at 2303ff811bee3ffe085287602f684fe5fe5357e0, 3-Clause BSD in github.com/NatronGitHub/openfx@2303ff811b/LICENSE.md; NatronGitHub/SequenceParsing at 3c93fcc488632b0bdfeee3181586809932357598, GPL-2.0-or-later in github.com/NatronGitHub/SequenceParsing@3c93fcc488/LICENSE.md; its separately fetched nested NatronGitHub/tinydir at 64fb1d4376d7580aa1013fdbacddbbeba67bb085, BSD-style 3-clause grant in github.com/NatronGitHub/tinydir@64fb1d4376/COPYING; and NatronGitHub/google-breakpad at 9474c3f7f9939391f281d46c42bfe20cc0f0abd9, BSD-3-Clause plus the included Unicode notice in github.com/NatronGitHub/google-breakpad@9474c3f7f9/LICENSE. All required origins have clear redistribution grants; no parent-license substitution was used. The parent exact-commit inventory at github.com/NatronGitHub/Natron@3763d805d7/tools/license/components/README.md also identifies the bundled code that must retain notices: Eigen MPL-2.0; Ceres, gflags, and glog New BSD; libmv MIT; openMVG MPL-2.0 with its third-party map; hoedown permissive MIT/BSD-style; libtess SGI Free Software License B; qhttpserver and its Joyent http-parser MIT; generated GLAD MIT; OpenFX HostSupport's embedded Expat MIT; and google-breakpad's embedded curl and musl MIT notices. The same inventory records the licenses of optional plugin/codecs/image integrations, including LGPL, BSD, zlib, Apache, GPL, CeCILL-C, MPL, and public-domain components; do not silently fetch or bundle those optional repositories. Preserve the parent, submodule, bundled-library, and optional-inventory notices in a license directory in the output because upstream CMake installs binaries and desktop metadata but does not install a complete license bundle. No equivalent package with the same NatronGitHub/Natron origin was found: local guix package -A natron is empty and the audited GNU Guix, Nonguix, Guix Science, Guix HPC, Guix Past, Guix R Us, and RDE channel coverage has no equivalent. Add a new module such as tay/packages/natron.scm using guix build-system cmake, recursive fixed-source git-fetch, and the exact parent revision above. Configure C++17 CMake with -DNATRON_QT6=ON, -DNATRON_SYSTEM_LIBS=OFF, and -DNATRON_BUILD_TESTS=ON. Required build inputs are CMake, pkg-config, extra-cmake-modules, Boost headers and serialization, Python 3 interpreter/development, python-pyside-6, python-shiboken-6 and their Qt 6.9-compatible tool/config files, qtbase with the Qt Core/Gui/Network/Widgets/Concurrent/OpenGLWidgets components, qtwayland or the Wayland client/EGL libraries, Cairo, fontconfig, Expat, libX11, and the compiler/toolchain; the parent CMake intentionally builds its fixed bundled gflags/glog/Ceres/openMVG/libmv/hoedown/libtess inputs when NATRON_SYSTEM_LIBS is off. Install Natron and NatronRenderer, and retain natron-python plus the upstream desktop/appdata/MIME/icon assets if the module keeps the CMake install set. Stage Gui/Resources/etc/fonts at the relative Resources/etc/fonts location expected by Engine/AppManager.cpp or set FONTCONFIG_PATH explicitly in the wrapper. Wrap Qt6/PySide6 runtime paths as needed, leave standard user configuration/cache/data locations writable through XDG variables, and never hard-code credentials or a home directory. Do not force an OCIO configuration, download OpenColorIO-Configs, or fetch the mutable upstream CI plugin archive; accept an explicit OCIO path or a separately packaged fixed config. Do not claim FFmpeg, OpenImageIO, or the normal Read/Write plugin set is included: the parent builds the host but not openfx-io, openfx-misc, or openfx-arena, and its Read/Write meta-nodes dispatch to external OpenFX readers and writers, including the video ReadFFmpeg/WriteFFmpeg IDs. Expose an optional OFX_PLUGIN_PATH only when a separately pinned and audited plugin package is composed. Upstream CTest compilation is practical with the recursive Google test/mock submodules, but Tests/BaseTest requires the externally supplied SeNoise, ReadOIIO, and WriteOIIO plugins, so do not use the mutable CI download as a Guix input; either run only tests that do not require those plugins or provide a separately fixed test fixture. The isolated acceptance proof must run guix lint -L. natron with no new errors, then guix build -L. natron with the pinned recursive source and tests enabled, and verify the installed bin/Natron and bin/NatronRenderer paths. In a network-disabled temporary container, create empty XDG/HOME directories and a tiny local OpenFX generator/writer fixture compiled against the pinned OpenFX headers, set only a temporary OFX_PLUGIN_PATH, and use Natron's documented Python API to create a deterministic 2x2 one-frame graph. Start Natron in GUI mode with an empty project under xvfb-run -a and confirm it initializes and exits cleanly; then run NatronRenderer on the generated script with the writer and frame 1, asserting exit status zero, the expected output magic, dimensions and deterministic digest, and no writes outside the temporary directories. Keep the graph CPU-only and avoid OCIO unless a fixed config is explicitly staged. These are implementation gates, not package proof; no package build or smoke proof is being claimed by this research disposition.

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-26T10:22:07Z.

<!-- goocastle-implementation-ticket:sequential-reviewer:78:1:implementation-ready --> ## Context This delivery ticket was created from research issue #78 ([Guix packaging] NatronGitHub/Natron). The host-validated research finding follows: Implementation-ready for a core Natron host package. Canonical upstream is https://github.com/NatronGitHub/Natron; use Guix version 2.6.0-0.20260724 for the CMake project version 2.6.0 at the immutable RB-2.6 commit 3763d805d7d277d10af10025ae41af677682b3e6. Fetch it with a recursive git-fetch and pin/verify every submodule below; the existing source-snapshot codeload hash 1x4pwgxnzjdg5mvzyr2bf7i55x4aaw58yfwvpgiglhp0jpn9rxyn covers only the parent archive and cannot produce a buildable tree because submodule contents are absent. The parent redistribution grant is GPL-2.0-or-later, explicitly stated by LICENSE_SHORT.txt and LICENSE.txt at https://github.com/NatronGitHub/Natron/blob/3763d805d7d277d10af10025ae41af677682b3e6/LICENSE_SHORT.txt and https://github.com/NatronGitHub/Natron/blob/3763d805d7d277d10af10025ae41af677682b3e6/LICENSE.txt. Independently fetched origins and exact-revision license evidence are: NatronGitHub/google-mock at 17945db42c0b42496b2f3c6530307979f2e2a5ce, BSD-3-Clause in https://github.com/NatronGitHub/google-mock/blob/17945db42c0b42496b2f3c6530307979f2e2a5ce/LICENSE; NatronGitHub/google-test at 50d6fc317c843a2e40dbf08c2efd3f068801ae6d, BSD-3-Clause in https://github.com/NatronGitHub/google-test/blob/50d6fc317c843a2e40dbf08c2efd3f068801ae6d/LICENSE; NatronGitHub/openfx at 2303ff811bee3ffe085287602f684fe5fe5357e0, 3-Clause BSD in https://github.com/NatronGitHub/openfx/blob/2303ff811bee3ffe085287602f684fe5fe5357e0/LICENSE.md; NatronGitHub/SequenceParsing at 3c93fcc488632b0bdfeee3181586809932357598, GPL-2.0-or-later in https://github.com/NatronGitHub/SequenceParsing/blob/3c93fcc488632b0bdfeee3181586809932357598/LICENSE.md; its separately fetched nested NatronGitHub/tinydir at 64fb1d4376d7580aa1013fdbacddbbeba67bb085, BSD-style 3-clause grant in https://github.com/NatronGitHub/tinydir/blob/64fb1d4376d7580aa1013fdbacddbbeba67bb085/COPYING; and NatronGitHub/google-breakpad at 9474c3f7f9939391f281d46c42bfe20cc0f0abd9, BSD-3-Clause plus the included Unicode notice in https://github.com/NatronGitHub/google-breakpad/blob/9474c3f7f9939391f281d46c42bfe20cc0f0abd9/LICENSE. All required origins have clear redistribution grants; no parent-license substitution was used. The parent exact-commit inventory at https://github.com/NatronGitHub/Natron/blob/3763d805d7d277d10af10025ae41af677682b3e6/tools/license/components/README.md also identifies the bundled code that must retain notices: Eigen MPL-2.0; Ceres, gflags, and glog New BSD; libmv MIT; openMVG MPL-2.0 with its third-party map; hoedown permissive MIT/BSD-style; libtess SGI Free Software License B; qhttpserver and its Joyent http-parser MIT; generated GLAD MIT; OpenFX HostSupport's embedded Expat MIT; and google-breakpad's embedded curl and musl MIT notices. The same inventory records the licenses of optional plugin/codecs/image integrations, including LGPL, BSD, zlib, Apache, GPL, CeCILL-C, MPL, and public-domain components; do not silently fetch or bundle those optional repositories. Preserve the parent, submodule, bundled-library, and optional-inventory notices in a license directory in the output because upstream CMake installs binaries and desktop metadata but does not install a complete license bundle. No equivalent package with the same NatronGitHub/Natron origin was found: local guix package -A natron is empty and the audited GNU Guix, Nonguix, Guix Science, Guix HPC, Guix Past, Guix R Us, and RDE channel coverage has no equivalent. Add a new module such as tay/packages/natron.scm using guix build-system cmake, recursive fixed-source git-fetch, and the exact parent revision above. Configure C++17 CMake with -DNATRON_QT6=ON, -DNATRON_SYSTEM_LIBS=OFF, and -DNATRON_BUILD_TESTS=ON. Required build inputs are CMake, pkg-config, extra-cmake-modules, Boost headers and serialization, Python 3 interpreter/development, python-pyside-6, python-shiboken-6 and their Qt 6.9-compatible tool/config files, qtbase with the Qt Core/Gui/Network/Widgets/Concurrent/OpenGLWidgets components, qtwayland or the Wayland client/EGL libraries, Cairo, fontconfig, Expat, libX11, and the compiler/toolchain; the parent CMake intentionally builds its fixed bundled gflags/glog/Ceres/openMVG/libmv/hoedown/libtess inputs when NATRON_SYSTEM_LIBS is off. Install Natron and NatronRenderer, and retain natron-python plus the upstream desktop/appdata/MIME/icon assets if the module keeps the CMake install set. Stage Gui/Resources/etc/fonts at the relative Resources/etc/fonts location expected by Engine/AppManager.cpp or set FONTCONFIG_PATH explicitly in the wrapper. Wrap Qt6/PySide6 runtime paths as needed, leave standard user configuration/cache/data locations writable through XDG variables, and never hard-code credentials or a home directory. Do not force an OCIO configuration, download OpenColorIO-Configs, or fetch the mutable upstream CI plugin archive; accept an explicit OCIO path or a separately packaged fixed config. Do not claim FFmpeg, OpenImageIO, or the normal Read/Write plugin set is included: the parent builds the host but not openfx-io, openfx-misc, or openfx-arena, and its Read/Write meta-nodes dispatch to external OpenFX readers and writers, including the video ReadFFmpeg/WriteFFmpeg IDs. Expose an optional OFX_PLUGIN_PATH only when a separately pinned and audited plugin package is composed. Upstream CTest compilation is practical with the recursive Google test/mock submodules, but Tests/BaseTest requires the externally supplied SeNoise, ReadOIIO, and WriteOIIO plugins, so do not use the mutable CI download as a Guix input; either run only tests that do not require those plugins or provide a separately fixed test fixture. The isolated acceptance proof must run guix lint -L. natron with no new errors, then guix build -L. natron with the pinned recursive source and tests enabled, and verify the installed bin/Natron and bin/NatronRenderer paths. In a network-disabled temporary container, create empty XDG/HOME directories and a tiny local OpenFX generator/writer fixture compiled against the pinned OpenFX headers, set only a temporary OFX_PLUGIN_PATH, and use Natron's documented Python API to create a deterministic 2x2 one-frame graph. Start Natron in GUI mode with an empty project under xvfb-run -a and confirm it initializes and exits cleanly; then run NatronRenderer on the generated script with the writer and frame 1, asserting exit status zero, the expected output magic, dimensions and deterministic digest, and no writes outside the temporary directories. Keep the graph CPU-only and avoid OCIO unless a fixed config is explicitly staged. These are implementation gates, not package proof; no package build or smoke proof is being claimed by this research disposition. ## 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/628). Originally posted by [htayj](https://github.com/htayj) on 2026-08-26T10:22:07Z.
htayj commented 2026-08-27 04:25:30 +00:00 (Migrated from github.com)

Blocked after reproducible Guix builds against the pinned current channel. The preserved Goocastle worktree is .goocastle/worktrees/a7d406cc-527d-470c-b7a3-a61a7b3cadf8.

Evidence:

  • guix build -L . --no-grafts natron reached native compilation after correcting the standalone Shiboken build-number parse, Qt6 QStringList forward declaration, legacy PyList generator pseudo-type, and missing QEnterEvent include.
  • The next failure is Engine/CLArgs.cpp:1142: QRegExp was not declared; QRegExp was removed in Qt6.
  • These are successive Qt5-to-Qt6 source-porting defects in the pinned Natron revision, not missing Guix inputs. A safe package requires an upstream-compatible Qt6 port (or a maintained Qt5/PySide5 dependency stack), plus fresh build and runtime validation.

No partial package changes were committed or pushed; the worktree and build logs are preserved for a follow-up porting ticket.


Imported from GitHub comment. Originally posted by htayj on 2026-08-27T04:25:30Z.

Blocked after reproducible Guix builds against the pinned current channel. The preserved Goocastle worktree is `.goocastle/worktrees/a7d406cc-527d-470c-b7a3-a61a7b3cadf8`. Evidence: - `guix build -L . --no-grafts natron` reached native compilation after correcting the standalone Shiboken build-number parse, Qt6 `QStringList` forward declaration, legacy `PyList` generator pseudo-type, and missing `QEnterEvent` include. - The next failure is `Engine/CLArgs.cpp:1142: QRegExp was not declared`; `QRegExp` was removed in Qt6. - These are successive Qt5-to-Qt6 source-porting defects in the pinned Natron revision, not missing Guix inputs. A safe package requires an upstream-compatible Qt6 port (or a maintained Qt5/PySide5 dependency stack), plus fresh build and runtime validation. No partial package changes were committed or pushed; the worktree and build logs are preserved for a follow-up porting ticket. --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/628#issuecomment-5434365335). Originally posted by [htayj](https://github.com/htayj) on 2026-08-27T04:25:30Z.
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#628
No description provided.