{
  "slug": "zero-copy",
  "term": "Zero-copy I/O",
  "aliases": [],
  "definition": "Zero-copy I/O is a data-transfer technique that avoids one or more payload copies between buffers or address spaces.",
  "note": "The avoided copy and the buffer-reuse boundary depend on the API and path. A sendfile return does not release the caller from keeping referenced source regions unchanged until consumption. [sendfile]\n\nMSG_ZEROCOPY is a separate socket interface with buffer-reuse notifications; these are not transmit-completion notifications, and the kernel can still copy the data. [msg-zerocopy]\n\nIO-Lite (OSDI 1999) combined copy avoidance with immutable buffers and mutable buffer aggregates; source stability was part of that design, not a consequence of the term zero-copy. [io-lite]",
  "status": "shipping",
  "advantages": [],
  "limitations": [],
  "related": [
    "sendfile",
    "splice",
    "page-cache",
    "direct-io"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "citations": [
    {
      "id": "sendfile",
      "title": "Linux man-pages 6.19: sendfile(2), return value and source lifetime",
      "url": "https://man7.org/linux/man-pages/man2/sendfile.2.html",
      "accessed": "2026-10-17"
    },
    {
      "id": "msg-zerocopy",
      "title": "Linux kernel documentation: MSG_ZEROCOPY, notifications and deferred copies",
      "url": "https://docs.kernel.org/networking/msg_zerocopy.html",
      "accessed": "2026-10-17"
    },
    {
      "id": "hesela-lifetime",
      "title": "Hesela: Zero-copy transfers do not freeze source bytes",
      "url": "https://hesela.com/analyses/zero-copy-source-lifetime/",
      "accessed": "2026-10-18"
    },
    {
      "id": "io-lite",
      "title": "Pai, Druschel and Zwaenepoel: IO-Lite, OSDI 1999, sections 2.1, 2.5, 2.9 and 3",
      "url": "https://www.usenix.org/legacy/publications/library/proceedings/osdi99/full_papers/pai/pai_html/pai.html",
      "accessed": "2026-10-18"
    }
  ],
  "updated": "2026-10-18"
}
