Linux Berjalan Native di WebAssembly Menunjukkan Janji Meski Ada Bug di Tahap Awal

Tim Komunitas BigGo
Linux Berjalan Native di WebAssembly Menunjukkan Janji Meski Ada Bug di Tahap Awal

Dalam pencapaian teknis yang luar biasa, para pengembang telah berhasil mengompilasi dan menjalankan kernel Linux secara native di WebAssembly (Wasm), melewati lapisan emulasi CPU tradisional. Pendekatan ini menjanjikan performa mendekati native untuk menjalankan distribusi Linux lengkap langsung di peramban web, meskipun pengujian awal mengungkapkan baik kecepatan yang mengesankan maupun masalah stabilitas signifikan yang menyoroti sifat eksperimental dari proyek ini.

Terobosan Performa dengan Arsitektur WebAssembly

Pengujian awal komunitas mengungkapkan peningkatan performa yang mengejutkan dibandingkan dengan emulator Linux berbasis peramban tradisional. Tolok ukur awal menunjukkan sistem Linux yang dikompilasi Wasm benar-benar mengungguli setup emulasi sebelumnya yang hanya mampu mencapai sekitar 200 MIPS. Seorang pengguna yang menjalankan perhitungan matematika dengan 'bc -lq' melaporkan waktu eksekusi yang jauh lebih cepat, menunjukkan pendekatan ini dapat merevolusi cara kita menjalankan aplikasi kompleks di lingkungan peramban.

Kompilasi arsitektur WASM ini benar-benar mengalahkan setup emulasi lama saya, yang hanya mampu sekitar 200 MIPS. Mungkin pendekatan ini bisa digeneralisasi. Menjalankan distribusi Linux lengkap dengan kecepatan hampir native langsung di peramban akan sangat luar biasa.

Peningkatan performa berasal dari penghapusan lapilan penerjemahan instruksi CPU tradisional. Tidak seperti proyek yang mengemulasi seluruh arsitektur CPU seperti x86 atau RISC-V, implementasi ini mengompilasi setiap biner langsung ke WebAssembly, dengan setiap proses Linux berjalan sebagai Web Worker terpisah. Perbedaan arsitektural ini berarti aplikasi userspace mendapat manfaat dari kompilasi langsung ke Wasm sambil tetap memiliki akses ke API kernel Linux lengkap, bukan shim minimal yang disediakan oleh lingkungan seperti Emscripten.

Perbandingan Performa:

  • Emulasi tradisional (jor1k): ~200 MIPS
  • Emulasi RISC-V (WebCM): ~500 MIPS
  • Native WebAssembly Linux: Jauh lebih tinggi dari keduanya (tolok ukur yang tepat masih dalam proses)

Tantangan Stabilitas dan Keterbatasan Sistem

Terlepas dari pencapaian performa, pengguna dengan cepat menemukan banyak masalah stabilitas selama pengujian. Perintah administrasi sistem dasar seperti 'du -h' dan 'wget' sering menyebabkan crash WebAssembly dengan error akses memori dan fault instruksi ilegal. Perintah 'ping' gagal total karena ketidakmampuan membuat raw socket, menyoroti keterbatasan jaringan yang melekat di lingkungan peramban. Seorang penguji melaporkan sesi mereka berakhir tiba-tiba dengan pesan kernel panic setelah mencoba memeriksa penggunaan disk.

Dokumentasi proyek mengakui beberapa masalah yang diketahui, termasuk bug aneh dalam sistem build LLVM yang mengharuskan membangun kompiler setiap kali kedua kalinya untuk berhasil. Ada juga keterbatasan yang mencegah penggunaan spasi dalam path file saat membangun komponen kernel Linux. Keanehan-keanehan ini menggarisbawahi sifat eksperimental dari menjalankan sistem operasi lengkap di lingkungan yang fundamentally berbeda dari perangkat keras tradisional.

Keterbatasan yang Diketahui:

  • Tidak ada dukungan MMU (memerlukan konfigurasi kernel NOMMU)
  • Socket jaringan tidak diimplementasikan
  • Path tidak boleh mengandung spasi selama proses build
  • Kondisi race pada sistem build LLVM memerlukan build alternatif

Potensi Edukasi dan Aplikasi Masa Depan

Anggota komunitas langsung mengenali nilai edukasi dari memiliki lingkungan Linux fungsional yang dapat diakses melalui peramban web modern mana pun. Kemampuan untuk menguji distribusi Linux atau perangkat lunak tertentu tanpa unduhan membuat ini sangat berharga untuk setting pendidikan, terutama pada perangkat terbatas seperti Chromebook. Responsivitas proyek dan kebutuhan setup minimal dapat menurunkan hambatan bagi orang yang mempelajari administrasi sistem Linux atau bereksperimen dengan alat command-line.

Beberapa komentator menyatakan kegembiraan tentang potensi untuk membuat lingkungan Linux yang disesuaikan dengan aplikasi tertentu yang sudah terpasang sebelumnya. Sistem build berbasis Docker yang disebutkan dalam dokumentasi proyek secara teoritis dapat diperluas untuk menghasilkan image Wasm Linux yang disesuaikan berisi alat atau lingkungan pengembangan tertentu. Ini akan memungkinkan skenario di mana pengguna dapat langsung mengakses alat Linux khusus melalui peramban mereka tanpa instalasi lokal.

Arsitektur Teknis dan Manajemen Memori

Arsitektur proyek mengungkapkan solusi inovatif untuk keterbatasan WebAssembly. Karena Wasm tidak memiliki Memory Management Unit (MMU), kernel Linux harus dikompilasi dalam konfigurasi NOMMU, mengharuskan program dibangun dengan flag position-independent code. Setiap thread Linux dipetakan ke Web Worker di peramban, secara efektif memungkinkan hingga 8.000 CPU bersamaan dengan memanfaatkan dukungan Linux untuk banyak inti prosesor.

Model threading ini menghadirkan keuntungan dan keterbatasan. Meskipun memori tidak dapat dibagikan antar proses dalam arti tradisional, isolasi ini memberikan manfaat perlindungan memori yang melekat. Implementasi console driver menunjukkan bagaimana device driver dapat menjembatani lingkungan WebAssembly ke JavaScript, menyarankan bahwa fungsionalitas jaringan dapat ditambahkan melalui implementasi driver serupa yang mengekspor paket jaringan ke JavaScript untuk penanganan.

Komponen Perangkat Lunak dan Versi Utama:

  • LLVM Project: 18.1.2 (dengan dukungan linker script wasm-ld)
  • Linux Kernel: 6.4.16 (dengan patch arsitektur Wasm)
  • musl libc: 1.2.5 (dengan dukungan target Wasm)
  • BusyBox: 1.36.1 (dengan Wasm defconfig)

Perbandingan dengan Pendekatan Alternatif

Komunitas dengan cepat membandingkan pendekatan WebAssembly native ini dengan metode alternatif seperti container2wasm, yang mengonversi container ke Wasm menggunakan lapisan emulasi seperti Bochs atau TinyEMU. Meskipun solusi tersebut mendukung menjalankan biner yang ada tanpa rekompilasi, mereka mengakibatkan penalti performa dari penerjemahan instruksi CPU. Pendekatan kompilasi native ini berpotensi menawarkan performa yang jauh lebih baik tetapi memerlukan pembangunan ulang semua komponen perangkat lunak khusus untuk target WebAssembly.

Proyek lain seperti jor1k dan WebCM menunjukkan bahwa emulasi RISC-V yang mampu dapat mencapai kecepatan hingga 500 MIPS di peramban, tetapi pendekatan Wasm native tampaknya diposisikan untuk melampaui angka-angka ini secara signifikan setelah stabilitas membaik. Pertukaran antara kompatibilitas dan performa kemungkinan akan menentukan pendekatan mana yang menjadi dominan untuk kasus penggunaan yang berbeda.

Kesimpulan

Implementasi yang berhasil, meskipun masih buggy, dari Linux yang berjalan native di WebAssembly merupakan tonggak penting dalam teknologi web. Meskipun saat ini cocok terutama untuk eksperimen dan pendidikan, demonstrasi performa menunjukkan masa depan di mana aplikasi kompleks dan bahkan lingkungan pengembangan lengkap dapat berjalan efisien di peramban. Seiring standar WebAssembly yang mendasarinya berkembang dan implementasi awal ini matang, kita mungkin melihat lingkungan Linux berbasis peramban menjadi alat praktis daripada keingintahuan teknologi. Pengujian dan pelaporan bug yang antusias dari komunitas tidak diragukan lagi akan mempercepat proses pengembangan ini, membawa kita lebih dekat ke visi komputasi yang benar-benar portabel dan independen platform.

Referensi: Scripts for Building a Linux/Wasm Operating System