
JIT-आधारित यूज़रस्पेस लिनक्स कर्नेल जो बिना VM के Apple Silicon macOS पर मूल रूप से कंटेनर चलाता है। ड्रॉप-इन Docker Engine API प्रतिस्थापन जिसमें कंटेनर अलगाव, ओवरले इमेज और पोर्ट प्रकाशन शामिल है।
macOS पर Linux कंटेनर चलाएँ — बिना किसी VM के।
dd Apple-Silicon macOS पर बिना किसी वर्चुअल मशीन के मूल रूप से Linux कंटेनर चलाता है। इसके नीचे कोई Linux कर्नेल या हाइपरवाइज़र नहीं है: एक JIT कंटेनर के कोड का अनुवाद करता है और इसके Linux syscalls को userspace में सेवा प्रदान करता है (gVisor / PRoot वंशावली)। JIT ही अतिथि का Linux कर्नेल है — नेमस्पेस, cgroups, ओवरले इमेज लेयर और नेटवर्किंग को userspace स्थिति के रूप में बनाए रखा जाता है। यह Docker Engine API बोलता है, इसलिए सामान्य docker CLI इसे चलाता है।
कंटेनर का compute मूल Apple-Silicon निर्देशों के रूप में चलता है; केवल इसके syscalls की व्याख्या की जाती है। बूट करने के लिए कोई VM नहीं, VM में कोई डेमन नहीं, कोई वर्चुअलाइज़ेशन लागत नहीं।
वेबसाइट और दस्तावेज़: https://ricccrd.github.io/dd/
make jit # build.rs JITs को संकलित और कोडसाइन करता है
DD_IMAGES=/path/to/images cargo run -p dd-daemon # डेमन शुरू करें
export DOCKER_HOST=unix://$PWD/dd.sock
docker run -p 8080:80 -m 256m alpine sh -c 'echo hi from $(hostname)'
DOCKER_HOST को इसके सॉकेट पर इंगित करें और आपके मौजूदा docker run / ps / images / build कमांड बिना किसी बदलाव के काम करते हैं।jit86) के माध्यम से x86-64 Linux इमेज जो x86 को डिकोड करता है, इसके फ़्लैग्स को संश्लेषित करता है, और SSE/x87 को NEON पर कम करता है (glibc बाइनरी चलती हैं); और macOS arm64 अतिथि (ddcli mac) — इनमें से किसी में भी कोई VM नहीं।.wh. व्हाइटआउट, मर्ज किया गया getdents), एक TOCTOU-मुक्त पथ-जेल VFS, PID / UTS / USER नेमस्पेस, -p पोर्ट पब्लिशिंग के साथ एक निजी लूपबैक netns, और cgroup मेमोरी + pids सीमाएँ (सीमा पर OOM)।dd CLI एक प्रति-उपयोगकर्ता बैकग्राउंड डेमन और एक docker context स्थापित करते हैं — सब कुछ $HOME के अंतर्गत, कभी sudo नहीं।Mac पर Linux कंटेनर चलाने का हर दूसरा तरीका — Docker Desktop, Colima, Rancher, OrbStack — एक हाइपरवाइज़र के नीचे एक Linux VM बूट करता है और उसके अंदर डेमन चलाता है। वह VM एक कर है जो आप पूरे दिन चुकाते हैं। dd इसे हटा देता है: एक कंटेनर एक सामान्य macOS प्रक्रिया है जिसके syscalls एक userspace Linux कर्नेल द्वारा सेवा किए जाते हैं।
| dd — userspace कर्नेल (JIT) | VM-आधारित Docker (Desktop / Colima / …) | |
|---|---|---|
| अंतर्निहित मॉडल | एक JIT userspace में Linux syscalls की सेवा करता है (gVisor वंशावली) | हाइपरवाइज़र VM के अंदर एक पूर्ण Linux कर्नेल |
| निष्क्रिय होने पर निवासी RAM | कोई नहीं — प्रति-कंटेनर, बाहर निकलने पर मुक्त | गीगाबाइट्स VM के लिए आरक्षित, हमेशा चालू |
| स्टार्टअप | प्रक्रिया स्पॉन — बूट करने के लिए कोई VM नहीं | पहले एक Linux VM + VM-आंतरिक डेमन को बूट करें |
| बाइंड-माउंट / फ़ाइल I/O | पथ जेल के माध्यम से सीधा होस्ट फ़ाइल सिस्टम | VM सीमा के पार virtiofs/gRPC-FUSE ब्रिज |
| पोर्ट पब्लिशिंग | सीधे होस्ट सॉकेट पर | VM के NAT/फ़ॉरवर्डिंग लेयर के माध्यम से |
| बैटरी / बैकग्राउंड लागत | जब कोई कंटेनर नहीं चल रहा हो तो कुछ नहीं चल रहा | एक VM निष्क्रिय और बैटरी खत्म कर रहा है |
| शिप और पैच करने का पदचिह्न | कोई Linux कर्नेल नहीं — CVE-ट्रैक करने के लिए कुछ नहीं | एक पूर्ण Linux कर्नेल शिप, पैच और ट्रैक करता है |
| अवलोकनीयता | एक सामान्य macOS प्रक्रिया — sample, debug, Activity Monitor | एक अपारदर्शी VM; वर्कलोड होस्ट टूल्स के लिए अदृश्य है |
जीत संरचनात्मक है: अतिथि का compute मूल Apple-Silicon निर्देशों के रूप में चलता है (हॉट पथ में कोई हार्डवेयर-वर्चुअलाइज़ेशन लेयर नहीं), और कुख्यात Docker-Desktop फ़ाइल-शेयरिंग अड़चन — macOS और VM के बीच virtiofs/FUSE ब्रिज — बस मौजूद नहीं है, क्योंकि dd का VFS है होस्ट फ़ाइल सिस्टम एक पथ जेल के पीछे।
ईमानदार समझौता: एक userspace कर्नेल केवल उतना ही पूर्ण है जितने कि वह syscalls लागू करता है, और आज डिफ़ॉल्ट रूप से अतिथि एक प्रक्रिया में चलता है — तेज़, और उस कोड के लिए सही कॉल जिस पर आप भरोसा करते हैं (आपका देव वातावरण, CI, आपके अपने टूल्स)। अविश्वसनीय कोड के लिए अब एक ऑप्ट-इन सेंट्री स्प्लिट है (
DDJIT_UNTRUSTED): अतिथि एक डिफ़ॉल्ट-अस्वीकार Seatbelt सैंडबॉक्स में चलता है जिसमें कोई होस्ट fs/net अधिकार नहीं है, जबकि एक विश्वसनीय sentry प्रक्रिया वास्तविक संसाधनों की मालिक है और एक साझा-मेमोरी रिंग — gVisor आकार — में syscalls की सेवा करती है। यह शुरुआती है (कोर फ़ाइल syscalls — read/write/open/close/lseek — आज आगे बढ़ते हैं; sockets/exec/fork आ रहे हैं), इसलिए पूरी तरह से शत्रुतापूर्ण कोड के लिए एक VM अभी भी एक संकीर्ण सतह उजागर करता है।
एक ही स्थैतिक Linux बाइनरी, दो तरीकों से चलाई गई एक Apple M5 Pro (macOS 26.3) पर: Linux VM के अंदर (VM-आधारित Docker कंटेनर कैसे चलाता है) बनाम dd के JIT के माध्यम से होस्ट पर बिना VM के। 7 का माध्य (make bench)। कम समय बेहतर है; "dd बनाम VM" > 1× का अर्थ है dd तेज़ है। dd लेन एक छोटा क्रॉस-प्रोसेस ब्रिज टैक्स भी चुकाता है जो वास्तविक ऐप नहीं करता — इसलिए ये रूढ़िवादी हैं।
x86-64 कंटेनर — dd बनाम VM एमुलेशन (qemu-user; Apple Silicon पर x86 चलाने का अर्थ है इसे अनुवाद करना किसी भी तरह से)। dd का JIT 10 में से 9 वर्कलोड पर qemu को हराता है, विशेष रूप से फ़्लोटिंग-पॉइंट पर नाटकीय रूप से:
| वर्कलोड | VM (qemu) | dd (बिना VM) | dd बनाम VM |
|---|---|---|---|
| float n-body | 5.39s | 0.23s | 24× तेज़ |
| mandelbrot | 7.81s | 0.83s | 9.4× तेज़ |
| matmul | 8.21s | 1.37s | 6.0× तेज़ |
| SQLite (600k पंक्तियाँ) | 2.99s | 1.01s | 3.0× तेज़ |
| qsort | 3.91s | 1.68s | 2.3× तेज़ |
| memcpy | 2.40s | 1.10s | 2.2× तेज़ |
| text-scan (wc/grep) | 1.42s | 1.11s | 1.3× तेज़ |
| int sieve | 1.31s | 1.04s | 1.25× तेज़ |
| SHA-256 | 2.72s | 2.44s | 1.1× तेज़ |
| base64 | 4.28s | 5.39s | 0.79× (1.26× धीमा) |
aarch64 कंटेनर — dd बनाम एक मूल VM (VM arm64 को पूर्ण मूल गति पर चलाता है — सबसे कठिन बार):
| वर्कलोड | VM (मूल) | dd (बिना VM) | dd बनाम VM |
|---|---|---|---|
| int sieve | 0.75s | 0.48s | 1.58× तेज़ |
| mandelbrot | 0.79s | 0.77s | 1.03× तेज़ |
| matmul | 0.66s | 0.66s | ~समानता |
| memcpy | 0.55s | 0.56s | ~समानता |
| base64 | 0.68s | 0.68s | ~समानता |
| float n-body | 0.17s | 0.17s | ~समानता |
| SHA-256 | 0.80s | 0.82s | ~समानता |
| qsort | 0.83s | 1.10s | 1.33× धीमा |
| text-scan (wc/grep) | 0.51s | 0.68s | 1.35× धीमा |
| SQLite (600k पंक्तियाँ) | 0.36s | 0.62s | 1.71× धीमा |