# Legal, Licensing, and Third-Party Material > What is licensed how, what we may redistribute, and how we stay clean while > doing adversarial interoperability. ## 1. The project's licenses | Component | License | Rationale | |---|---|---| | `kernel/**` (e.g. `open-iov-vfio.ko`) | **GPL-2.0** (`MODULE_LICENSE("GPL v2")`) | The Linux kernel exports the interfaces we need (VFIO, mdev, IOMMU, DMA) under `EXPORT_SYMBOL_GPL`. GPL-2.0 is the legally correct choice. | | `userspace/**`, `tools/**`, `scripts/**`, `config/**`, `docs/**` | **BSD-3-Clause** | Maximizes reuse and adoption — the project's mission. | | Third-party submodules and imported trees | their own licenses | Not relicensed; used under their terms. | Per-file `SPDX-License-Identifier` headers always govern. The split is deliberate: the kernel side gets a clean legal footing; everything vendor-facing, embeddable and reusable stays permissive. Commercial adoption is welcome and requires no license fee. ## 2. How we learn the interfaces Open-IOV is built by **reverse engineering and decompilation**: we study the behaviour of vendor drivers and firmware — in VMs, on hardware, and by disassembling published firmware images and analysed binaries — and we reimplement the interfaces we discover. What this project publishes is our own work: behaviour descriptions, numeric identifiers, layouts, emulation code, and the evidence behind each observation. In this repository you will find: * **GSP firmware images** (`firmware/**/*.fwimage.bin`) — fetched from public distribution channels (e.g. `linux-firmware`); used to understand and emulate the firmware interface. They are **not distributed in this repository**: like all firmware blobs they are gitignored and kept only as local study material. * **Decompiled/disassembled artifacts** (`firmware/**/decompiled/`) — our own analysis output, kept locally for study and cited in the wiki. They are gitignored and never committed. * **Reformatted interface tables** — IDs, structures and message layouts that we derived, published in `wiki/` and in this documentation tree. **Our rule:** publish *our work product* (facts, layouts, behaviours, code and evidence). Do not copy third-party source or documentation into this project, do not point readers at material we cannot redistribute, and do not redistribute third-party binaries as project content beyond what their terms allow. **CUDA-userspace (`libcuda`) analysis rules:** * Decompiled or disassembled output is never committed; it is gitignored study material. * Cite userspace locations as `libcuda+0x...` *file virtual addresses*. Note the Ghidra image-base caveat: that library is loaded at **`0x100000`**, so a decompilation produced without translating the offset refers to the wrong function. * Tracked docs state facts and evidence; conclusions cite numeric IDs, code offsets and recorded observations, never source locations. * Name maps and indexes (`userspace/cuda/*/annotations/`) are our own work product and may be tracked. ## 3. Adversarial interoperability and the law We implement the *interface contract* so that unmodified NVIDIA software can talk to our device. We do not: * copy NVIDIA driver code into our kernel module, * patch the guest, runtime or host driver at run time. The only patch series we carry is build glue for the optional OpenRM submodule (`install.sh`); the deployment path uses the distribution's NVIDIA driver as shipped, * defeat licensing for NVIDIA's own products (our device is our device; no impersonation of a licensed product identity). Where interoperability requires knowledge of structures and constants, we obtain them from publicly distributed headers and from observation of the unmodified guest in a lab, and we document the evidence. This is the same discipline used by other interoperable implementations of closed interfaces. If you believe a specific artifact in this repository is improperly included, open an issue: we would rather over-comply than argue. ## 4. Contributions * Inbound = outbound: contributions to BSD-3-Clause files are BSD-3-Clause; contributions to GPL-2.0 files are GPL-2.0. * By contributing you confirm you have the right to do so and that the contribution does not contain third-party material under incompatible terms. * Write original code. Describe behaviour, cite the evidence, and reimplement interfaces from observation rather than copying anyone's source. * Do not commit firmware or ISO images: they are local study/deployment material and are gitignored (see §2). ## 5. Export, safety and platform notes * GPU firmware and drivers may be subject to export regulations in your jurisdiction; users are responsible for compliance. * Security-sensitive deployments should follow the security evaluation doc and the platform's attestation mechanisms (e.g. TrenchBoot). * Nothing in this project's licensing changes the licenses of the host distribution's NVIDIA driver, the guest's driver, or any hypervisor.