1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# 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.
* **Decompiled firmware artifacts** (`firmware/**/decompiled/`) — our own
analysis output; kept for study and cited in the wiki.
* **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.
## 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 NVIDIA drivers or firmware,
* 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 unless they are explicitly permitted and
listed in `.gitattributes`/LFS policy.
## 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.
|