Skip to content

license of src/libcec/platform/adl/adl_* #748

Closed

Description

@barak

As Debian's automated tooling becomes more sophisticated, it picks up more little issues. One thing it noticed recently was that the files

  • src/libcec/platform/adl/adl_defines.h
  • src/libcec/platform/adl/adl_sdk.h
  • src/libcec/platform/adl/adl_structures.h

have a weird license:

//  Copyright (c) 2008 - 2012 Advanced Micro Devices, Inc.
 
//  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
//  EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
//  WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.

Note that this does not grant permission to use, copy, modify or redistribute. This is a problem!

My guess is that AMD basically meant to put these in the public domain, since they are just describing some interfaces with zero creativity. Might it be possible to get a note from them to that affect, or find the same info (or files) somewhere else under an appropriate free license?

Activity

  1. barak commented on Aug 17, 2026

    @barak
    ContributorAuthor

    Just checked, and AMD has since republished these same headers under the MIT license as the GPUOpen display-library SDK.

    https://github.com/GPUOpen-LibrariesAndSDKs/display-library/tree/master/include

    I've just pushed a commit to my fork of this repo, d7db050, which uses the newer MIT-licensed adl_*.h files. It also has a tiny patch to adl-edid.h to get them to work. Will make a pull request presently.

  2. opdenkamp commented on Sep 2, 2026

    @opdenkamp
    Contributor

    Thanks, picking this up now and addressing the other paperwork around this licensing issue

  3. opdenkamp commented on Sep 2, 2026

    @opdenkamp
    Contributor

    Fixed, and the audit it prompted went a bit wider than the three headers.

    The ADL headers themselves — #749 (thanks @barak) replaced them with AMD's ADL SDK 18 versions, which carry a real MIT grant. Your guess was right: AMD did relicense them, so no note from them was needed.

    Everything else the licence texts were getting wrong. debian/copyright had only Files: * and Files: debian/*, so it positively misstated the AMD files as GPL-2+/Pulse-Eight, and LICENSE.md carried no copy of the MIT notice at all. That turned out to be one instance of a general problem — each distribution ships a different set of third-party code and nothing described it:

    • the Windows installer redistributes libusb-win32 (libusb0.dll, plus libusb0.dll/libusb0.sys inside the bootloader driver installer, LGPL-2.1+) and Microsoft DPInst inside both driver installers, and compiles node-addon-api into the prebuilt Node addon — none of it attributed anywhere;
    • the npm and crates.io packages shipped no licence text whatsoever;
    • src/libcec/adapter/IMX/* is GPL-2+ only — the port's author struck the commercial-licence paragraph deliberately, keeping it intact on the file he copied verbatim in the same commit — so the blanket "GPL-2+ or other" claimed an option that cannot be offered on those files alone;
    • src/libcec/adapter/Tegra/TegraCECDev.h had no licence header at all.

    So rather than patch each file, licenses/components.json now records what each component is, whose copyright it is, which licence it falls under and which distributions carry it, and support/generate-licenses.py assembles LICENSE.md, debian/copyright, the two binding licence files and — per build, since it carries more — the Windows installer's own text. No licence text is maintained in two places, and release.py refuses to cut a release when the tracked outputs have drifted from the manifest. licenses/README.md has the details.

    Debian's tooling should be happy now; if it still finds something, please reopen.

    One thing out of reach: support/windows/p8-usbcec-driver-installer.exe is a prebuilt binary from 2012 with our own COPYING baked into it, so its copy is stale until that installer is rebuilt. It's noted in the repo so it doesn't get rediscovered as a bug.

  4. barak commented on Sep 2, 2026

    @barak
    ContributorAuthor

    I think I (well, my software minions) already made those updates to my version of debian/copyright but will double check. Perhaps we should look into unifying my debian packaging with yours, to the extent possible? It's in my fork branch debian

  5. opdenkamp commented on Sep 2, 2026

    @opdenkamp
    Contributor

    Went through the debian branch on your fork and synced what applies. It's all on master now (08668c0..2680fc0).

    All four of your quilt patches are already upstream, so debian/patches can go: the spelling fix, both cecc-client implementations (--help and --list-devices) and the __stdcall tweak in adl-edid.h all landed with #749.

    Taken as-is. Your cecc-client.1 and pyCecClient.1 — both were shipping with no documentation at all, and I checked every option in the cecc-client page against the source before taking it. cec-client.1 moved into debian/man/ alongside them so our layouts match. Also debian/upstream/metadata, debian/clean (plus the two files we generate that yours doesn't), and the build-local HOME for node-gyp.

    Changed. The Python module path was a real bug and I'm glad you caught it — import cec simply failed on an installed package, because cmake hangs the module off CMAKE_INSTALL_LIBDIR and debhelper sets that to the multiarch triplet. Rather than the mv/rmdir in rules, dh_install's two-column form does it in the .install file:

    usr/lib*{/*,}/python*/dist-packages/cec.py usr/lib/python3/dist-packages
    

    libcec8-dev is now Multi-Arch: same with the Pre-Depends, and libudev-dev is [linux-any].

    Licensing — one new thing for you. Contributions committed to this repository come in under the contributor agreement at https://www.pulse-eight.com/contributors, which leaves copyright with the contributor and grants us the licence that makes the dual-licensing possible. The Exynos, AOCEC and Linux backends arrived that way, so they're under libCEC's own terms — but the holders were never named, and licenses/components.json now records them.

    The EventGhost plugin is the exception, and it wasn't on your list either. Three files under src/EventGhost/egplugin_sources/PulseEight/ embed code from EventGhost itself and carry that project's GPL grant alongside ours, so they're GPL-2+ with no commercial option — the same position as the i.MX6 backend. They're packaged by the Windows installer, so they were missing from that licence text entirely.

    Your debian/copyright can drop the Files-Excluded for the ADL headers and the copies under debian/src/ whenever you next rebase.

    One I couldn't reproduce: the unstripped libcec.a. I built it with dpkg-buildflags and the backend flags from rules, then ran dh_strip's own test against it (perl -B, dh_strip line 243) and it comes back binary, so dh_strip does strip it. Our symbol table is runs of 00 01 c9 3e — a NUL and a high byte per offset, and c9 3e isn't valid UTF-8, so nothing pushes it to the text side. If your build really does ship the 22MB version, could you paste the lintian output? Happy to take the workaround, I just don't want to carry it for something I can't see failing.

    Deliberately left for now. Standards-Version 4.7.4, debhelper-compat 14 and pkgconf all assume a newer Debian than some of the distributions our changelog.in targets, so those want their own pass rather than a copy. Same for renaming python-libcec to python3-libcec, which needs the Breaks/Replaces dance.

    On unifying the packaging: it's worth doing, and this closes most of the gap from our side. The remaining divergence is mostly deliberate — we ship a libcec-dotnet package you don't, our source format is native, and we renamed libcec-dev to libcec8-dev to track the SONAME. Everything else looks reconcilable.

  6. barak commented on Sep 2, 2026

    @barak
    ContributorAuthor

    Fantastic. I will, to the extent possible, use your debian/* scripts with only whatever minimal changes I need for Debian policy and consistency with previous versions. I will however defer this until your next official upstream release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions