- Sistem operasi eksperimental berbasis grafis yang sepenuhnya diimplementasikan dengan Rust, menggunakan desain unikernel dan model keamanan sandboxing berbasis WASM
- Kernel, mesin WASM, dan semua aplikasi tertanam di dalam biner EFI sehingga menyediakan struktur yang diminimalkan dan antarmuka system call yang unik
- Berjalan di QEMU melalui driver berbasis VirtIO, dengan pengelolaan input, jaringan, dan GPU yang diimplementasikan dengan metode polling tanpa interupsi
- Mendukung struktur operasi yang disederhanakan dan pemantauan sumber daya per aplikasi melalui event loop global dan penjadwalan kooperatif
- Menyediakan UI toolkit Uitk sendiri serta aplikasi bawaan (peramban web, editor teks, terminal Python), dan memungkinkan pengembangan aplikasi WASM dalam berbagai bahasa
Apa itu Munal OS
- Munal OS adalah sistem operasi eksperimental yang dikembangkan sepenuhnya dengan Rust, sebuah proyek yang dibuat untuk mengeksplorasi desain OS baru dengan menggabungkan arsitektur berbasis unikernel dan sandboxing WASM
- Tujuannya adalah mewujudkan struktur sistem yang disederhanakan dengan alat modern, dengan mengurangi kompleksitas dan hanya menerapkan elemen-elemen esensial
Fitur utama
- Mendukung lingkungan grafis penuh dan resolusi HD, serta dilengkapi antarmuka mouse dan keyboard
- Menjalankan aplikasi dalam mode sandbox, memblokir akses aplikasi pengguna ke memori kernel
- Memiliki driver jaringan dan stack TCP sendiri bawaan
- Menyertakan UI toolkit yang dapat dikustomisasi (Uitk), dengan berbagai widget, layout fleksibel, dan dukungan rendering teks
- Aplikasi bawaan: peramban web (mendukung DNS, HTTPS, HTML dasar), editor teks, terminal Python
Arsitektur
-
Struktur berbasis biner EFI
- Berjalan dalam bentuk biner EFI tanpa bootloader, dengan kernel/mesin WASM/aplikasi tertanam dalam satu file
- Layanan boot UEFI dihentikan secepat mungkin dan tidak dimanfaatkan lebih lanjut selain untuk jam sistem
-
Manajemen ruang alamat
- Tidak menggunakan ruang alamat virtual, melainkan langsung memakai alamat identity-mapped yang ditinggalkan UEFI
- Tidak ada perubahan page table. Perlindungan langsung memori kernel dilengkapi melalui sandboxing WASM
-
Driver dan dukungan perangkat keras
- Alih-alih PS/2 atau VGA, Munal OS mengimplementasikan langsung driver PCI yang memanfaatkan spesifikasi VirtIO 1.1
- Menyediakan driver untuk keyboard, mouse, jaringan, dan GPU
- Tidak menggunakan interupsi, semua driver dirancang dengan metode polling
- Menjalankan pada perangkat keras fisik selain QEMU belum didukung dan memerlukan pengembangan tambahan di masa depan
-
Event loop dan penjadwalan
- Tidak mendukung multicore/interupsi, seluruh operasi dieksekusi secara linear dalam satu event loop global
- Pada setiap loop dilakukan polling driver jaringan/input, eksekusi UI desktop dan aplikasi, serta pembaruan framebuffer GPU
- Mudah untuk analisis performa, karena waktu dapat diukur pada setiap siklus loop
- Aplikasi harus melepaskan penggunaan CPU secara langsung, dan pekerjaan jangka panjang harus secara eksplisit melakukan yield
- Berbasis penjadwalan kooperatif, tetapi penghentian paksa aplikasi yang bermasalah dimungkinkan melalui fitur fuel limit di mesin Wasmi (belum diimplementasikan)
Struktur eksekusi aplikasi
- Menyertakan [Wasmi WASM engine], yang saat menjalankan aplikasi memberikan sandboxing penuh dan pemisahan dari kernel
- Menyediakan API system call di tingkat kernel, sehingga aplikasi dapat mengambil event mouse/keyboard, menggunakan socket TCP, menulis ke framebuffer, dan sebagainya
- Hasil rendering aplikasi dikomposisikan oleh OS lalu ditampilkan di desktop
- Aplikasi juga dapat dibuat dengan bahasa selain Rust, selama mendukung build WASM maka tidak ada batasan penggunaan
- Kompatibilitas WASI didukung sebagian. Tidak sepenuhnya patuh, hanya mencakup implementasi minimum untuk memanfaatkan dependensi eksternal utama
- Tersedia stream log khusus per aplikasi (mirip stdout), yang dapat dilihat bersama penggunaan sumber daya di tampilan 'audit' pada desktop
UI toolkit (uitk)
- UI kit immediate-mode buatan sendiri yang digunakan baik oleh Munal OS maupun aplikasi WASM
- Menyediakan widget dasar (tombol, progress bar, text edit, scroll canvas) serta rasterizer segitiga
- Styling terpadu berbasis stylesheet global, dengan dukungan override per elemen
- Sistem caching yang efisien untuk mencegah re-rendering yang tidak perlu
- Membagi tiap area menjadi “tile”, dengan algoritme deteksi perubahan berbasis aturan mutability Rust
Lingkungan build dan eksekusi
- Dapat di-build dan dijalankan pada Rust Nightly 2025-06-01 dan QEMU 10.0.0 atau lebih baru
Referensi utama dan kredit
- Tutorial Rust OS dari Philipp Oppermann dan dokumentasi OSDev Wiki
- Memanfaatkan berbagai open source utama seperti Wasmi, smoltcp, Rustls, RustPython, dan lainnya
- Menggunakan berbagai font, ikon, dan materi wallpaper open source
Makna dan keunggulan Munal OS
- Menggabungkan struktur biner EFI tunggal dan sandboxing yang inovatif untuk meninjau kembali paradigma desain OS yang ada
- Dioptimalkan untuk lingkungan QEMU dengan struktur driver berbasis polling yang unik, sehingga meminimalkan ketergantungan pada perangkat keras sistem nyata
- Menawarkan transparansi pengelolaan sumber daya sistem, dengan nilai pembelajaran dan eksperimen yang tinggi dari struktur yang sederhana
- Memiliki potensi besar untuk memperluas ekosistem aplikasi WASM tanpa batasan bahasa maupun lingkungan
1 komentar
Opini Hacker News
Menarik melihat strukturnya: di setiap iterasi, sistem melakukan polling jaringan dan driver input, menggambar antarmuka desktop, menjalankan satu langkah untuk tiap aplikasi WASM yang aktif, lalu melakukan flush ke framebuffer GPU. Saya penasaran bagaimana ini diimplementasikan dengan Wasmi, jadi saya mencari kodenya tautan kode GitHub. Saya juga ingin memberi tahu bahwa di Wasmi terbaru (v0.45+), dukungan pemanggilan fungsi yang bisa dilanjutkan telah diperluas sehingga bisa melakukan yield saat fuel habis tautan dokumentasi Wasmi. Karena sudah memakai fuel metering, ini bisa menjadi cara yang lebih efisien pada tahap eksekusi. Contoh penggunaannya bisa dilihat di contoh runner Wasmi Wast
malloclagi setelah gagal, saya bingung apa keuntungan nyatanyaKarena bergantung pada VirtIO, disebutkan bahwa Munal OS masih belum bisa berjalan di perangkat keras nyata. Jika ingin dijalankan di perangkat keras nyata, menurut saya pendekatan yang menarik adalah memakai Linux sebagai bootloader dan menjalankan OS ini di atas hypervisor minimal, alih-alih menambahkan driver sendiri. Dengan begitu, konsep “VirtIO adalah platform” bisa tetap dipertahankan. Memilih WASM untuk menjalankan aplikasi dan VirtIO untuk platform membuat identitasnya terasa konsisten. Namun dari sudut pandang keamanan, penggunaan MMU tetap diperlukan. Secara desain mungkin tidak harus sampai memperkenalkan memori virtual, tetapi untuk memakai bit proteksi tetap muncul kompleksitas tambahan seperti page table dan pengelolaan TLB, sehingga kesederhanaannya sedikit berkurang
Menurut saya, kelemahan yang lebih besar daripada fakta bahwa loop iterasi tidak boleh terlalu lama memonopoli CPU dan pekerjaan panjang harus secara eksplisit melakukan yield, adalah bahwa semakin banyak aplikasi yang dibuka, semakin lambat pemrosesan tiap aplikasi. Saya sendiri hampir tidak pernah membuka lebih dari 10 aplikasi sekaligus, tetapi berdasarkan pengalaman pernah membuka 30 tab, kalau masing-masing adalah proses terpisah, penurunan performanya akan sangat terasa. Kalau hardwarenya cukup cepat mungkin tidak masalah, tetapi untuk pekerjaan berat seperti render video misalnya, waktu bisa melambat dari 1 detik menjadi 30 detik, dan itu akan sangat terasa. Meski begitu, fakta bahwa seluruh OS dibuat seperti ini tetap sangat cerdas, luar biasa, dan mengasyikkan
Selain cooperative scheduling, pertahanan terhadap serangan Spectre juga tampak sulit, dan saya ragu efisiensinya bisa bagus tanpa memori virtual. Misalnya saat menangani
memory.growdi WASM, kalau memori aplikasi lain menghalangi, mungkin bisa muncul situasi di mana seluruh blok harus di-memmove; saya penasaran apakah itu benar-benar memungkinkan. Meski begitu, ini tetap proyek yang sangat mengesankanSaya penasaran bagaimana eksperimen seperti ini akan berubah ketika komponen wasm benar-benar terwujud. Saya sangat menghargai desain unikernel, dan Munal OS juga mengesankan karena punya banyak fungsi. Saya berharap wasm tidak hanya dipakai untuk satu aplikasi besar, tetapi juga untuk menampung banyak proses kecil dan sub-lingkungan. Di wasi preview3, kemungkinan koeksistensi sinkron/asinkron tampaknya akan segera terbuka, dan pada titik itu wasm akan memiliki semua elemen runtime serbaguna. Saya masih menyayangkan kenyataan bahwa bridging host object masih terlalu terpusat pada JS, tetapi saya berharap janji komponen wasm—standar, ringan, sandbox, dan komposisi lintas bahasa—bisa benar-benar terlihat di dunia nyata sebagai kemampuan runtime, bukan sekadar format distribusi tunggal. Lihat juga talk berikut What is a Component (and Why)
Saya pernah melihat bagian dalam talk PyCon 2014 “The Birth and Death of Javascript” yang memperkenalkan masa depan di mana sandbox OS dibangun dengan asm.js (pendahulu wasm saat ini), dan rasanya sangat mirip dengan inti desain proyek ini, jadi saya penasaran apakah itu menjadi pengaruh tautan talk
Saya terkejut karena OS ini bahkan menyertakan browser web sendiri sumber browser web. Di video demo juga terlihat browser itu merender Hacker News
Saya merasa takjub, sekaligus bertanya-tanya apakah struktur seperti ini bisa menjadi masa depan OS. README-nya sendiri juga sangat menarik. Saya penasaran kenapa memilih wasmi alih-alih wasmtime. Saya juga ingin mencoba OS ini sendiri di VM, dan tergoda untuk mem-porting library GUI saya ke Munal
no_stdterlalu merepotkan, jadi akhirnya saya memilih wasmiSejak era Xerox PARC, upaya untuk “mengubah userspace menjadi bytecode” terus berulang, dan menurut saya contoh yang benar-benar sukses di pasar hanya IBM i, ChromeOS, dan Android. Meski begitu, proyek ini keren dan saya harap berhasil
Desain OS kliennya sendiri sudah mengejutkan. Struktur seperti ini juga tampak langsung praktis untuk server. Kalau kernel dibuat sangat kecil dan hanya menyisakan satu aplikasi yang berjalan, batas keamanan yang tidak perlu bisa dikurangi. Misalnya key/value store akan cocok untuk struktur seperti ini. Yang saya penasaran, apakah model IO seperti ini bisa memberi performa jaringan yang baik, dan apakah ada teknik khusus yang bisa dipakai saat meng-host WASM untuk mengurangi penyalinan memori yang tidak perlu