Apa Itu WebAssembly Component Model? September Week 3

WebAssembly, atau disingkat Wasm, telah terbukti menjadi teknologi revolusioner berkat kecepatan eksekusinya yang mendekati native, dukungan terhadap berbagai bahasa pemrograman, dan model sandboxing yang kuat dengan prinsip “deny-by-default”. Teknologi ini telah digunakan secara luas di seluruh web dan juga menjadi pemain yang tangguh di sisi server.

Setiap ekosistem yang sedang berkembang membutuhkan visi tentang bagaimana semua komponennya saling terhubung, dan di sinilah WebAssembly Component Model berperan. Component Model adalah sistem yang memfasilitasi interaksi antar unit kode WebAssembly, serta antara kode WebAssembly dan lingkungan host. Semuanya berpusat pada konsep komponen WebAssembly, yang pada dasarnya adalah modul Wasm biasa yang sudah disisipkan dengan tipe data. Tipe-tipe ini memungkinkan pembuatan kode perekat (glue code) di balik layar, yang membuat komponen-komponen tersebut dapat saling berkomunikasi dengan mulus.

Component Model membuka era baru dalam pengembangan perangkat lunak modern — pengembang bisa memilih dan menyusun komponen dari ekosistem bahasa pemrograman mana pun menjadi satu aplikasi tunggal. Misalnya, punya aplikasi pemrosesan data di Python tapi butuh parser yang efisien dari Rust? Bukan masalah. Satu tim di organisasi Anda mahir dalam Go, sementara tim lain hanya menulis dalam JavaScript? Tak jadi soal — masing-masing tim bisa menghasilkan komponen WebAssembly yang bisa disusun tanpa hambatan.


Kenapa Kita Membutuhkannya, dari Sisi Teknis

WebAssembly menghadapi masalah yang sama seperti banyak platform eksekusi kode baru lainnya — bagaimana cara berbagi data antar unit kode secara aman, efisien, dan terpercaya, terutama jika kode-kode itu dibuat dari toolchain bahasa pemrograman yang berbeda? Dua modul WebAssembly bisa saja berkomunikasi lewat format pertukaran data seperti JSON, Protobuf, dan lainnya. Namun, proses serialisasi dan deserialisasi cukup mahal dari segi performa. Padahal, karena kedua modul biasanya dijalankan dalam satu runtime yang sama (bukan lewat jaringan), seharusnya ada cara yang lebih baik.

Masalah utama terletak pada cara tiap bahasa pemrograman mewakili data secara internal. Misalnya, implementasi bahasa bisa memilih encoding yang berbeda untuk string; satu bahasa mungkin menyimpan data berurutan dalam array, sementara bahasa lain menggunakan linked list. Untuk membuat kode dari bahasa yang berbeda bisa saling berkomunikasi, mereka harus menyepakati bentuk data bersama — yang disebut Application Binary Interface (ABI). Namun dalam praktiknya, hampir tidak ada yang sepakat.

Biasanya, jika ingin membuat dua kode dari bahasa berbeda berkomunikasi, seorang developer harus menulis kode penghubung secara manual, menerjemahkan struktur data satu sama lain. Ini memerlukan pemahaman mendalam tentang kedua bahasa dan sangat rawan kesalahan. Beberapa ekosistem bahasa memang menyediakan alat untuk mengotomatiskan hal ini, tapi terbatas hanya untuk bahasa tertentu saja.

Untungnya, Component Model mendefinisikan bentuk data umum yang dapat digunakan semua bahasa, yang disebut canonical ABI. Untuk mempermudah manusia dalam mendefinisikan antarmuka komponen, digunakan bahasa khusus yang disebut WebAssembly Interface Types (WIT).


Dunia WIT

Jadi, kita punya berbagai komponen — tapi bagaimana kita tahu di mana kita bisa menggunakannya? WebAssembly bisa dijalankan di berbagai tempat: browser web, server, edge, perangkat kecil, dan lainnya — semuanya dengan kemampuan yang berbeda.

WIT memperkenalkan konsep worlds (dunia). World adalah antarmuka yang harus dipatuhi oleh komponen — yaitu sekumpulan fungsi yang dapat diimpor dan diekspor oleh komponen. Ini memungkinkan kita untuk memahami bagaimana komponen-komponen dapat disusun dan saling berinteraksi dengan lebih mudah.

Berikut adalah contoh definisi komponen yang berada dalam world wasi:cli/command, yaitu komponen yang dijalankan lewat terminal (command line):

(Sumber: https://github.com/WebAssembly/wasi-cli, dimodifikasi untuk ringkasan)

Komponen ini membutuhkan akses ke filesystem dan pengacakan (randomness), serta menyediakan stream untuk input dan output. Yang paling penting, ia juga menyediakan fungsi utama yang dijalankan saat perintah dipanggil.

World dapat didefinisikan oleh siapa pun, namun sudah ada banyak world standar untuk komponen yang menangani permintaan HTTP, akses perangkat USB, penggunaan model AI, dan masih banyak lagi. Lingkungan host dapat menyatakan (mengiklankan) world apa saja yang mereka dukung, sehingga pengembang bisa tahu komponen mana yang akan bekerja.

Karena komponen bersifat composable (dapat disusun), maka kita juga bisa membuat adapter yang menjembatani antar world. Misalnya, jika Anda memiliki host environment yang hanya mendukung world “sockets”, tapi Anda memiliki komponen yang ingin melakukan permintaan HTTP (yang berada dalam world HTTP), Anda bisa menulis komponen adapter yang mengimplementasikan world HTTP menggunakan world sockets.

Dengan komposisi sederhana seperti itu, komponen Anda kini dapat berjalan di world “sockets” tanpa perlu modifikasi! Potensinya sangat luas.


Masa Depan di Depan Mata

Component Model adalah terobosan besar, bukan hanya untuk WebAssembly, tetapi juga untuk seluruh pengembang perangkat lunak. Model ini akan mengubah secara mendasar cara kita berpikir dan membangun software. Bahkan sekarang, meski masih dalam tahap awal, manfaatnya sudah sangat besar. Ikuti terus perkembangan di ekosistem WebAssembly — karena akan semakin banyak use-case menarik yang muncul seiring dengan meningkatnya adopsi teknologi ini.

Infrastruktur IT yang kuat adalah kunci produktivitas perusahaan. Dengan f5. indonesia, Anda bisa mendapatkan solusi IT lengkap yang sesuai dengan kebutuhan Anda. iLogo Indonesia sebagai mitra terpercaya siap mengintegrasikan semuanya agar bisnis Anda tetap berjalan lancar dan aman.
Hubungi kami sekarang atau kunjungi f5.ilogoindonesia.id untuk informasi lebih lanjut!