Skip to the content.

Driver references (from the studied projects)

OmegaDesk needs two kinds of OS drivers: a virtual display (to add a monitor on a headless or privacy-mode host) and a virtual network interface (the TUN device the mesh routes through). Both already exist, fully working, inside the reference projects cloned under omegadesk-ref/. We do not write these from scratch — we vendor a permissively licensed one and wrap it from Rust. This file records every source found, its license, and what OmegaDesk uses.

Virtual display (Windows Indirect Display Driver, IddCx)

Source (in omegadesk-ref/) License What it is
barry-ran_QuickDesk/quickdesk-virtual-display/ MIT Full IddCx driver with prebuilt SIGNED binaries. control/IddController.c+.h (user-mode: create/destroy the software device, plug/unplug monitors via swdevice/cfgmgr32), driver/Driver.cpp+Public.h+quickdesk_display.inf+.vcxproj, and prebuilt/x64/{quickdesk_display.dll,.cat,.inf, nefconw.exe} (.cat = signed catalog; nefconw.exe is Nefarius’ device-console installer). See its prebuilt/x64/README.md.
rustdesk_rustdesk/libs/virtual_display/dylib/src/win10/IddController.c + .h AGPL-3.0 The same control API, wrapped from Rust by RustDesk. Study the FFI shape; do not copy the AGPL code into a permissive crate.
zibo-chen_SubnetDesk/libs/virtual_display/dylib/ AGPL-3.0 RustDesk fork, same control library.
ClassicOldSong_Apollo/src_assets/windows/drivers/sudovda/SudoVDA.inf GPL-3.0 SudoVDA, the virtual display Apollo/Sunshine use.
dchapyshev_aspia/source/drivers/virtual_display/ (driver.cpp, aspia_virtual_display.inf) + source/host/win/virtual_display.h, swdevice_defines.h GPL-3.0 Aspia’s IddCx driver and its host-side control.
kunkundi_crossdesk/apps/desktop/resources/windows/usbmmidd_v2/ (usbmmIdd.inf) GPL-3.0 usbmmidd_v2, a prebuilt USB-mirror indirect display.
ultravnc_UltraVNC/winvnc/winvnc/VirtualDisplay.cpp+.h, videodriver.cpp GPL-3.0 UltraVNC’s virtual display / legacy mirror driver.
FreeRDP_FreeRDP/server/Windows/wf_mirage.c Apache-2.0 Legacy XP/7 mirror-driver capture (historical, not IddCx).

OmegaDesk uses QuickDesk (drivers/idd/): it is MIT (fits our AGPL-3.0 project and can be redistributed), ships a signed driver so it installs without test-signing, and its IddController.c is a clean user-mode control library we compile with cc on Windows and wrap in the omegadesk-idd crate. The kernel/IddCx driver itself (Driver.cpp) is shipped prebuilt+signed and is never built in CI (it needs the Windows WDK). On Linux/macOS the crate compiles to a clear “Windows-only” error. Attribution lives in drivers/idd/ and THIRD_PARTY.

Virtual network interface (TUN)

Source (in omegadesk-ref/) License What it is
tailscale_tailscale/tsconst/wintun/, slackhq_nebula/dist/windows/wintun/ (wintun.dll+wintun.h), firezone_firezone/rust/libs/bin-shared/src/wintun/ wintun: “Prebuilt Binaries” BSD-like (WireGuard) WinTUN, the modern user-mode TUN for Windows used by Tailscale, Nebula and Firezone. The .dll is loaded at runtime; wintun.h is the API. This is the TUN OmegaDesk should use on Windows.
zerotier_ZeroTierOne/ext/bin/tap-windows-ndis6/ + windows/TapDriver6/ (zttap300.sys/.inf) GPL-2.0 (ext is separate) Older NDIS6 TAP driver; WinTUN supersedes it.
EasyTier_EasyTier/easytier/third_party/*/WinDivert*.sys WinDivert (LGPL/GPL dual) WinDivert packet interception — not a TUN; avoid (license).
Linux/macOS kernel built-in /dev/net/tun (Linux) and utun (macOS) need no shipped driver; crates/tun targets them directly.

OmegaDesk uses WinTUN on Windows (runtime-loaded wintun.dll, header in crates/tun), and the kernel TUN/utun devices on Linux/macOS. This is a planned follow-up: today crates/tun validates packets in memory (InMemoryTun) and the mesh carries QUIC datagrams with a virtual address, so a real OS TUN is only needed for the system-wide “route all traffic” mode, not for the remote-desktop session.

Rule

Everything above is already in the reference packages. When a phase needs a driver, vendor the permissive one from this table into the project folder and wrap it in Rust — never hand-roll a driver or assume one is missing.