Time-travelling sandbox.
django-14011seed 7illustrative
main drops the test database; request still holds a connection to it.
Secure by design.
dvm runs your Docker images unmodified, on a secure kernel-hypervisor co-design sandbox.
Virtual machines gen 1
1999–2013
A whole Linux on a heavy hypervisor, for every sandbox.
Containers gen 2
2013–2018
Docker images on one Linux kernel, shared by every sandbox.
MicroVMs gen 3
2018–2026
Each Docker image on its own Linux, on a VMM built apart from it.
dvm gen 4
2026–
Each Docker image on dvm, a kernel and hypervisor written together, from scratch.
Run once, replay everywhere.
Replay a run later, on another machine, and it is the same run.
runseed 7
replayright awaysame run
replayanother machinesame run
replaylatersame run
Rewind to every instruction.
Stop a run at any instruction, and read every thread’s stack and any address in its memory.
Thread main
- #0_create_test_dbdjango/db/backends/base/creation.py
- #1create_test_dbdjango/db/backends/base/creation.py
- #2setup_databasesdjango/test/utils.py
- #3run_testsdjango/test/runner.py
- #4django_teststests/runtests.py
- #0run_checksdjango/core/checks/registry.py
- #1run_checksdjango/test/runner.py
- #2run_testsdjango/test/runner.py
- #3django_teststests/runtests.py
- #0readintosocket.py
- #1beginhttp/client.py
- #2urlopenurllib/request.py
- #3test_viewtests/servers/tests.py
- #4run_suitedjango/test/runner.py
- #5run_testsdjango/test/runner.py
- #6django_teststests/runtests.py
- #0rununittest/runner.py
- #1run_suitedjango/test/runner.py
- #2run_testsdjango/test/runner.py
- #3django_teststests/runtests.py
- #0executedjango/db/backends/utils.pyDROP DATABASE "test_django"
- #1_destroy_test_dbdjango/db/backends/base/creation.py
- #2destroy_test_dbdjango/db/backends/base/creation.py
- #3teardown_databasesdjango/test/utils.py
- #4run_testsdjango/test/runner.py
- #5django_teststests/runtests.py
- #0executedjango/db/backends/utils.pyDROP DATABASE "test_django"
- #1_destroy_test_dbdjango/db/backends/base/creation.py
- #2destroy_test_dbdjango/db/backends/base/creation.py
- #3teardown_databasesdjango/test/utils.py
- #4run_testsdjango/test/runner.py
- #5django_teststests/runtests.py
- #0executedjango/db/backends/utils.pyDROP DATABASE "test_django"
- #1_destroy_test_dbdjango/db/backends/base/creation.py
- #2destroy_test_dbdjango/db/backends/base/creation.py
- #3teardown_databasesdjango/test/utils.py
- #4run_testsdjango/test/runner.py
- #5django_teststests/runtests.py
exited
Thread request
not started
not started
holds a database connection
- #0log_messagedjango/core/servers/basehttp.py
- #1handle_one_requestdjango/core/servers/basehttp.py
- #2handledjango/core/servers/basehttp.py
- #3finish_requestsocketserver.py
- #4process_request_threadsocketserver.py
- #5runthreading.py
holds a database connection
- #0readintosocket.pywaits for the next request
- #1handle_one_requestdjango/core/servers/basehttp.py
- #2handledjango/core/servers/basehttp.py
- #3finish_requestsocketserver.py
- #4process_request_threadsocketserver.py
- #5runthreading.py
holds a database connection
- #0readintosocket.pywaits for the next request
- #1handle_one_requestdjango/core/servers/basehttp.py
- #2handledjango/core/servers/basehttp.py
- #3finish_requestsocketserver.py
- #4process_request_threadsocketserver.py
- #5runthreading.py
- #0shutdown_requestsocketserver.py
- #1process_request_threadsocketserver.py
- #2runthreading.py
exited
exited
0x7f3c2a40e010main’s send buffer
0x7f3c2a412020main’s receive buffer
Observability reimagined.
dvm logs 1000× less data, yet reproduces every instruction, memory value, and packet.
dvm shows20 nsof the run’s 400 ms
Audit everything.
dvm audits every external event, and blocks every unauthorized interaction.
from one run12,480 requests
hostspypi.org, api.github.com
−1,906
IP ranges10.0.0.0/8
−812
files/workspace/**
−1,240
hours09:00–18:00 UTC
−433
requestsat most 500 a minute
−1,127
6,962 allowed5,518 blocked