Apa itu WebAssembly Component Model?

WebAssembly, atau singkatnya Wasm, telah berkali-kali membuktikan dirinya sebagai teknologi revolusioner berkat kecepatan eksekusi yang sangat cepat dan mendekati native, dukungan terhadap berbagai bahasa pemrograman, serta model sandboxing yang kuat dengan prinsip deny-by-default. Wasm sudah digunakan secara luas di web, dan juga menjadi pemain penting di sisi server.

Setiap ekosistem yang berkembang membutuhkan visi tentang bagaimana semua bagian cocok satu sama lain—di sinilah WebAssembly Component Model berperan. Component Model adalah sistem yang memfasilitasi interaksi antara unit-unit kode WebAssembly, serta interaksi antara kode WebAssembly dan lingkungan host. Sistem ini berpusat pada konsep komponen WebAssembly, yang pada dasarnya adalah modul Wasm biasa tetapi dengan tipe data yang sudah dienkode. Tipe data ini memungkinkan pembuatan glue code otomatis sehingga komponen-komponen dapat berkomunikasi secara mulus.

Component Model membuka era baru dalam pengembangan perangkat lunak modern: developer bisa memilih komponen dari ekosistem bahasa apa pun dan menyusunnya menjadi satu aplikasi. Punya aplikasi pemrosesan data di Python tapi membutuhkan parser efisien dari Rust? Tidak masalah. Satu tim di organisasi Anda mahir Go, sementara tim lain hanya menulis JavaScript? Tidak menjadi kendala—masing-masing bisa menghasilkan komponen WebAssembly yang dapat disusun tanpa kerepotan.


Alasan teknis mengapa kita membutuhkannya

WebAssembly menghadapi masalah klasik yang dialami banyak platform eksekusi kode: bagaimana cara berbagi data secara aman, efisien, dan aman antar unit kode yang mungkin dibuat oleh toolchain bahasa yang berbeda-beda?

Dua modul WebAssembly sebenarnya bisa saja bertukar data menggunakan format seperti JSON atau Protobuf—tetapi proses serialisasi/deserialisasi cukup mahal. Karena kedua modul biasanya berjalan berdampingan dalam runtime yang sama, pertukaran data seharusnya bisa jauh lebih efisien.

Masalah utamanya adalah setiap bahasa pemrograman memiliki cara sendiri dalam merepresentasikan data—encoding string berbeda, struktur data berbeda (array vs linked list), dan seterusnya. Agar dua bahasa bisa berkomunikasi, mereka harus sepakat pada satu format data bersama. Ini disebut Application Binary Interface (ABI). Dalam praktiknya, hampir tidak ada bahasa yang sepakat pada ABI yang sama.

Biasanya, jika kita ingin kode dari satu bahasa berbicara dengan bahasa lain, seorang developer harus menulis kode penerjemah secara manual—pekerjaan yang sulit, rawan kesalahan, dan membutuhkan pemahaman mendalam tentang kedua bahasa. Beberapa ekosistem memang memiliki tool untuk ini, tetapi hanya untuk bahasa tertentu.

Component Model memecahkan masalah ini dengan mendefinisikan canonical ABI—format data universal untuk semua bahasa. Untuk memudahkan manusia, tersedia pula bahasa definisi antarmuka bernama WebAssembly Interface Types (WIT) untuk mendeskripsikan antarmuka komponen.


Dunia WIT

Setelah ada banyak komponen, bagaimana kita tahu komponen mana dapat dipakai pada lingkungan tertentu? WebAssembly berjalan di banyak tempat—browser, server, edge, perangkat kecil, dan lainnya—semuanya dengan kemampuan berbeda.

WIT memperkenalkan konsep worlds.
Sebuah world adalah antarmuka yang diikuti oleh sebuah komponen—sekumpulan fungsi yang di-import dan di-export oleh komponen. Ini memudahkan kita memahami bagaimana komponen dapat disusun bersama.

Contoh: komponen yang hidup di dunia wasi:cli/command, yaitu komponen yang berjalan sebagai perintah terminal, dapat memiliki akses ke filesystem, sumber randomness, dan stream I/O, serta menyediakan fungsi utama untuk dijalankan ketika perintah dipanggil.

World dapat didefinisikan oleh siapa pun, tetapi sudah ada banyak world standar—untuk HTTP, USB, AI model, dan lainnya. Lingkungan host dapat menyatakan world mana yang mereka dukung, sehingga developer tahu komponen mana yang kompatibel.

Karena komponen bisa dikomposisi, kita bisa mengimplementasikan sebuah world menggunakan world lain. Misalnya, jika host hanya menyediakan world sockets, tapi komponen yang Anda miliki ingin melakukan HTTP, Anda bisa menulis adaptor yang mengimplementasikan HTTP menggunakan sockets.

Dengan komposisi sederhana, komponen Anda dapat berjalan di world sockets tanpa modifikasi apa pun.


Masa depan

Component Model sangat monumental—tidak hanya untuk WebAssembly, tetapi untuk semua developer. Ini akan mengubah cara kita membangun software. Walaupun ekosistemnya masih awal, manfaatnya sudah sangat besar.

Tetaplah mengikuti perkembangan WebAssembly, karena kita akan melihat semakin banyak kasus penggunaan menarik seiring meningkatnya adopsi.

Infrastruktur IT yang kuat adalah kunci produktivitas perusahaan. Dengan F5 indonesia, merupakan bagian dari PT. iLogo Infralogy Indonesia, yang merupakan mitra terpercaya dalam solusi Infrastruktur IT dan Cybersecurity terbaik di Indonesia.
Hubungi kami sekarang atau kunjungi F5.ilogoindonesia.id untuk informasi lebih lanjut!