Smol machines – 1 saniyenin altında cold start ve taşınabilir sanal makine
(github.com/smol-machines)- smolvm, macOS ve Linux'ta çalışan, yazılımı izole ortamlarda çalıştırmak için kullanılan CLI tabanlı bir sanal makine yönetim aracıdır
- 1 saniyenin altında cold start, esnek bellek yönetimi ve tek dosyada taşınabilirlik desteğiyle hızlı ve hafif VM çalıştırma imkanı sunar
- VM'ler Linux çekirdeği tabanlı microVM olarak çalışır ve
.smolmachinedosyası olarak paketlenerek bağımlılık olmadan yeniden çalıştırılabilir - Hypervisor sınırı yalıtımı, SSH agent forwarding, Smolfile tabanlı ortam tanımı gibi özelliklerle geliştirme ve güvenlik ortamlarını birlikte destekler
- Docker daemon olmadan OCI image başlatmayı destekler; 200 ms'nin altında açılış süresi ve donanım düzeyinde yalıtım ile hafif sanallaştırma için bir alternatif sunar
Genel Bakış
- smolvm, izole bir ortamda yazılım çalıştırmak için kullanılan CLI tabanlı bir sanal makine yönetim aracıdır
- macOS ve Linux üzerinde çalışır; 1 saniyenin altında cold start, esnek bellek kullanımı ve taşınabilir tek dosya paketleme desteği sunar
- Her iş yükü, Linux çekirdeği tabanlı bir microVM içinde çalışır ve donanım düzeyinde yalıtım sağlar
.smolmachinedosyası olarak paketlenen VM'ler, aynı mimariye sahip platformlarda bağımlılık olmadan yeniden çalıştırılabilir
Başlıca Özellikler
-
Yerel sanal makine yönetimi ve çalıştırma
smolvm machine runkomutuyla özelleştirilmiş Linux VM çalıştırma- Cold start süresi 1 saniyenin altındadır ve hem macOS hem Linux desteklenir
- Bellek, virtio balloon ile esnek biçimde yönetilir; host'a yalnızca gerçek kullanım kadar bellek ayrılır
-
Taşınabilir tek dosya paketleme
- VM durumunu içeren
.smolmachinedosyasıyla farklı platformlarda yeniden oluşturulabilir - Tüm bağımlılıklar gömülüdür; kurulum gerektirmeden anında çalıştırılabilir, açılış süresi 200 ms'nin altındadır
- VM durumunu içeren
-
Güvenilmeyen kod için sandbox
- Hypervisor sınırı sayesinde host dosya sistemi, ağ ve kimlik bilgileri tamamen ayrılır
- Varsayılan olarak ağ devre dışıdır;
--allow-hostseçeneğiyle yalnızca belirli host'lara izin verilebilir
-
Kalıcı geliştirme VM'leri
machine create,start,stopkomutlarıyla VM oluşturma ve yönetme- Kurulan paketler yeniden başlatmadan sonra da korunur, bu da geliştirme ortamı olarak kullanım sağlar
-
SSH agent forwarding
- Host'un SSH agent'ı VM içine iletilir, ancak özel anahtarlar guest'e kopyalanmaz
--ssh-agentseçeneğiyle host üzerindeki SSH kimlik doğrulaması güvenli biçimde kullanılabilir
-
Smolfile tabanlı ortam bildirimi
- TOML biçimindeki
Smolfileile VM ayarları bildirimsel olarak tanımlanır - Image, ağ, başlatma komutları, volume ve kimlik doğrulama seçenekleri belirtilerek yeniden üretilebilir ortam yapılandırması oluşturulabilir
- TOML biçimindeki
Kullanım Örnekleri
-
Geçici VM çalıştırma
smolvm machine run --net --image alpine -- sh -c "echo 'Hello world'"- Kapanışta VM'in otomatik temizlendiği tek seferlik çalıştırma biçimi
-
Paketlenmiş çalıştırılabilir dosya oluşturma
smolvm pack create --image python:3.12-alpine -o ./python312- Oluşturulan çalıştırılabilir dosyayla bağımsız bir Python ortamı çalıştırılabilir
-
Ağ kontrolü
- Varsayılan ağ devre dışıdır
--allow-hostseçeneğiyle yalnızca belirli alan adlarına erişime izin verilebilir
-
SSH ve Git kullanımı
smolvm machine run --ssh-agent --net --image alpine- Host'un SSH anahtarları güvenli şekilde kullanılarak Git deposuna erişilebilir
İç Yapı ve Çalışma Şekli
- Her iş yükü, Hypervisor.framework(macOS) veya KVM(Linux) üzerinde bağımsız bir çekirdek çalıştırır
- libkrun tabanlı VMM ve özel çekirdek(libkrunfw) kullanılır
- OCI image formatını destekler; Docker Hub, ghcr.io gibi kaynaklardan image'ları doğrudan çekip çalıştırabilir
- Docker daemon gerekmez; standart OCI image'ları doğrudan başlatabilir
- Varsayılan yapılandırma 4 vCPU, 8GiB RAM şeklindedir;
--cpus,--memseçenekleriyle ayarlanabilir - vCPU thread'leri, boşta kaldığında hypervisor tarafından otomatik olarak uykuya alınır; bu yüzden aşırı tahsis maliyeti neredeyse yoktur
Karşılaştırma
| Öğe | smolvm | Containers | Colima | QEMU | Firecracker | Kata |
|---|---|---|---|---|---|---|
| Yalıtım düzeyi | İş yükü başına VM | Namespace (paylaşımlı çekirdek) | Namespace (tek VM) | Ayrı VM | Ayrı VM | Container başına VM |
| Açılış süresi | <200ms | yaklaşık 100ms | birkaç saniye | 15~30 saniye | <125ms | yaklaşık 500ms |
| Mimari | Kütüphane(libkrun) | Daemon | VM içi daemon | Process | Process | Runtime stack |
| İş yükü başına VM | Desteklenir | Desteklenmez | Paylaşımlı | Desteklenir | Desteklenir | Desteklenir |
| macOS yerel desteği | Desteklenir | Docker VM üzerinden | krunkit tabanlı | Desteklenir | Desteklenmez | Desteklenmez |
| Yerleşik SDK | Desteklenir | Desteklenmez | Desteklenmez | Desteklenmez | Desteklenmez | Desteklenmez |
| Taşınabilir artifact | .smolmachine |
Daemon gerektiren image | Desteklenmez | Desteklenmez | Desteklenmez | Desteklenmez |
Platform Desteği
| Host | Guest | Gereksinimler |
|---|---|---|
| macOS Apple Silicon | arm64 Linux | macOS 11 ve üzeri |
| macOS Intel | x86_64 Linux | macOS 11 ve üzeri (testler tamamlanmadı) |
| Linux x86_64 | x86_64 Linux | KVM(/dev/kvm) gerekir |
| Linux aarch64 | aarch64 Linux | KVM(/dev/kvm) gerekir |
Bilinen Sınırlamalar
- Ağ varsayılan olarak devre dışıdır, yalnızca
--netseçeneğiyle etkinleştirilebilir - Yalnızca TCP/UDP desteklenir, ICMP desteklenmez
- Volume mount işlemi yalnızca dizin düzeyinde mümkündür; tek dosya desteklenmez
- macOS'ta yalnızca Hypervisor.framework yetkisiyle imzalanmış binary'ler çalıştırılabilir
--ssh-agentkullanılırken host üzerinde bir SSH agent çalışıyor olmalıdır (SSH_AUTH_SOCKayarı gereklidir)
Geliştirme
- Geliştirme yönergeleri
docs/DEVELOPMENT.mdiçinde bulunabilir - Apache-2.0 lisansı ile yayımlanmıştır ve @binsquare tarafından geliştirilmiştir
1 yorum
Hacker News yorumları
Docker container'ların yerini alacak bir sanal makine geliştiriyorum
container'ların kullanım kolaylığını aynen korurken 1 saniyenin altında başlangıç süresi hedefliyorum
AWS'de Firecracker ile ilgili çalışırken container'ların gereksiz bir katman olduğunu fark ettim ve Firecracker'ın da AWS'nin iç yapısına göre tasarlanmış bir teknoloji olduğunu gördüm
Bu yüzden container'ların avantajlarıyla Firecracker'ın avantajlarını birleştiren hibrit bir yapı yapmaya karar verdim
Görüşlerinizi duymak isterim
microVM'lerde genelde Docker ya da Kubernetes çalıştırılamaması sorun oluyordu
Ben tüm Kubernetes cluster'ını sandbox'ın içine koymak istiyorum. Acaba k3s çalıştırma desteği var mı?
Benzer sistemlerde hep eksik kalan bir özellik oluyor, ama cloud-native iş yüklerinin dışında da buna hâlâ ihtiyaç duyulan pek çok ortam var
Eğer bunu eklerseniz gerçekten farklılaştırıcı bir özellik olabilir
Firecracker macOS'ta çalışmadığı için, AI uygulamaları için microVM sandbox'larını kolayca oluşturmak istedim
Sıradan kullanıcı açısından Firecracker fazla ağır kalıyor
Ayrıca bu süreyi daha da düşürmek için şu anda hangi darboğazların bulunduğunu da öğrenmek isterim
Bu proje çeşitli unikernel uygulamalarına benziyor gibi geliyor — örneğin Unikraft gibi
Ama Smol Machines bir unikernel uygulaması değil, Linux kernel'in inceltilmiş bir sürümü
Bu yüzden çoğu yazılımla uyumluluğu yüksek
Kendi kendine yeten binary üretme özelliği, JVM uygulamalarını GraalVM Native'e göre daha basit paketlemenin bir yolu gibi görünüyor
Örnek komutlar:
smolvm pack create --image python:3.12-alpine -o ./python312./python312 run -- python3 --version→ Python 3.12.x tamamen izole şekilde çalışıyor; pyenv/venv/conda gerekmiyor
Electron web uygulamalarını tarayıcıyla birlikte dağıtırken, Smol Machines yazılımı Linux VM ile birlikte paketliyor
Böylece bağımlılık yönetimi ve uyumluluk sorunlarından kaçınılabiliyor
Bana kalırsa Codex ya da Claude Code gibi araçlar da bu şekilde dağıtılsa iyi olurdu
Bu, o sorunu çözmek için ortaya atılan bir 'dağıtılabilir makine' fikri
Bir kez düzgün kurduğunuzda herkesle anında paylaşılabilir ve çalıştırılabilir
.smolmachinedosyasının dijital imza ve self-attestation desteği olup olmadığını merak ediyorumSylabs'in imzalama/doğrulama belgelerinde olduğu gibi çalışabiliyor mu öğrenmek isterim
zeroboot fikrini uygularsanız daha da hızlanıp hızlanamayacağını merak ediyorum
Karşılaştırma tablosu gerçekten çok iyi hazırlanmış
İlk başta “Firecracker'a benziyor” diye düşünmüştüm ama tabloyu görünce farklar netleşti
Okuması kolaydı ve genel olarak çok etkileyici bir çalışma
CLI belgelerinde alpine ve python:3.12-alpine image'larını gördüm; bunların nereden geldiğini merak ediyorum
Docker registry gibi bir yerden mi çekiliyor, yerleşik mi geliyor, yoksa smolfile ile mi oluşturuluyor öğrenmek isterim
Ubuntu image'ları da var mı merak ediyorum
Bellek/CPU hot-resize özelliği eklenirse harika olur ve müşteri bazlı backend altyapısı orkestrasyonunda da işe yarayabilir
Açık kaynak projelerin çoğu Docker Compose ile container ayağa kaldırıyor ama Smol Machines microVM içinde Docker'ı desteklemiyor
Ayrıca Vagrant benzeri iç içe VM desteği de olmadığı için biraz eksik hissettiriyor
Bunun yerine Vagrant VM'nin kardeş VM'si olarak trampoline yöntemiyle çalıştırmayı öneriyorum
Docker sandbox yerine neden Smol Machines kullanmak gerektiğini, temel nedeni kısa şekilde açıklayabilir misiniz?
Gerçekten çok güzel bir iş çıkmış. Tebrikler