[Guix packaging] NatronGitHub/Natron #78

Open
opened 2026-08-14 13:17:05 +00:00 by htayj · 1 comment
htayj commented 2026-08-14 13:17:05 +00:00 (Migrated from github.com)

Candidate

  • Upstream canonical URL: https://github.com/NatronGitHub/Natron
  • Source pinned commit/release when known: 3763d805d7d277d10af10025ae41af677682b3e6 on RB-2.6 (default branch snapshot reviewed 2026-08-14).
  • Target concrete installed deliverable: Natron node-graph video compositor (Natron and NatronRenderer executables)
  • Primary category: multimedia
  • Tags: image-processing
  • Primary language normalized: C++
  • Build system: CMake (top-level CMakeLists.txt; bundled qmake metadata and third-party trees)
  • SPDX expression: GPL-2.0-or-later
  • License status: mixed-review
  • License evidence: LICENSE_SHORT.txt states GPLv2-or-later; bundled libs/ and submodules carry additional notices that require a dependency license audit.
  • Difficulty: hard — Map all bundled and submodule licenses, replace or pin incompatible system dependencies, and make the large CMake build reproducible.
  • Workflow state: research
  • Existing Guix coverage: Checked 2026-08-14: GNU Guix, Nonguix, Guix Science, Guix HPC, Guix Past, Guix 'R Us, and RDE; no equivalent package with the same upstream origin was found.

Scope and blockers

Package the pinned upstream source as the stated deliverable, retaining upstream notices and making runtime services, credentials, downloaded assets, and optional integrations explicit. Map all bundled and submodule licenses, replace or pin incompatible system dependencies, and make the large CMake build reproducible.

Acceptance checks

  • guix lint -L. natron passes with no new errors.
  • guix build -L. natron succeeds from the pinned source with tests enabled where practical.
  • App-specific offline smoke: Run guix lint/build, then start Natron under Xvfb with an empty project and render a tiny offline test graph.

Imported from GitHub issue/PR. Originally posted by htayj on 2026-08-14T13:17:05Z.

## Candidate - Upstream canonical URL: https://github.com/NatronGitHub/Natron - Source pinned commit/release when known: `3763d805d7d277d10af10025ae41af677682b3e6` on `RB-2.6` (default branch snapshot reviewed 2026-08-14). - Target concrete installed deliverable: Natron node-graph video compositor (`Natron` and `NatronRenderer` executables) - Primary category: multimedia - Tags: image-processing - Primary language normalized: C++ - Build system: CMake (top-level `CMakeLists.txt`; bundled qmake metadata and third-party trees) - SPDX expression: GPL-2.0-or-later - License status: mixed-review - License evidence: `LICENSE_SHORT.txt` states GPLv2-or-later; bundled `libs/` and submodules carry additional notices that require a dependency license audit. - Difficulty: hard — Map all bundled and submodule licenses, replace or pin incompatible system dependencies, and make the large CMake build reproducible. - Workflow state: research - Existing Guix coverage: Checked 2026-08-14: GNU Guix, Nonguix, Guix Science, Guix HPC, Guix Past, Guix 'R Us, and RDE; no equivalent package with the same upstream origin was found. ## Scope and blockers Package the pinned upstream source as the stated deliverable, retaining upstream notices and making runtime services, credentials, downloaded assets, and optional integrations explicit. Map all bundled and submodule licenses, replace or pin incompatible system dependencies, and make the large CMake build reproducible. ## Acceptance checks - `guix lint -L. natron` passes with no new errors. - `guix build -L. natron` succeeds from the pinned source with tests enabled where practical. - App-specific offline smoke: Run `guix lint`/build, then start Natron under Xvfb with an empty project and render a tiny offline test graph. --- Imported from [GitHub issue/PR](https://github.com/htayj/guix-channel/issues/78). Originally posted by [htayj](https://github.com/htayj) on 2026-08-14T13:17:05Z.
htayj commented 2026-08-26 10:22:13 +00:00 (Migrated from github.com)

Goocastle recorded disposition: implementation-ready.

Created implementation ticket: #628.

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.


Imported from GitHub comment. Originally posted by htayj on 2026-08-26T10:22:13Z.

<!-- goocastle-disposition:sequential-reviewer:78:1:implementation-ready --> Goocastle recorded disposition: implementation-ready. Created implementation ticket: #628. 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. --- Imported from [GitHub comment](https://github.com/htayj/guix-channel/issues/78#issuecomment-5423929056). Originally posted by [htayj](https://github.com/htayj) on 2026-08-26T10:22:13Z.
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#78
No description provided.