7 puan yazan GN⁺ 12 일 전 | 1 yorum | WhatsApp'ta paylaş
  • 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 .smolmachine dosyası 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
  • .smolmachine dosyası 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 run komutuyla ö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 .smolmachine dosyası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
  • 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-host seçeneğiyle yalnızca belirli host'lara izin verilebilir
  • Kalıcı geliştirme VM'leri

    • machine create, start, stop komutları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-agent seçeneğiyle host üzerindeki SSH kimlik doğrulaması güvenli biçimde kullanılabilir
  • Smolfile tabanlı ortam bildirimi

    • TOML biçimindeki Smolfile ile 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

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-host seç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, --mem seç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 --net seç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-agent kullanılırken host üzerinde bir SSH agent çalışıyor olmalıdır (SSH_AUTH_SOCK ayarı gereklidir)

Geliştirme

  • Geliştirme yönergeleri docs/DEVELOPMENT.md içinde bulunabilir
  • Apache-2.0 lisansı ile yayımlanmıştır ve @binsquare tarafından geliştirilmiştir

1 yorum

 
GN⁺ 12 일 전
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

    • Bu gerçekten çok havalı. Ben de yapay zeka sandbox çözümü araştırırken Lima+Incus kombinasyonuyla Locki'yi yaptım
      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ı?
    • Canlı taşıma desteğinin durumu nedir merak ediyorum
      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
    • Koddaki hangi kısmın ne kadarının LLM/AI ile yazıldığını merak ediyorum
    • Ben de benzer bir şey yaptım — adı shuru.run
      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
    • 1 saniyenin altında açılış süresi elde etmek için en zor tasarım problemi neydi merak ediyorum
      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

    • Unikraft'ın iç yapısını bilmiyorum çünkü açık kaynak değil
      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

    • Bu, Electron'a benzer bir fikir
      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
    • Herkesin en az bir kez “geliştirme ortamını bozma” deneyimi olmuştur
      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
  • .smolmachine dosyasının dijital imza ve self-attestation desteği olup olmadığını merak ediyorum
    Sylabs'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

    • Teşekkürler
  • 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

    • Docker desteği planlanıyor. Bir sonraki sürümde gerekli kernel flag'lerini içeren uyumlu bir kernel dağıtmayı planlıyoruz
    • Vagrant yerelde VM başlattığı için nesting gerekiyor gibi görünüyor
      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