<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://open-iov.org/index.php?action=history&amp;feed=atom&amp;title=Interfaces_and_Stability</id>
	<title>Interfaces and Stability - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://open-iov.org/index.php?action=history&amp;feed=atom&amp;title=Interfaces_and_Stability"/>
	<link rel="alternate" type="text/html" href="https://open-iov.org/index.php?title=Interfaces_and_Stability&amp;action=history"/>
	<updated>2026-10-30T19:32:39Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://open-iov.org/index.php?title=Interfaces_and_Stability&amp;diff=24009&amp;oldid=prev</id>
		<title>WikiBot: 2026-10-30 wiki refresh: goals, GSP, graphics, performance, interfaces</title>
		<link rel="alternate" type="text/html" href="https://open-iov.org/index.php?title=Interfaces_and_Stability&amp;diff=24009&amp;oldid=prev"/>
		<updated>2026-10-30T17:06:17Z</updated>

		<summary type="html">&lt;p&gt;2026-10-30 wiki refresh: goals, GSP, graphics, performance, interfaces&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{About message}}&lt;br /&gt;
&lt;br /&gt;
= Interfaces and Stability =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''Scope.''' The interfaces Open-IOV exposes or consumes, which of them are '''contracts''' (stable, versioned, safe to build on), which are '''not''' (bring-up and debug surfaces, free to change), and ''why'' the stable set is stable. This is the compatibility policy for the project's own software — the interfaces of ''other people's'' software are fixed by the project's rules (nothing is patched). Canonical sources: [https://git.vgpu.io/open-iov.git/tree/docs/eng-ops.md &amp;lt;code&amp;gt;../docs/eng-ops.md&amp;lt;/code&amp;gt;] (engineering rules), [https://git.vgpu.io/open-iov.git/tree/docs/06-portability/hardware-software-matrix.md &amp;lt;code&amp;gt;../docs/06-portability/hardware-software-matrix.md&amp;lt;/code&amp;gt;] (version/device profiles) and the headers/schemas named below; the docs tree wins on disagreement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Status: 2026-10-30, tree &amp;lt;code&amp;gt;master @ b4930168&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 1. Why interfaces are the product ==&lt;br /&gt;
&lt;br /&gt;
Open-IOV's durability comes from a single idea: '''own the interface, not a snapshot of it''', and '''never patch anyone'''. The interfaces the project ''consumes'' — the stock NVIDIA driver's device expectations, the kernel's VFIO/ mdev UAPI, the hypervisor's DMA and interrupt interfaces — are therefore immutable by construction: if the project changed what the guest driver sees, the stock driver would break, and the project would have failed its own rule.&lt;br /&gt;
&lt;br /&gt;
The interfaces the project ''exposes'' are split deliberately into three classes, and everything below is one of them:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Class&lt;br /&gt;
! Promise&lt;br /&gt;
! Examples&lt;br /&gt;
|-&lt;br /&gt;
| '''Consumer contracts'''&lt;br /&gt;
| stable; versioned; changes are additive or bump a version&lt;br /&gt;
| the guest-visible device interface, the mdev lifecycle surface, the userspace management library, the configuration schemas, tooling evidence formats&lt;br /&gt;
|-&lt;br /&gt;
| '''Bring-up and debug surfaces'''&lt;br /&gt;
| ''no'' promise — names and semantics may change between builds&lt;br /&gt;
| module parameters, debug filesystem files, internal state shapes&lt;br /&gt;
|-&lt;br /&gt;
| '''Internal surfaces'''&lt;br /&gt;
| no promise, no consumers outside the module&lt;br /&gt;
| kernel functions, structs, heuristics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. Stable interfaces (contracts) ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Interface&lt;br /&gt;
! Consumers&lt;br /&gt;
! Why it is stable&lt;br /&gt;
! Change policy&lt;br /&gt;
|-&lt;br /&gt;
| '''The guest-visible device interface''': PCI configuration space, BAR0 register interface, BAR1/BAR3 apertures, MSI-X; the GSP boot protocol; the GSP-RM message-queue transport and RPC functions; RM object/control semantics; events and completions&lt;br /&gt;
| stock NVIDIA guest drivers (Linux and Windows)&lt;br /&gt;
| ''It is NVIDIA's interface'', fixed by the driver version the profile targets. The no-patch rule means changing it is not an option: any update must keep the unmodified driver working&lt;br /&gt;
| Never changed by us. New driver/firmware versions enter as '''profiles with measured deltas''' ([[Hardware and Software Matrix|&amp;lt;code&amp;gt;Hardware-Software-Matrix.md&amp;lt;/code&amp;gt;]]); the emulation answers the version the driver negotiates&lt;br /&gt;
|-&lt;br /&gt;
| '''The host/platform surface of &amp;lt;code&amp;gt;vgsp.ko&amp;lt;/code&amp;gt;''': the VFIO '''mdev lifecycle''' (mdev type names such as &amp;lt;code&amp;gt;nvidia-vgpu-turing&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-1g&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-2g&amp;lt;/code&amp;gt;; sysfs create/remove; the VFIO region, DMA and IRQ UAPI)&lt;br /&gt;
| QEMU/libvirt and management tooling; any conforming VFIO consumer&lt;br /&gt;
| It is the kernel's mdev/VFIO contract plus a small, documented set of type names that tooling (and user scripts) reference by name&lt;br /&gt;
| Additive by default; renaming or removing a type requires a migration note and a supported overlap window&lt;br /&gt;
|-&lt;br /&gt;
| '''The userspace management library''' (&amp;lt;code&amp;gt;libvgpu&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;libiov&amp;lt;/code&amp;gt;; header &amp;lt;code&amp;gt;userspace/include/libvgpu.h&amp;lt;/code&amp;gt;): error codes, memory/type enums, VF, migration and WPR operations; versioned soname&lt;br /&gt;
| project tooling and integrators writing management workflows&lt;br /&gt;
| A small C API with a versioned shared-object name; its consumers link rather than copy&lt;br /&gt;
| Additive changes keep the soname; breaking changes bump it. The surface is small on purpose — it is a management API, not the data path&lt;br /&gt;
|-&lt;br /&gt;
| '''Configuration profiles''' (&amp;lt;code&amp;gt;config/versions/*.yaml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;config/hardware/*.yaml&amp;lt;/code&amp;gt;): per-driver and per-device adaptation data&lt;br /&gt;
| the module's version adaptation and the porting workflows&lt;br /&gt;
| Data contract: the porting promise is &amp;quot;a new version is a profile plus a measured delta&amp;quot;, which only holds if the schema is stable&lt;br /&gt;
| Additive fields; semantic changes are versioned with the profile&lt;br /&gt;
|-&lt;br /&gt;
| '''Developer-tooling evidence formats''': the recorded-session format (&amp;lt;code&amp;gt;greeneye-session/1&amp;lt;/code&amp;gt;), the symbol database, the injection ABI (v1)&lt;br /&gt;
| recorded evidence, replays and future sessions of the firmware workbench&lt;br /&gt;
| Evidence must remain interpretable years later, so the formats are declared back-compatibility items even though the tooling itself is development-only&lt;br /&gt;
| Version bumps with migration notes; additive fields preferred; a breaking change needs a shim or a format-version bump&lt;br /&gt;
|-&lt;br /&gt;
| '''The documentation canon'''&lt;br /&gt;
| users, integrators, future contributors&lt;br /&gt;
| The docs tree is the declared source of truth: where a wiki page or summary disagrees with the repository documents, the repository wins&lt;br /&gt;
| Corrections update the docs tree first, then the derived pages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 3. Explicitly not stable (may change) ==&lt;br /&gt;
&lt;br /&gt;
Nothing in this list is safe to build on; treat it as subject to change between builds, without notice:&lt;br /&gt;
&lt;br /&gt;
* '''Module parameters''' (&amp;lt;code&amp;gt;/sys/module/vgsp/parameters/*&amp;lt;/code&amp;gt;) — bring-up and debug knobs (targeted probes, forced behaviours, diagnostic mirrors). They exist to run experiments; names and semantics change as the canonical paths replace them.&lt;br /&gt;
* '''Debug filesystem surfaces''' (the module's &amp;lt;code&amp;gt;gsp-phys-*&amp;lt;/code&amp;gt; controls and counters) — observability only; no format or lifetime promise.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;vgsp.ko&amp;lt;/code&amp;gt; internals''' — functions, structures, state layouts; there are no external consumers and no stability promise.&lt;br /&gt;
* '''Emulation internals''' — ring/USERD discovery heuristics, shadow windows, scratch mappings, scan cadences, and the parameter-gated forwarding and graphics seams while they are validated. When a seam graduates, it becomes a documented configuration surface and leaves this list.&lt;br /&gt;
* '''Scripts, harnesses and test clients''' (&amp;lt;code&amp;gt;scripts/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tools/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tools/guest-diag/&amp;lt;/code&amp;gt;) — working material, not products.&lt;br /&gt;
* '''The firmware workbench's CLI, plugins and probe files''' ([[risc-v-gsp-rm-debugger|&amp;lt;code&amp;gt;Riscv-GSP-RM-Debugger.md&amp;lt;/code&amp;gt;]]) — development-only by declaration; interfaces and file formats may change without notice. (Exception: the ''session format'' above is versioned precisely so recorded evidence survives tool change.)&lt;br /&gt;
* '''This wiki and the site''' — a curated, dated documentation view, refreshed with status changes; it is not an API.&lt;br /&gt;
&lt;br /&gt;
== 4. Why the stable set is stable ==&lt;br /&gt;
&lt;br /&gt;
Three kinds of reason, and each stable interface has at least one of them:&lt;br /&gt;
&lt;br /&gt;
# '''It is externally specified.''' The guest-visible device interface is NVIDIA's; the mdev lifecycle is the kernel's. Stability is inherited, and the project's rules forbid &amp;quot;fixing&amp;quot; either side.&lt;br /&gt;
# '''It has declared consumers.''' The user library, the mdev type names, the configuration schemas and the evidence formats have real consumers (tooling, scripts, evidence archives). A contract exists because someone else depends on it — not because it was convenient to freeze.&lt;br /&gt;
# '''The project's own rules make it so.''' ''No patches'' + ''profiles, not rewrites'' means the device-facing behaviour must evolve the way NVIDIA's driver evolves — by version, never by surprise.&lt;br /&gt;
&lt;br /&gt;
'''Change discipline, in one sentence:''' prefer additive; version what consumers link against or parse; never break evidence or an unmodified driver; document the migration when something must move.&lt;br /&gt;
&lt;br /&gt;
== 5. Open items (stability questions we expect to close) ==&lt;br /&gt;
&lt;br /&gt;
* '''Userspace library freeze point.''' When the management workflows stabilise, declare an API freeze (a 1.0 surface) so integrators can rely on it.&lt;br /&gt;
* '''Graduating debug seams.''' The parameter-gated forwarding and graphics seams will migrate from debug knobs to documented configuration as they are validated; the graduating list is tracked on [[Project Status|&amp;lt;code&amp;gt;Project-Status.md&amp;lt;/code&amp;gt;]].&lt;br /&gt;
* '''Schema formality.''' The configuration profiles are documented data today; a formal schema would make the &amp;quot;profile + measured delta&amp;quot; promise checkable by tooling.&lt;br /&gt;
* '''Evidence-format externalisation.''' If parties outside the project archive workbench sessions, the session and symbol formats need the same public versioning treatment as the user library.&lt;br /&gt;
&lt;br /&gt;
== 6. Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Project Goals|&amp;lt;code&amp;gt;Project-Goals.md&amp;lt;/code&amp;gt;]] — the goals this compatibility policy serves.&lt;br /&gt;
* [[The Host Module (vgsp.ko)|&amp;lt;code&amp;gt;Host-Module.md&amp;lt;/code&amp;gt;]] — where the mdev surface and the debug parameters live.&lt;br /&gt;
* [[Hardware and Software Matrix|&amp;lt;code&amp;gt;Hardware-Software-Matrix.md&amp;lt;/code&amp;gt;]] — how profiles, versions and devices are handled.&lt;br /&gt;
* [[risc-v-gsp-rm-debugger|&amp;lt;code&amp;gt;Riscv-GSP-RM-Debugger.md&amp;lt;/code&amp;gt;]] — the development-only tooling and its versioned session format.&lt;br /&gt;
* [[Performance|&amp;lt;code&amp;gt;Performance.md&amp;lt;/code&amp;gt;]] — why debug surfaces are explicitly not configuration.&lt;/div&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
</feed>