Hi Stephan,

In first blush, I don’t think shaders should be considered firmware. They are 
not used to enable the hardware, but they’re just programs which work on pixels 
to perform some functions. These functions work like “suggested/recommended” 
packages which enable more functions with the hardware, but do not render it 
inoperable when they’re absent.

GPU firmwares used by AMD/NVIDIA are pushed to the card, or stay there 
indefinitely and enable the hardware, initialize it let it function as a 
graphics card. Similar to other firmware (printer, scanner, WiFi, Ethernet, 
etc.).

But shaders are not them, and they can be considered as software. Like CUDA or 
“compute” Kernels which run on the GPU directly (preferably after compilation) 
and consume input and generate output.

Of course this is my two cents,

Best regards,

H.

> On 12 Mar 2025, at 12:10, Stephan Verbücheln <verbuech...@posteo.de> wrote:
> 
> Hello everyone
> 
> The “drivers” for hardware video decoders on Intel GPUs have been split
> into free and non-free packages.
> 
> https://packages.debian.org/en/sid/intel-media-va-driver
> https://packages.debian.org/en/sid/intel-media-va-driver-non-free
> 
> The difference between the two is that the Intel source code contains
> blobs (byte arrays in the C source) with pre-compiled GPU shaders.
> 
> The source code for the pre-complied shaders is not included and does
> not appear to be available under a free license.
> 
> The list of affected files can be found in the Debian Copyright File:
> 
> media_driver/agnostic/Xe_M/Xe_HPM/codec/kernel/XE_HPM_VC1_OLP.c
> media_driver/agnostic/Xe_M/Xe_HPM/codec/kernel/Xe_Hpm_Film_Grain.c
> media_driver/agnostic/Xe_M/Xe_XPM/codec/kernelisa/Xe_XPM_Film_Grain.c
> media_driver/agnostic/Xe_M/Xe_XPM/codec/kernelisa/Xe_XPM_VC1_OLP.c
> media_driver/agnostic/Xe_M/Xe_XPM/vp/kernel/cmfcpatch/igvpkrn_xe_xpm_cmfcpatch.c
> media_driver/agnostic/Xe_M/Xe_XPM/vp/kernel/igvpkrn_isa_xe_xpm.c
> media_driver/agnostic/Xe_M/Xe_XPM/vp/kernel/igvpkrn_xe_xpm.c
> media_driver/agnostic/Xe_M/Xe_XPM_plus/codec/kernel/Xe_XPM_plus_Film_Grain.c
> media_driver/agnostic/Xe_M/Xe_XPM_plus/vp/kernel/cmfcpatch/igvpkrn_xe_xpm_plus_cmfcpatch.c
> media_driver/agnostic/Xe_M/Xe_XPM_plus/vp/kernel/igvpkrn_xe_xpm_plus.c
> media_driver/agnostic/gen11/codec/kernel/igcodeckrn_g11.c
> media_driver/agnostic/gen11_icllp/codec/kernel/igcodeckrn_g11_icllp.c
> media_driver/agnostic/gen11_icllp/vp/kernel/igvpkrn_g11_icllp.c
> media_driver/agnostic/gen11_icllp/vp/kernel/igvpkrn_isa_g11_icllp.c
> media_driver/agnostic/gen12/codec/kernel/igcodeckrn_g12.c
> media_driver/agnostic/gen12/codec/kernelisa/*.c
> media_driver/agnostic/gen12_tgllp/vp/kernel/cmfc/igvpkrn_g12_tgllp_cmfc.c
> media_driver/agnostic/gen12_tgllp/vp/kernel/cmfccmlpch/igvpkrn_g12_tgllp_cmfccmlpch.c
> media_driver/agnostic/gen12_tgllp/vp/kernel/cmfcpatch/igvpkrn_g12_tgllp_cmfcpatch.c
> media_driver/agnostic/gen12_tgllp/vp/kernel/igvpkrn_g12_tgllp.c
> media_driver/agnostic/gen12_tgllp/vp/kernel/igvpkrn_isa_g12_tgllp.c
> media_driver/agnostic/gen12_tgllp/vp/kernel/swsb/igvpkrn_g12_tgllp_swsb.c
> media_driver/agnostic/gen8/codec/kernel/igcodeckrn_g8.c
> media_driver/agnostic/gen8/vp/kernel/igvpkrn_g8.c
> media_driver/agnostic/gen9/codec/kernel/igcodeckrn_g9.c
> media_driver/agnostic/gen9/vp/kernel/igvpkrn_g9.c
> media_driver/agnostic/gen9/vp/kernel/igvpkrn_isa_g9.c
> media_driver/agnostic/gen9_bxt/codec/kernel/igcodeckrn_g9_bxt.c
> media_driver/agnostic/gen9_cml/vp/kernel/igvpkrn_g9_cml.c
> media_driver/agnostic/gen9_cml/vp/kernel/tgp/igvpkrn_g9_cml_tgp.c
> media_driver/agnostic/gen9_cmpv/vp/kernel/igvpkrn_g9_cmpv.c
> media_driver/agnostic/gen9_kbl/codec/kernel/igcodeckrn_g9_kbl.c
> media_softlet/agnostic/Xe_R/Xe_HPG_Base/vp/kernel/cmfcpatch/igvpkrn_xe_hpg_cmfcpatch.c
> media_softlet/agnostic/Xe_R/Xe_HPG_Base/vp/kernel/igvpkrn_isa_xe_hpg.c
> media_softlet/agnostic/Xe_R/Xe_HPG_Base/vp/kernel/igvpkrn_xe_hpg.c
> media_softlet/agnostic/Xe_R/Xe2_HPG/vp/kernel/cmfcpatch/igvpkrn_xe2_hpg_cmfcpatch.c
> media_softlet/agnostic/Xe_R/Xe2_HPG/vp/kernel/igvpfc_420PL3_input_xe2.cpp
> media_softlet/agnostic/Xe_R/Xe2_HPG/vp/kernel/igvpfc_444PL3_input_xe2.cpp
> media_softlet/agnostic/Xe_R/Xe2_HPG/vp/kernel/igvpfc_common_xe2.cpp
> media_softlet/agnostic/Xe_R/Xe2_HPG/vp/kernel/igvpfc_fp_xe2.cpp
> media_softlet/agnostic/Xe_R/Xe2_HPG/vp/kernel/igvpkrn_xe2_hpg.c
> 
> Should they be considered non-free firmware rather than non-free
> software?
> 
> Arguments for this:
>   1. The shaders are loaded into the GPU, very much like firmware.
>   2. They are not linked into any libraries or applications.
>   3. They are not loaded into the kernel (like kernel module or eBPF).
>   4. They are not running on the CPU, neither in kernel space, user
>      space or in a bytecode interpreter.
>   5. They are required by the operating system or applications to make
>      use of hardware capabilities.
> 
> Arguments against:
>   1. The shaders are mixed up with library code which load them into
>      the GPU.
>   2. That library code is linked into libraries and applications and
>      running on the CPU. (How ever, there appears to be consensus that
>      the library code is free, only the shaders are not.)
>   3. GPU shaders can have various purposes and origins other than the
>      hardware vendor.
> 
> Regards
> Stephan

Reply via email to