- Tamamen Rust ile geliştirilmiş, unikernel tasarımı ve WASM tabanlı sandboxing güvenlik modeli kullanan grafik tabanlı deneysel bir işletim sistemi
- EFI binary içinde çekirdek, WASM engine ve tüm uygulamalar gömülü; bu sayede minimal bir yapı ve benzersiz bir sistem çağrısı arayüzü sunuyor
- VirtIO tabanlı sürücüler üzerinden QEMU’da çalışıyor; giriş, ağ ve GPU yönetimi interrupt olmadan polling yöntemiyle uygulanmış
- Küresel event loop ve cooperative scheduling ile sadeleştirilmiş bir çalışma yapısı ve uygulama bazlı kaynak izleme desteği sağlıyor
- Kendi UI toolkit’i Uitk ile birlikte yerleşik uygulamalar (web browser, text editor, Python terminal) sunuyor; çeşitli dillerle WASM uygulaması geliştirmek mümkün
Munal OS nedir
- Munal OS, Rust ile tamamen geliştirilmiş deneysel bir işletim sistemi olup, unikernel tabanlı mimari ile WASM sandboxing’i birleştirerek yeni bir OS tasarımını keşfetmek için oluşturulmuş bir proje
- Karmaşıklığı azaltıp yalnızca temel bileşenleri kullanarak, modern araçlarla sadeleştirilmiş bir sistem yapısı gerçekleştirmeyi hedefliyor
Başlıca özellikler
- Tam grafik ortamı ve HD çözünürlük desteği; fare ve klavye arayüzü içeriyor
- Sandbox yöntemiyle uygulama çalıştırma, kullanıcı uygulamalarının çekirdek belleğine erişimini engelliyor
- Ağ sürücüsü ve kendi TCP stack’i yerleşik olarak geliyor
- Özelleştirilebilir UI toolkit (Uitk) içeriyor; çeşitli widget’lar, esnek yerleşim ve metin render etme desteği sunuyor
- Varsayılan uygulamalar: web browser (DNS, HTTPS, temel HTML desteği), text editor, Python terminal
Mimari
-
EFI binary tabanlı yapı
- Bootloader olmadan EFI binary biçiminde çalışıyor; çekirdek/WASM engine/uygulamalar tek bir dosyaya gömülü
- UEFI boot servisleri mümkün olan en kısa sürede sonlandırılıyor, sistem saati dışında ek bir kullanım yok
-
Adres alanı yönetimi
- Sanal adres alanı kullanılmıyor, UEFI’nin bıraktığı identity-mapped adresler doğrudan kullanılıyor
- Page table değişikliği yok. Çekirdek belleğinin doğrudan korunması WASM sandboxing ile tamamlanıyor
-
Sürücüler ve donanım desteği
- PS/2 veya VGA yerine, VirtIO 1.1 spesifikasyonunu kullanan PCI sürücüleri doğrudan uygulanmış
- Klavye, fare, ağ ve GPU için sürücüler sağlanıyor
- Interrupt kullanılmıyor, tüm sürücüler polling yöntemiyle tasarlanmış
- QEMU dışındaki gerçek donanım üzerinde çalışma desteklenmiyor; gelecekte ek geliştirme gerekiyor
-
Event loop ve scheduling
- Multicore/interrupt desteği yok, tüm çalışma tek bir küresel event loop içinde doğrusal olarak yürütülüyor
- Her döngüde ağ/giriş sürücüleri polling ile kontrol ediliyor, masaüstü UI ve uygulamalar çalıştırılıyor, GPU framebuffer güncelleniyor
- Performans analizi kolay, her döngü çevrimi için zaman ölçümü yapılabiliyor
- Uygulamaların CPU kullanımını doğrudan bırakması gerekiyor, uzun süren işler için açıkça kontrolü devretmeleri gerekli
- Cooperative scheduling tabanlı olsa da, Wasmi engine’in fuel limit özelliği ile hatalı uygulamaları zorla durdurma desteği mümkün (henüz uygulanmadı)
Uygulama çalıştırma yapısı
- [Wasmi WASM engine] yerleşik; uygulama çalıştırılırken tam sandboxing ve çekirdekten yalıtım sağlıyor
- Çekirdek düzeyinde system call API sunuyor; uygulamalar fare/tuş olaylarını sorgulayabiliyor, TCP socket kullanabiliyor, framebuffer’a çıktı verebiliyor
- Uygulamaların render çıktısı OS tarafından masaüstünde birleştirilerek gösteriliyor
- Rust dışındaki dillerle de uygulama geliştirilebiliyor, yalnızca WASM build desteği olması yeterli
- WASI uyumluluğu kısmi düzeyde. Tam uyumlu değil; temel harici bağımlılıkların kullanılabilmesi için minimum uygulama içeriyor
- Uygulama başına özel bir log stream’i (
stdout benzeri) bulunuyor; masaüstündeki ‘denetim’ görünümünde kaynak kullanımıyla birlikte görülebiliyor
UI toolkit (uitk)
- Hem Munal OS hem de WASM uygulamalarında kullanılan kendi immediate-mode UI kiti
- Temel widget’lar (button, progress bar, text edit, scroll canvas) ve üçgen rasterizer sunuyor
- Küresel stylesheet tabanlı tutarlı stil uygulaması, her öğe için override desteği
- Verimli caching sistemi ile gereksiz yeniden render işlemlerini önlüyor
- Her alanı “tile” olarak ayırıyor, Rust mutability kurallarına dayalı bir değişiklik algılama algoritması kullanıyor
Build ve çalışma ortamı
- Rust Nightly 2025-06-01 ve QEMU 10.0.0 veya üzeri sürümlerde build edilip çalıştırılabiliyor
Başlıca referanslar ve katkılar
- Philipp Oppermann’ın Rust OS eğitimleri ve OSDev Wiki dokümantasyonu
- Wasmi, smoltcp, Rustls, RustPython gibi önemli open source projeler kullanılıyor
- Çeşitli open source yazı tipleri, ikonlar ve duvar kâğıdı kaynakları kullanılmış
Munal OS’in önemi ve avantajları
- Tek EFI binary yapısı ile yenilikçi sandboxing yaklaşımını birleştirerek, mevcut OS tasarım paradigmasını yeniden düşünmeye zorluyor
- QEMU ortamına optimize edilmiş ve kendine özgü polling tabanlı sürücü yapısı sayesinde gerçek sistem donanımına bağımlılığı en aza indiriyor
- Sistem kaynak yönetiminde şeffaflık sunuyor; sade yapısı nedeniyle öğrenme ve deneysel kullanım değeri yüksek
- Dil veya ortam kısıtı olmadan WASM uygulama ekosistemini genişletme potansiyeli taşıyor
1 yorum
Hacker News yorumu
Her yinelemede ağ ve giriş sürücülerini polling ile kontrol etmesi, masaüstü arayüzünü çizmesi, etkin her WASM uygulamasını bir adım çalıştırması ve ardından GPU framebuffer'ını flush etmesi ilgimi çekti. Bunu Wasmi ile nasıl yaptığını merak edip kodu inceledim GitHub kod bağlantısı. En güncel Wasmi'de (v0.45+) fuel bittiğinde yield edebilmek için resumable function call desteğinin genişletildiğini belirtmek isterim Wasmi dokümantasyon bağlantısı. Zaten fuel metering kullanıldığı için, yürütme adımında daha verimli bir yöntem olabilir. Nasıl kullanılacağını görmek için Wasmi Wast runner örneğine bakılabilir
try/catchde yok mu? Hata durumundamalloc'u açıkça tekrar denemek gerekiyorsa, bunun ne kazandırdığı bana çok net gelmediği için kafam karıştıYapının VirtIO'ya dayandığını, bu yüzden Munal OS'nin henüz gerçek donanımda çalışmadığını belirtiyor; eğer gerçek donanımda çalıştırmak istenirse doğrudan sürücü eklemek yerine Linux'u bootloader olarak kullanıp işletim sistemini minimal bir hypervisor içinde çalıştırmanın da ilginç bir yaklaşım olacağını düşünüyor. Böylece "VirtIO platformdur" fikri korunabilir. Uygulama çalıştırmada WASM, platformda VirtIO seçimiyle kimliğini koruması güzel. Ancak güvenlik açısından MMU kullanımı gerekir. Tasarım olarak sanal belleği tamamen benimsemek zorunda olmayabilirsiniz ama koruma bitlerini kullanmak için sayfa tabloları ve TLB yönetimi gibi ek karmaşıklıklar gelir; bu da sadeliği bir miktar zayıflatır
Yineleme döngüsünün CPU'yu uzun süre meşgul etmemesi ve uzun işleri mutlaka açıkça yield etmesi gerekmesinden daha büyük sorun bence şu: ne kadar çok uygulama açarsanız her birinin işleme hızı o kadar düşer. Ben şahsen 10'dan fazla uygulamayı pek açmadım ama 30 sekmeye kadar çıktığım oldu; eğer her biri birer süreçse performans düşüşü belirgin olurdu. Donanım yeterince hızlıysa sorun olmayabilir ama örneğin video render alma gibi ağır işlemler 1 saniye yerine 30 saniye sürebilir; fark çok hissedilir. Buna rağmen tüm OS'yi bu şekilde inşa etmiş olması başlı başına çok zeki, gerçekten etkileyici ve heyecan verici bir deneme
İşbirlikçi zamanlamanın yanı sıra Spectre saldırılarına karşı savunmanın da zor göründüğünü ve sanal bellek olmadan verim alınmasının mümkün olup olmadığını sorguluyorum. Örneğin WASM'da
memory.growişlenirken başka bir uygulamanın belleğine çarparsa her şeyimemmoveile taşımak gerekebilir; bunun gerçekten uygulanabilir olup olmadığını merak ediyorum. Yine de gerçekten etkileyici bir projewasm component'ler hayata geçtiğinde bu tür denemelerin nasıl değişeceğini merak ediyorum. unikernel tasarımını takdir ediyorum ve Munal OS'nin zengin özellikleri de etkileyici. wasm'in yalnızca tek bir büyük uygulama için değil, çok sayıda küçük süreç ve alt ortam barındırmak için de kullanılmasını umuyorum. wasi preview3 ile senkron/asenkron bir arada kullanım yakında mümkün olacak gibi görünüyor; böylece wasm, genel amaçlı bir runtime'ın gereken parçalarını tamamlamış olacak. Hâlâ host object bridging'in büyük ölçüde JS merkezli kalması üzücü ama wasm component'lerin vaat ettiği şeylerin — standart, hafiflik, sandbox, diller arası birleşebilirlik — sadece tek bir dağıtım formatı olarak değil, gerçek bir runtime yeteneği olarak pratikte karşılık bulmasını umuyorum. Şu konuşmaya da bakılabilir What is a Component (and Why)
“The Birth and Death of Javascript” Pycon 2014 konuşmasında asm.js'nin (bugünkü wasm'in öncülü) OS sandbox'ı oluşturmak için kullanılacağı bir gelecekten bahsediliyordu; bu fikir bu projenin tasarım çekirdeğine oldukça benziyor, acaba bir etkisi oldu mu diye merak ediyorum konuşma bağlantısı
Bu OS'nin kendi web tarayıcısını bile içermesi şaşırtıcı web tarayıcı kaynağı. Demo videosunda Hacker News'i render ettiğini de görebilirsiniz
Çok etkileyici; acaba bu yapı işletim sistemlerinin geleceği olabilir mi diye düşündürüyor. README de oldukça ilginç. Wasmi yerine neden wasmtime seçilmediğini merak ediyorum. Bu OS'yi ben de bir VM içinde denemek isterim; hatta GUI kütüphanemi Munal'a port etme hevesim bile var
no_stdmodunda derlemek çok uğraştırıcı olduğu için sonunda wasmi'yi seçtiğime dair benzer bir deneyim paylaşabilirimXerox PARC döneminden bu yana "userspace'i bytecode'a dönüştürme" girişimleri hep tekrarlandı ve piyasada gerçekten başarılı sayılabilecek örneklerin IBM i, ChromeOS ve Android ile sınırlı olduğunu düşünüyorum. Yine de bu proje çok havalı; umarım başarılı olur
İstemci OS tasarımı başlı başına şaşırtıcı. Böyle bir yapının sunucu tarafında da hemen pratik karşılığı olabilir gibi geliyor. Kernel'i çok küçük tutup çalışan tek uygulamayı bırakmak, gereksiz güvenlik sınırlarını azaltabilir. Örneğin bir key/value store bu yapıya iyi uyabilir. Merak ettiğim şey şu: bu IO modeliyle ağ performansı iyi oluyor mu, ayrıca WASM host ederken gereksiz bellek kopyalarını azaltmak için özel teknikler uygulanabilir mi?