Open source · Apache 2.0 · HotAdd, NBDSSL and NBD

Independent Virtual Disk Library.
Drop-in. Written from scratch.

OpenVDDK is an independent drop-in for libvixDiskLib.so.8.0.3, the disk library that VMware backup and migration tools load to read virtual disks. It was written from scratch, using only public documentation and black-box testing, and contains no VMware code.

Your application doesn't have to know

An application that loads libvixDiskLib.so.8.0.3 doesn't need to know whether it got VMware's VDDK or OpenVDDK: same file name, same functions, same calls, same data back. No rewrite and no new integration path. In our tests, the difference applications noticed was the timing.

Same file, same interface

The same shared object name and the same exported VixDiskLib functions. Replace the file and restart the service.

HotAdd

Attaches the snapshot disk to your proxy VM, finds and verifies it in the guest, reads it and hands it back. An interrupted run is cleaned up by the next one.

NBDSSL and NBD

Reads the disk directly from the ESXi host over NBDSSL or NBD, without a HotAdd proxy VM. NBDSSL encrypts the connection. Only the transports you request are used: an NBDSSL-only request never falls back to clear-text NBD. A disk can be read over several NFC sessions at once (OpenVDDK.nbd.sessions, 1 to 16, default 1), so a single reader gets parallel transfers without a wrapper.

Quick to open and close

Opening a disk takes about a second and handing it back a fraction of a second in our measurements. Sequential readers get read-ahead, including programs that read asynchronously, such as nbdkit's VDDK plugin under virt-v2v.

Read-only by design

OpenVDDK reads disks for backup and migration and cannot write to them. Write calls return the same read-only error as VMware's library.

Talks only to your vSphere

It connects only to the vCenter and ESXi hosts your tool points it at. No telemetry; nothing is sent anywhere else.

Measurements

How to read these figures. They are our own measurements in our own labs, not an independent benchmark. Each comparison used the same application build, the same VM, worker and storage, and swapped only the library file; most are single runs or pairs.

Results depend on your storage, network, CPU and application. In your environment the two libraries may perform the same, and in the cases listed under Where VMware's library was faster, OpenVDDK was slower. Please measure in your own setup. Ask us for the method in a GitHub issue.

Single operations on physical ESXi 8.0.3 hosts, read over HotAdd, with only the library file swapped.

Read rate, 200 GiB disk
2,488 MiB/s
VMware VDDK 8.0.3: 1,441 MiB/s
Opening a 40 GB disk
1.0 s
VMware VDDK 8.0.3: 19.1 s
Handing the disk back
0.3 s
VMware VDDK 8.0.3: 12.6 s
Data read
Identical
Same SHA-256, both libraries

The 200 GiB disk was read with one request in flight and gave the same SHA-256 through both libraries, for the whole disk and for all 800 ranges. Opening and closing were measured on a 40 GB disk on VMFS from the same worker, two runs each; these times depend on vCenter and the ESXi host.

In a warm migration of a running 20 GB Debian 13 VM under V2K Migrate, a free, self-hosted VMware-to-KVM migration tool (a full baseline, two Changed Block Tracking deltas of 2 GiB and 5 GiB, and the final pass after shutdown), OpenVDDK completed the four passes in 118 s. Every pass carried the same bytes with both libraries, V2K Migrate's data check passed, and the changed files hash identically in both migrated VMs. VMware's library took 330 s for the same four passes. At the time, every name lookup on our lab's workers waited 5 s for a DNS server that did not answer. VMware's library made four such lookups in each disk open (39 s, against 19 s once the DNS server was fixed); OpenVDDK's disk open looks up no name. V2K Migrate's own vCenter connections waited the same way with both libraries.

ESXi and vCenter 8.0.3. Read rate: worker VM with 3 vCPUs and 4 GiB, NFS 4.1 datastore backed by RAM over 100 GbE, single runs, 3 October 2026; the gain applies to a reader with one request in flight. Open and close: worker VM with 8 vCPUs, VMFS datastore on an iSCSI LUN, 8 October 2026.

A real migration on a storage array

Cold migration of a 200 GiB Windows Server 2019 VM with V2K Migrate: the disk is read over HotAdd from a NetApp NFS datastore and written as a qcow2 file to an NFS export on the same NetApp. Same V2K Migrate build, same VM, same worker, same settings; only the library file was swapped.

Copy rate, 200 GiB
537 MiB/s
VMware VDDK 8.0.3: 282 MiB/s
Copy phase
381 s
VMware VDDK 8.0.3: 727 s
Waiting for reads
~182 s
VMware VDDK 8.0.3: 594 s
Output images
Identical
qemu-img compare, both qcow2 files

Both runs wrote exactly the same data: 181.3 GB to the qcow2 file and 33.4 GB of zeros skipped. V2K Migrate's data check passed both times, and qemu-img compare of the two output files reported them identical. The copier reads a block, writes it, then reads the next one: with VMware's library it spent 594 of the copy's 727 seconds waiting for reads, with OpenVDDK about 182 of 381 seconds. Most of the time now goes to writing the qcow2 file.

The whole migration took 7 min 24 s with OpenVDDK and 15 min 2 s with VMware's library. The same 5 s name-lookup wait applied: VMware's library made four lookups in its disk open and one in each of its seven allocated-block queries. Closing the disk, reading and the copy figures above were not affected.

Worker journal with OpenVDDK 0.6.7: connection, sign-in, disk attached in 890 ms and verified as /dev/sdb by disk ID, seven allocated-block queries in the same second, progress lines at 100 and 200 GiB, data check, detach in 5.3 s.
OpenVDDK 0.6.7. Disk attached in 0.9 s and verified in the guest by its disk ID, seven allocated-block queries within one second, detached in 5.3 s.

Screenshot: the V2K Migrate worker's journal, filtered and shortened with the command shown at the top; internal names in the command are covered with grey bars. OpenVix: was the library's development log prefix up to 0.6.7; from 0.6.8 on it logs OpenVDDK: VixDiskLib: …. The MiB/s figure printed inside the log ("inside Read") counts only the time the application spent inside the library's read calls; with read-ahead the data is mostly in memory before it is asked for, so it is not a transfer rate. The real rate is the copy rate above.

ESXi and vCenter 8.0.3; worker VM with 3 vCPUs and 4 GiB on the source VM's host; NetApp NFS v3 datastore, destination over NFS 4.2 with 1 MiB transfers. Single run per library, 4 October 2026. The source datastore's NFS version made no difference: the same disk on an NFS 4.1 datastore of the same NetApp gave the same read rate.

How the hardware behaved

The worker VM and its ESXi host were sampled every two seconds during both runs. The full side-by-side profiler report is linked below; the main figures:

OpenVDDKVMware VDDK 8.0.3
Disk reads inside the worker, average / peak461 / 967 MiB/s227 / 616 MiB/s
Worker CPU busy, average37.8 %18.4 %
Worker memory used, average0.73 GiB0.70 GiB
ESXi host CPU, average12.9 %11.5 %
Read latency per request at ESXi, average18.8 ms2.5 ms
Show the eight charts

Data written to the destination, MiB/s

OpenVDDK
OpenVDDK destination write rate over migration elapsed time, in MiB/s.
VMware VDDK 8.0.3
VMware VDDK destination write rate over migration elapsed time, in MiB/s.

Data read from the source disk, MiB/s

OpenVDDK
OpenVDDK source disk read rate over migration elapsed time, in MiB/s.
VMware VDDK 8.0.3
VMware VDDK source disk read rate over migration elapsed time, in MiB/s.

Worker CPU busy, %

OpenVDDK
OpenVDDK worker CPU busy percentage over migration elapsed time.
VMware VDDK 8.0.3
VMware VDDK worker CPU busy percentage over migration elapsed time.

Read latency per request at ESXi, ms

OpenVDDK
OpenVDDK ESXi read latency per request over migration elapsed time, in milliseconds.
VMware VDDK 8.0.3
VMware VDDK ESXi read latency per request over migration elapsed time, in milliseconds.

Both graphs of a pair share the same time axis, in seconds from the start of each migration plan; the grey area is the time after the OpenVDDK run had already finished. VMware's run starts copying later, partly because of the name-lookup waits described above.

Full profiler report (both runs side by side)

NBDSSL and NBD on vSphere 8.0.3

The same disks read over the network transports, with the tools that use them: nbdkit's VDDK plugin with virt-v2v's settings, and virt-v2v itself. Same worker, same disks; only the library file was swapped.

virt-v2v conversion, copy phase (NBDSSL)
93 s
VMware VDDK 8.0.3: 118–121 s
NBDSSL, one reader, NetApp NFS datastore
188 MiB/s
VMware VDDK 8.0.3: 132 MiB/s
NBD, one reader, VMFS on a RAM-backed LUN
264 MiB/s
VMware VDDK 8.0.3: 217 MiB/s
Data over all three transports
Identical
SHA-256 of every disk, both libraries

In these tests, both libraries read the same bytes over HotAdd, NBDSSL and NBD, with the same allocated-block maps, the same metadata and the same error codes. virt-v2v converted the guest with either library, every connection over NBDSSL. With one reader at a time OpenVDDK was 14 to 42 % faster; with four readers of one disk at once the two were on par, the difference going either way with the load on the storage.

In one four-reader NBDSSL-only test on vSphere 8.0.3 (9 October 2026), three of the four connections made with VMware VDDK 8.0.3 used clear-text NBD without reporting an error. OpenVDDK kept all four connections on NBDSSL.

ESXi and vCenter 8.0.3; worker VM with 8 vCPUs and 16 GiB; a NetApp NFS v3 datastore and a VMFS datastore on a RAM-backed iSCSI LUN; 20 GiB disks; nbdkit 1.38.5 with virt-v2v's filters and 64 requests in flight, virt-v2v 2.7.1. Copy-phase figures from two runs (9 and 15 October 2026), read rates from one series (9 October 2026), each library run twice in alternating order. Measured on a worker whose CPU exposes AES instructions, as servers and most virtual machines do.

Where VMware's library was faster

Built alongside V2K Migrate

V2K Migrate control plane dashboard: running plans, appliances and gateways online, and the state of each active migration (interactive demo, synthetic data).
The V2K Migrate control plane, here in the beta 5 interactive demo with synthetic data: plans, appliances and the state of every migration, from the first copy through warm passes to cutover. OpenVDDK is developed and tested alongside it.

V2K Migrate

Validated with

OpenVDDK loads where VMware's VDDK library loads. These tools have used it as a drop-in, with no change to the tool itself.

ToolMigrates intoTested by
Apache CloudStack's VMware import (virt-v2v with nbdkit's VDDK plugin)Apache CloudStack (KVM), cold and warmThe OpenVDDK project
virt-v2v, VDDK inputKVMThe OpenVDDK project
nbdkit VDDK plugin, with nbdcopy and qemu-imgAny target nbdkit can writeThe OpenVDDK project
V2K MigrateApache CloudStack, Proxmox VE; cold and warm with changed block trackingThe OpenVDDK project; in production at a German cloud provider
MigrateKit (VEXXHOST)OpenStackThe OpenVDDK project
Forklift with KubeVirt's disk importerKubeVirt, cold and warmAn independent tester
Migration Toolkit for Virtualization (MTV) on OpenShiftOpenShift Virtualization, cold and warmAn independent tester
A Proxmox VE migration pipeline (nbdkit's VDDK plugin)Proxmox VE, cold and warmAn independent tester
A custom migration tool built on nbdkit (NBD and NBDSSL)KVMAn independent tester
A custom fork of MigrateKitApache CloudStack, production migrationsAn independent tester

Project tests cover vSphere 6.7, 7.0 and 8.0 with HotAdd, NBDSSL and NBD. Coverage varies by tool and tester; not every tool was tested across every version or transport. Tested with something else? Tell us in a GitHub issue and we'll add it.

Tested by our partners

Companies that have tested OpenVDDK in their own environments.

Logos are shown with each company's permission and reflect their own testing of OpenVDDK.
They do not mean that OpenVDDK is part of their products, or that they endorse it.

Where it stands

AreaStateNotes
LicenceApache 2.0, open sourceApache License 2.0. Use it, build it, ship it, fork it.
Latest release0.7.429 October 2026; user and developer kits available on GitHub
HotAdd transport, readWorking (released in 0.7.4)Cold and warm migrations, CBT incremental passes, snapshot chains, virtual-mode RDMs, several disks in parallel, workers with or without disk IDs. The LVM safety check before a HotAdd attach runs once per process and again only when LVM's configuration changes.
NBD and NBDSSL transportsWorking (released in 0.7.4)Compared with VMware's library in the tested cases on vSphere 6.7, 7.0.3 and 8.0.3: same data, same allocated-block maps and metadata, same error codes; virt-v2v conversions; network faults and endurance tests of 20,000 cycles. Listed by the library as hotadd:nbdssl:nbd, in VMware's order. Transport lists are read as VMware's library reads them; skipz compression is honoured. VMware's NFC tuning keys (buffer size and count, read timeout, socket buffers, tmpDirectory, log levels) are honoured as VMware's library honours them, and keys the library does not act on are named in a warning at start-up. An unreachable host is answered within 10 s with VMware's own error code (14009). Upstream Migratekit (VMware to OpenStack) completes end-to-end migrations with OpenVDDK.
Direct ESXi connections (NBDSSL, NBD)Working (0.7.4)Read disks directly from an ESXi host, including a standalone host without vCenter.
HotAdd on a standalone ESXi hostConsidered for 0.7.5Not available in 0.7.4. Use NBDSSL or NBD for a direct ESXi connection.
SAN transportNot implementedDeliberately left out of scope. Contact us if you need it.
Writing to disks (restores)Not plannedRead-only by design: OpenVDDK reads disks for backup and migration. Write calls return the same read-only error as VMware's library.
PlatformLinux x86-64glibc 2.28 and newer; tested on Enterprise Linux 8 and 9. For hardware-accelerated NBDSSL, the reader's CPU must expose the aes and pclmulqdq flags; software decryption is used otherwise
vSphere6.7, 7.0.3, 8.0.36.7 Update 3; 6.5 is not supported for now
Crash safetyTestedProcess killed at every step of attach and detach; the next run cleans up
Negative, failure and scale testsMostly doneDone: duplicate proxies, lost vCenter sessions, full SCSI controllers, disks up to 3 TiB, virtual-mode RDMs, network faults, long endurance tests, 17 disks on one worker, two readers on one disk at once. Remaining: encrypted VMs, larger multi-VM runs
Software bill of materialsIncludedThe GitHub release includes an SPDX SBOM of the library and its tools

What comes next

OpenVDDK is free and will stay free. Download the kits from the GitHub release: a user kit for running existing tools, a developer kit for writing your own. Or build it from source.

Get OpenVDDK by email, or stay in touch

Subscribe for a personal download link and occasional release news. Tell us which software or project you would like to use it with. Personal download links from get.openvddk.com remain available.

Also on GitHub. Found a bug or tested it with your tool? Open a GitHub issue. Security reports: see SECURITY.md for private reporting via [email protected] or GitHub's private reporting where enabled.