paperbot · PL 论文追踪

全部论文 待读 收藏

P2 Functional Networking for Millions of Docker Desktops (Experience Report)

服务于数百万 Docker 桌面的函数式网络(经验报告)
ICFP 9(ICFP)2025匹配度 2/10 · 论文是 OCaml unikernel 在 Docker Desktop 网络栈中的十年生产经验,属于函数式系统编程与工业落地,但与用户核心方向(LLM/Agent 与静态分析、浮点/贝叶斯程序分析)无直接交集,仅提供 PL 工程落地视角。引用 16 inbox
Anil Madhavapeddy, David J. Scott, Patrick Ferris, Ryan T. Gibb, Thomas Gazagnaire
crossref: 2026-09-10

AI 速览

一句话:总结 Docker Desktop 用 OCaml unikernel 在非 Linux 主机上支撑容器网络十年的工程经验。

本文是一篇经验报告,关注 Docker Desktop 如何在 Mac 和 Windows 等非 Linux 主机上无缝运行 Linux 容器。其方法是将虚拟化与 OCaml unikernel 结合,把函数式 OCaml 代码深度集成到容器架构中。作者回顾了十年来将该代码发布到数亿级开发者桌面上的生产实践,讨论了这一过程中的工程教训。结论指出,unikernel 方法非常适合系统编程,尤其是与 OCaml 的模块系统和类型系统结合时。

问题
如何让 Mac 和 Windows 等非 Linux 主机上的 Docker Desktop 无缝运行 Linux 容器,并提供可靠的网络支持。
方法
采用虚拟化与 OCaml unikernel 相结合的方式,将 OCaml 代码深度集成到容器架构中,并长期投入生产环境使用。
评估
基于十年间在数亿级开发者桌面上发布和维护该代码的实践经验,总结工程教训,并评估 unikernel 与 OCaml 模块/类型系统在系统编程中的适用性。
原文摘要(Abstract)

Docker is a developer tool used by millions of developers to build, share and run software stacks. The Docker Desktop clients for Mac and Windows have long used a novel combination of virtualisation and OCaml unikernels to seamlessly run Linux containers on these non-Linux hosts. We reflect on a decade of shipping this functional OCaml code into production across hundreds of millions of developer desktops, and discuss the lessons learnt from our experiences in integrating OCaml deeply into the container architecture that now drives much of the global cloud. We conclude by observing just how good a fit for systems programming that the unikernel approach has been, particularly when combined with the OCaml module and type system.

链接与引用

DOI 原文 · PDF(开放获取) ·

BibTeX
@article{paperbot3037,
  title = {Functional Networking for Millions of Docker Desktops (Experience Report)},
  author = {Anil Madhavapeddy and David J. Scott and Patrick Ferris and Ryan T. Gibb and Thomas Gazagnaire},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {9},
  number = {ICFP},
  year = {2025},
  doi = {10.1145/3747525}
}