العودة إلى التحديثات
New releaseSep 13, 2026

smolvm v1.15.0

آلة افتراضية قابلة للتضمين، ومحمولة، وقابلة للتفرع لتشغيل الوكلاء محليًا بأمان.

مشاركة

smol machines

Discord Release License npm PyPI crates.io

smolvm

أجهزة افتراضية دقيقة قابلة للتفرّع لوكلاء الذكاء الاصطناعي. ضمّن أجهزة افتراضية خفيفة داخل برمجياتك، وبيئات تطوير محمولة، وعزل محلي.

التثبيت

curl -sSL https://smolmachines.com/install.sh | bash   # macOS + Linux

Windows: فك ضغط إصدار windows-x86_64 release وشغّل smolvm.exe (يتطلب Windows Hypervisor Platform). وكلاء البرمجة: شغّل smolvm --help بعد التثبيت لاكتشاف كل الأوامر.

البدء السريع

smolvm machine run --net --image alpine -- uname -a          # one-off VM, removed on exit
smolvm machine run --net -it --image alpine -- /bin/sh       # interactive shell

محلي

أجهزة افتراضية حقيقية بنواة خاصة بها، مجانية على حاسوبك المحمول أو خوادمك الخاصة. تُقلع في أقل من ثانية، والذاكرة مرنة، لذا لا يلتزم المضيف إلا بما يستخدمه الضيف. تبقى الأجهزة بعد إعادة التشغيل، وأي صورة OCI تعمل، بما في ذلك الصور التي تبنيها محليًا.

smolvm machine create --net --name dev && smolvm machine start --name dev
smolvm machine exec --name dev -- apk add git
docker save myapp | smolvm machine run --image - -- ./app    # local image, no registry

عرّف جهازًا في Smolfile: الصورة، والموارد، والمنافذ، ونقاط التركيب، وسياسة الشبكة في ملف واحد مُدار.

قابل للتضمين

شغّل الأجهزة من كودك الخاص عبر واجهة Machine واحدة. تعمل حزم SDK داخل عمليتك دون خادم خفي، محليًا أو على smol cloud.

npm install smolmachines     # Node / TypeScript
pip install smolmachines     # Python
cargo add smolmachines       # Rust
import { Machine } from 'smolmachines';

const m = await Machine.create({ image: 'python:3.12-alpine', network: true });
const r = await m.exec(['python3', '-c', 'print(2 ** 10)']);
console.log(r.stdout); // 1024
await m.delete();

المصدر والتوثيق: smol-machines/smol · smolmachines.com/docs/sdk

قابل للتفرّع

احفظ جهازًا قيد التشغيل في منتصف التنفيذ، أو أرجعه، أو فرّعه إلى نسخ تستمر في العمل من النقطة نفسها. تلتقط نقاط التحقق الذاكرة وحالة المعالج والأقراص؛ والفروع هي أبناء نسخ عند الكتابة لجهاز حي.

smolvm machine create --net --name agent --image alpine
smolvm machine start --name agent --branchable
smolvm machine branch --from agent --name try-1                   # live copy-on-write child
smolvm machine checkpoint --name agent -o agent.checkpoint        # save it, processes and all
smolvm machine create --name agent2 --from agent.checkpoint       # resume later or elsewhere

أعد الرجوع إلى جيل سابق باستخدام --from <checkpoint> --at '~N' (انظر machine checkpoint-log)، وأوقف دون فقدان التنفيذ عبر pause and resume. المزيد في Branching وincremental checkpoints.

محمول

احزم جهازًا، بأي طريقة أعددته بها، في ملف .smolmachine واحد. ادفعه إلى أي سجل OCI، أو شغّله كملف تنفيذي مكتفٍ ذاتيًا يُقلع في أقل من 200 مللي ثانية دون أي شيء لتثبيته.

smolvm machine stop --name dev && smolvm pack create --from-vm dev -o dev
smolvm pack push --file dev.smolmachine ghcr.io/you/dev:v1
smolvm pack create --image python:3.12-alpine -o ./python312
./python312 run -- python3 --version

نقاط التحقق محمولة أيضًا: استعد واحدة على مضيف آخر أو على smol cloud.

آمن

يحصل كل عبء عمل على جهاز افتراضي معزول عتاديًا بنواة خاصة به. الشبكة معطّلة افتراضيًا، ويمكن تقييد الاتصال الصادر بمضيفين محددين، ويمكن للكود استخدام بيانات اعتماد دون قراءتها أبدًا.

الأمان مسؤولية مشتركة. يوفر smolvm الحدود: جهاز افتراضي ونواة منفصلان لكل عبء عمل، دون وصول أي شيء إلى المضيف إلا إذا سمحت بذلك. أنت تقرر ما يعبر تلك الحدود. كل مجلد تركّبه، ومنفذ تفتحه، ومضيف تسمح به، وسر أو وكيل SSH تمرّره يصبح شيئًا يمكن لعبء العمل استخدامه، لذا امنح عبء عمل غير موثوق فقط ما يحتاجه.

smolvm machine run --net --image alpine --allow-host registry.npmjs.org -- wget -qO- https://google.com   # blocked
smolvm machine run --net --image alpine --allow-host-pattern registry.npmjs.org -- wget -qO- https://registry.npmjs.org   # exact host only
NOTION_API_KEY=secret_… smolvm machine run --net --image alpine \
  --credential [email protected] -- sh -c 'echo $NOTION_API_KEY'   # a placeholder

انظر credential substitution وsecurity model. استخدم --allow-host-pattern '*.example.com' للسماح بالنطاقات الفرعية فقط. الأمر الأقدم --allow-host example.com يستمر في السماح بالنطاق الجذر والنطاقات الفرعية معًا. يمكن تغيير قائمة السماح لجهاز متوقف عبر smolvm machine update (--allow-host، و--allow-host-pattern، و--allow-cidr وصيغ --remove- الخاصة بها).

كيف يعمل

يعمل كل عبء عمل في جهاز افتراضي مُعزّز عتاديًا بنواة ضيف خاصة به على Hypervisor.framework (macOS)، أو KVM (Linux)، أو Windows Hypervisor Platform (Windows). libkrun هو VMM وlibkrunfw يوفر نواة الضيف. تستخدم الصور صيغة OCI، لذا أي شيء على Docker Hub أو ghcr.io أو أي سجل آخر يُقلع كجهاز افتراضي دقيق، دون خادم Docker خفي.

الإعدادات الافتراضية: 4 vCPUs، و8 GiB RAM. الذاكرة مرنة عبر virtio balloon ووحدات vCPU الخاملة تنام في الهايبرفايزر، لذا فإن التخصيص الزائد لا يكلف شيئًا تقريبًا. تجاوز ذلك عبر --cpus و--mem.

المقارنة

smolvmContainersColimaQEMUFirecrackerKata
Workload boundaryVM + guest kernelNamespace + shared kernelNamespace inside shared VMVM + guest kernelVM + guest kernelVM per container
Boot time<200ms~100ms~seconds~15-30s<125ms~500ms
ArchitectureLibrary (libkrun)DaemonDaemon (in VM)ProcessProcessRuntime stack
Per-workload VMsYesNoNo (shared)YesYesYes
macOS nativeYesVia Docker VMYes (krunkit)YesNoNo
Embeddable SDKYesNoNoNoNoNo
Portable artifacts.smolmachineImages (need daemon)NoNoNoNo

دعم المنصات

الفئات