WebAssembly nedir sorusu, yalnızca tarayıcıda yüksek performanslı uygulama geliştirenlerin değil; sunucu, edge, eklenti sistemi ve güvenli kod çalıştırma platformları oluşturan ekiplerin de karşısına çıkıyor.
WebAssembly veya kısa adıyla Wasm, programlama dillerinin derlenebileceği taşınabilir ve düşük seviyeli bir ikili komut formatıdır. Kod doğrudan belirli bir işletim sistemi veya işlemci için hazırlanmak yerine WebAssembly çalışma zamanının anlayacağı bir biçime dönüştürülür.
Bu yaklaşım sayesinde Rust, C, C++, Go, JavaScript, Python ve başka dillerden oluşturulan uygun WebAssembly çıktıları; tarayıcıda, sunucuda, edge platformunda veya bir uygulamanın içine gömülü çalışma zamanında çalıştırılabilir.
Ancak WebAssembly tek başına bir işletim sistemi arayüzü sunmaz. Bir WebAssembly modülünün dosya sistemine, ağ bağlantısına, saate, rastgele sayı üreticisine veya çevre değişkenlerine nasıl erişeceği çalışma ortamı tarafından belirlenir.
Tarayıcı içerisindeki WebAssembly kodu JavaScript ve Web API’leri aracılığıyla dış dünyayla iletişim kurabilir. Tarayıcı dışındaki uygulamalarda ise bu ihtiyacı standartlaştırmak amacıyla WASI, yani WebAssembly System Interface geliştirilmiştir.
WASI; dosya, ağ, saat, rastgele sayı, komut satırı ve HTTP gibi sistem özelliklerini dil ve işletim sisteminden bağımsız arayüzler hâlinde tanımlar. Uygulamaya hangi özelliklerin açılacağı çalışma zamanı tarafından kontrol edilebilir.
Modern WebAssembly ekosisteminin diğer önemli parçası Component Model yapısıdır. Component Model, farklı dillerde hazırlanmış WebAssembly bileşenlerinin ortak ve tür güvenli arayüzler üzerinden birleştirilmesini amaçlar.
Bu rehberde WebAssembly’nin çalışma modelini, WASI’nin neden gerekli olduğunu, Module ile Component arasındaki farkı, WIT arayüzlerini, sandbox sınırlarını, WASI 0.1–0.2–0.3 sürümlerini ve üretim ortamında dikkat edilmesi gereken noktaları inceleyeceğiz.
Önemli: WebAssembly’nin sandbox içinde çalışması, çalıştırılan kodun otomatik olarak güvenilir olduğu anlamına gelmez. Çalışma zamanına verilen dosya, ağ, CPU, bellek ve dış servis yetkileri ayrıca sınırlandırılmalıdır.
İçindekiler
- WebAssembly Nedir?
- Wasm Ne Anlama Gelir?
- WebAssembly Neden Geliştirildi?
- WebAssembly Nasıl Çalışır?
- WebAssembly Mimarisinin Bileşenleri
- WebAssembly Module Nedir?
- Wasm ile WAT Arasındaki Fark
- Host ve Guest Nedir?
- Imports ve Exports
- Linear Memory Nedir?
- Tarayıcıda WebAssembly
- JavaScript ile İlişkisi
- WASI Nedir?
- WASI Neden Gereklidir?
- WASI Sürümleri
- WASI 0.1
- WASI 0.2
- WASI 0.3
- Component Model Nedir?
- WIT Nedir?
- Interface, World ve Package
- Module ile Component Arasındaki Fark
- Canonical ABI Nedir?
- Capability Tabanlı Güvenlik
- Dosya Sistemi Erişimi
- Ağ Erişimi
- WebAssembly Runtime Nedir?
- Yaygın WebAssembly Runtime’ları
- Hangi Diller WebAssembly Üretebilir?
- WebAssembly Kullanım Alanları
- Tarayıcı Uygulamaları
- Serverless ve Edge
- Güvenli Eklenti Sistemleri
- Mikroservis ve Bileşen Mimarisi
- Yapay Zekâ ve Veri İşleme
- IoT ve Gömülü Sistemler
- WebAssembly ile Container Farkı
- WebAssembly ile JVM Farkı
- Native Binary ile Farkı
- WebAssembly Performansı
- WebAssembly Güvenliği
- Güvenlik Riskleri
- WebAssembly’nin Sınırlamaları
- Örnek WIT Arayüzü
- Örnek Eklenti Mimarisi
- WebAssembly Uygulama Yol Haritası
- Runtime Seçim Kriterleri
- WebAssembly Kontrol Listesi
- Sık Yapılan Hatalar
- Sık Sorulan Sorular
WebAssembly Nedir?
WebAssembly, stack tabanlı sanal makine için tasarlanan taşınabilir bir ikili komut formatıdır.
Bir programlama dilinde yazılan kod, desteklenen derleyici ve araç zinciri aracılığıyla çoğunlukla .wasm uzantılı bir dosyaya dönüştürülür.
Bu çıktı doğrudan işletim sistemi tarafından değil, WebAssembly desteği bulunan bir tarayıcı veya runtime tarafından çalıştırılır.
WebAssembly’nin Temel Hedefleri
- Farklı işlemci ve işletim sistemlerinde taşınabilir çalışmak
- Kompakt bir ikili format kullanmak
- Hızlı yükleme ve derleme sağlamak
- Sandbox içinde kontrollü çalışma sunmak
- Birden fazla programlama diline hedef olmak
- Tarayıcı ve tarayıcı dışı ortamlarda kullanılabilmek
WebAssembly Bir Programlama Dili midir?
WebAssembly çoğunlukla doğrudan uygulama yazmak için kullanılan yüksek seviyeli bir programlama dili değildir.
Rust, C veya başka bir dilde yazılan kaynak kodun derlendiği hedef format olarak düşünülmelidir.
Wasm Ne Anlama Gelir?
Wasm, WebAssembly kelimesinin kısaltılmış biçimidir. Bir baş harf kısaltması olmadığı için bütün harflerle “WASM” yazılması zorunlu değildir.
Yaygın Dosya Türleri
| Dosya | Açıklama |
|---|---|
.wasm |
Çalıştırılabilir ikili WebAssembly formatı |
.wat |
İnsan tarafından okunabilen metinsel temsil |
.wit |
Component Model arayüzlerini tanımlayan WIT dosyası |
WebAssembly Neden Geliştirildi?
Web tarayıcılarında yıllarca temel programlama dili JavaScript oldu. JavaScript genel web uygulamaları için güçlü bir ekosistem sunsa da bazı iş yüklerinde başka dillerdeki mevcut kodların tarayıcıya taşınması veya yüksek hesaplama performansı elde edilmesi gerekiyordu.
Temel Gereksinimler
- Oyun motorlarını tarayıcıda çalıştırmak
- Görüntü ve video işleme yapmak
- CAD ve 3D tasarım uygulamaları sunmak
- Mevcut C ve C++ kodlarını web ortamına taşımak
- Kriptografi ve sıkıştırma işlemlerini hızlandırmak
- Diller için ortak taşınabilir bir hedef oluşturmak
Zamanla WebAssembly’nin taşınabilir ve sandbox tabanlı yapısının tarayıcı dışındaki platformlarda da kullanılabileceği görüldü.
WebAssembly Nasıl Çalışır?
Genel çalışma süreci şu şekildedir:
- Geliştirici kaynak kodunu desteklenen bir dilde yazar.
- Derleyici kodu WebAssembly bytecode biçimine dönüştürür.
- Ortaya
.wasmmodülü veya Component Model bileşeni çıkar. - Tarayıcı ya da runtime dosyayı doğrular.
- Kod yorumlanır veya yerel makine koduna derlenir.
- Host tarafından verilen yetkilerle çalıştırılır.
- Çıktılar import ve export arayüzleri üzerinden aktarılır.
Doğrulama Aşaması
Runtime, kodun geçerli WebAssembly yapısına uyup uymadığını kontrol eder. Türler, talimatlar ve bellek erişim yapısı doğrulanır.
Derleme Aşaması
Runtime, WebAssembly kodunu yorumlayabilir, önceden derleyebilir veya çalışma zamanında yerel makine koduna dönüştürebilir.
WebAssembly Mimarisinin Temel Bileşenleri
| Bileşen | Görevi |
|---|---|
| Kaynak kod | Rust, C, Go veya başka dilde yazılan uygulama |
| Derleyici | Kaynak kodu WebAssembly çıktısına dönüştürür |
| Module | WebAssembly talimatları, fonksiyonları ve bellek tanımları |
| Component | Yüksek seviyeli tür ve arayüzlere sahip birleştirilebilir Wasm birimi |
| Host | WebAssembly kodunu çalıştıran tarayıcı veya runtime |
| Guest | Host içinde çalışan WebAssembly programı |
| Imports | Guest’in host veya başka bileşenden istediği işlevler |
| Exports | Guest’in dış dünyaya sunduğu işlevler |
| Linear memory | WebAssembly programının kullanabildiği doğrusal bellek alanı |
| WASI | Tarayıcı dışı sistem özellikleri için standart arayüzler |
| WIT | Component Model arayüzlerinin tanımlandığı dil |
WebAssembly Module Nedir?
WebAssembly Module, fonksiyonlar, türler, tablolar, bellek tanımları ve import-export bilgileri içeren temel WebAssembly ikili birimidir.
Bir Module İçinde Bulunabilecek Yapılar
- Fonksiyon tanımları
- Fonksiyon türleri
- Global değerler
- Linear memory
- Function table
- Imported fonksiyonlar
- Export edilen fonksiyonlar
- Başlangıç fonksiyonu
- Veri segmentleri
Module Tek Başına Dosyaya Erişebilir mi?
Hayır. Host gerekli fonksiyonları veya WASI arayüzlerini sağlamazsa modül dosya, ağ ve sistem kaynaklarına erişemez.
Wasm ile WAT Arasındaki Fark
Wasm, makine tarafından verimli biçimde işlenmesi amaçlanan ikili formattır.
WAT, WebAssembly Text Format ifadesinin kısaltmasıdır ve WebAssembly yapısının insanlar tarafından okunabilen metinsel gösterimidir.
Basit WAT Örneği
(module
(func $topla (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add
)
(export "topla" (func $topla))
)
Bu örnek iki adet 32 bit tam sayıyı toplayan ve dışarıya topla adıyla sunan bir fonksiyon tanımlar.
Host ve Guest Nedir?
Host
WebAssembly kodunu çalıştıran ortamdır. Tarayıcı, Wasmtime runtime’ı veya uygulamaya gömülü başka bir motor host olabilir.
Guest
Host tarafından çalıştırılan WebAssembly modülü veya bileşenidir.
Güven Sınırı
Guest, host tarafından açıkça verilmemiş sistem kaynaklarına otomatik olarak erişememelidir. Ancak host yanlış yetkilendirilirse guest geniş yetkilere sahip olabilir.
WebAssembly Imports ve Exports
Import
WebAssembly kodunun dışarıdan beklediği fonksiyon, bellek, tablo veya sistem arayüzüdür.
Örneğin guest, ekrana log yazdırmak için host tarafından sağlanan bir fonksiyonu import edebilir.
Export
WebAssembly kodunun dışarıdaki uygulamalara sunduğu fonksiyon veya kaynaktır.
Örneğin görüntüyü işleyen resize_image fonksiyonu host uygulamasına export edilebilir.
Arayüz Sözleşmesi
Module seviyesinde çoğunlukla düşük seviyeli sayılar ve bellek işaretçileri kullanılır. Component Model ise string, record ve result gibi yüksek seviyeli türleri standartlaştırmayı amaçlar.
Linear Memory Nedir?
Linear memory, WebAssembly programına sunulan sürekli bayt dizisi biçimindeki bellek alanıdır.
Özellikleri
- Guest tarafından indeksler üzerinden kullanılır.
- Belirli sınırlar içinde büyütülebilir.
- Host ve guest arasında veri aktarımında kullanılabilir.
- Sandbox dışındaki rastgele host belleğine doğrudan erişim sağlamaz.
Memory-Safe Dil Kullanmak Gerekir mi?
WebAssembly sandbox’ı host belleğini korumaya yardımcı olur. Ancak C veya C++ gibi güvenli olmayan bir dilden derlenen program kendi linear memory alanı içerisinde buffer overflow ve use-after-free benzeri mantık hataları yaşayabilir.
Tarayıcıda WebAssembly
Tarayıcı, WebAssembly modülünü indirir, doğrular, derler ve JavaScript ortamıyla birlikte çalıştırır.
Tarayıcı Akışı
- Web sayfası JavaScript dosyasını yükler.
- JavaScript,
.wasmdosyasını getirir. - Tarayıcı modülü doğrular ve derler.
- Import edilen fonksiyonlar sağlanır.
- Modül örneği oluşturulur.
- Export edilen fonksiyonlar çağrılır.
Tarayıcı Kullanım Örnekleri
- Görüntü düzenleme
- Video ve ses işleme
- 3D oyunlar
- CAD uygulamaları
- Bilimsel hesaplama
- Şifreleme
- Belge dönüştürme
- Emülatörler
WebAssembly JavaScript’in Yerini Alır mı?
WebAssembly ve JavaScript çoğunlukla birbirinin alternatifi değil, tamamlayıcısıdır.
JavaScript kullanıcı arayüzünü, DOM işlemlerini ve web uygulaması kontrol akışını yönetebilir. WebAssembly ise hesaplama açısından yoğun veya başka dillerden taşınan modülleri çalıştırabilir.
| Alan | JavaScript | WebAssembly |
|---|---|---|
| DOM erişimi | Doğrudan Web API’leriyle | Çoğunlukla host veya JavaScript üzerinden |
| Kaynak dil | JavaScript ve TypeScript | Birçok derlenebilir dil |
| Dosya formatı | Metin tabanlı | Kompakt ikili format |
| Yoğun hesaplama | İş yüküne göre yeterli olabilir | Bazı iş yüklerinde avantaj sağlayabilir |
| Web dışı kullanım | Node.js gibi ortamlarda | Runtime ve WASI üzerinden |
WASI Nedir?
WASI, WebAssembly System Interface ifadesinin kısaltmasıdır.
WebAssembly programlarının tarayıcı dışındaki çalışma ortamlarında işletim sistemine benzer özellikleri taşınabilir ve kontrollü arayüzlerle kullanmasını sağlar.
WASI’nin Tanımlayabildiği İşlevler
- Standart giriş ve çıkış
- Komut satırı argümanları
- Çevre değişkenleri
- Dosya ve dizin işlemleri
- Duvar ve monotonic saat
- Güvenli rastgele sayı üretimi
- TCP ve UDP ağ işlemleri
- DNS çözümleme
- HTTP istemci ve sunucu arayüzleri
WASI Neden Gereklidir?
Temel WebAssembly standardı bilinçli olarak dosya sistemi, ağ veya işletim sistemi çağrılarını tanımlamaz.
Bu sayede WebAssembly yalnızca Unix veya Windows yapısına bağımlı kalmaz. Ancak gerçek uygulamaların dış dünyayla iletişim kurabilmesi için standart arayüzlere ihtiyaç duyulur.
WASI bu ihtiyacı aşağıdaki hedeflerle karşılamaya çalışır:
- Taşınabilir sistem arayüzleri
- Runtime’lar arasında uyumluluk
- En az ayrıcalıklı erişim
- Dil bağımsız bileşen geliştirme
- Dosya ve ağ yetkilerinin host tarafından kontrolü
WASI Sürümleri
| Sürüm | Durum | Temel Yapı |
|---|---|---|
| WASI 0.1 | Legacy | POSIX benzeri module arayüzleri |
| WASI 0.2 | Stable | Component Model ve WIT tabanlı arayüzler |
| WASI 0.3 | Stable | Component Model içinde yerel async, stream ve future |
WASI 0.1
WASI 0.1, eski nesil modül tabanlı ve POSIX benzeri sistem arayüzü yaklaşımıdır.
Güçlü Yönleri
- Uzun süredir kullanılıyor olması
- Birçok runtime ve araç tarafından desteklenmesi
- Basit komut satırı uygulamalarında yaygın kullanılması
Sınırlamaları
- Component Model tabanlı değildir.
- Diller arası yüksek seviyeli tür paylaşımı sınırlıdır.
- Modern bileşen birleştirme yapısını sunmaz.
- Yeni projeler için uzun vadeli hedef değildir.
WASI 0.2
WASI 0.2, WASI’yi Component Model ve WIT arayüzleri üzerine taşıyan kararlı sürümdür.
Temel Özellikler
- Component Model tabanı
- WIT ile dil bağımsız arayüz tanımı
- Diller arası bileşen birleştirme
wasi:cli/commanddünyasıwasi:http/proxydünyası- Dosya, ağ, saat ve random arayüzleri
WASI 0.2 Asenkron Yapısı
WASI 0.2, asenkron giriş ve çıkış işlemlerini wasi:io paketindeki pollable ve stream kaynaklarıyla modelledi.
Bu yapı host ile doğrudan iletişimde çalışsa da çok sayıda bileşenin zincir hâlinde birleştirildiği senaryolarda karmaşıklık oluşturabiliyordu.
WASI 0.3
WASI 0.3, Component Model içerisine yerel asenkron programlama yetenekleri ekler.
Yeni Temel Yapılar
async funcstream<T>future<T>
Async Func
WIT içerisinde fonksiyonların asenkron olduğu açıkça tanımlanabilir. Runtime zamanlama ve bekletme işlemlerini yönetir.
Stream
Verilerin bileşen sınırlarından parça parça ve asenkron biçimde aktarılmasını sağlar.
Future
Gelecekte tamamlanacak tek bir değeri veya işlemin sonucunu temsil eder.
WASI 0.3 Dünyaları
wasi:cli/commandwasi:http/servicewasi:http/middleware
WASI 0.2’den 0.3’e Geçilmeli mi?
Her projenin hemen geçmesi gerekmez. Kullanılan dil araç zinciri, runtime ve kütüphanelerin WASI 0.3 desteği kontrol edilmelidir.
WebAssembly Component Model Nedir?
Component Model, WebAssembly modüllerine yüksek seviyeli arayüzler, bileşen birleştirme ve diller arası uyumluluk ekleyen mimaridir.
Temel Hedefleri
- Dil bağımsız arayüzler tanımlamak
- Bileşenlerin ihtiyaçlarını açıkça belirtmek
- Farklı dillerdeki bileşenleri birleştirmek
- String, record ve result gibi yüksek seviyeli türleri desteklemek
- Host ile guest arasındaki veri dönüşümünü standartlaştırmak
Örnek
Rust ile yazılan bir görüntü işleme bileşeni, JavaScript ile yazılan bir uygulamadan veya Go ile hazırlanan başka bir bileşenden ortak WIT arayüzü üzerinden çağrılabilir.
WIT Nedir?
WIT, WebAssembly Interface Types ifadesinin kısaltmasıdır ve Component Model için kullanılan arayüz tanımlama dilidir.
WIT, bir bileşenin hangi fonksiyonları sunduğunu ve hangi dış fonksiyonlara ihtiyaç duyduğunu dil bağımsız biçimde tanımlar.
Desteklenen Tür Örnekleri
- String
- Boolean
- Tam ve ondalıklı sayılar
- List
- Record
- Variant
- Option
- Result
- Resource
- Stream
- Future
Interface, World ve Package Nedir?
Interface
Birbiriyle ilişkili tür ve fonksiyon bildirimlerinin bulunduğu sözleşmedir.
World
Bir bileşenin hangi arayüzleri import ettiğini ve hangilerini export ettiğini tanımlar.
Package
İlişkili WIT interface ve world tanımlarının bir arada bulunduğu pakettir.
| Kavram | Basit Karşılığı |
|---|---|
| Interface | Belirli bir yetenek için fonksiyon sözleşmesi |
| World | Bileşenin sunduğu ve ihtiyaç duyduğu bütün yetenekler |
| Package | İlişkili interface ve world koleksiyonu |
WebAssembly Module ile Component Arasındaki Fark
| Özellik | Module | Component |
|---|---|---|
| Temel seviye | Düşük seviyeli WebAssembly | Yüksek seviyeli bileşen mimarisi |
| Arayüz türleri | Temel sayılar ve linear memory | String, record, list, result ve resource |
| Arayüz tanımı | Import ve export imzaları | WIT interface ve world yapısı |
| Diller arası kullanım | Özel ABI ve bağlayıcı gerekebilir | Canonical ABI ve oluşturulan bindings |
| Bileşen birleştirme | Daha düşük seviyeli | Mimari hedeflerden biridir |
Canonical ABI Nedir?
Canonical ABI, Component Model içerisindeki yüksek seviyeli türlerin temel WebAssembly değerleri ve linear memory yapısına nasıl dönüştürüleceğini tanımlar.
Neden Gereklidir?
Rust string yapısıyla Go veya JavaScript string yapısı bellekte aynı şekilde temsil edilmeyebilir.
Canonical ABI, farklı dillerden üretilen bileşenlerin veri aktarımını ortak kurallarla gerçekleştirmesine yardımcı olur.
WASI ve Capability Tabanlı Güvenlik
WASI uygulamalarının önemli güvenlik yaklaşımlarından biri, programa bütün sistem kaynaklarını açmak yerine yalnızca ihtiyacı olan belirli yetkileri vermektir.
Örnek Yetkiler
- Yalnızca belirli dizini okuma
- Başka bir dizine yazma
- Belirli çevre değişkenini görme
- Sınırlı ağ bağlantısı kurma
- Yalnızca belirli host fonksiyonunu çağırma
Varsayılan Olarak Kapalı Yaklaşımı
Güvenli tasarımda guest program, host tarafından açıkça verilmemiş yeteneklere erişememelidir.
WASI Dosya Sistemi Erişimi
WASI runtime’larında uygulamaya çoğunlukla yalnızca önceden açılan veya bağlanan dizinlere erişim verilir.
Preopened Directory
Host, yerel dosya sistemindeki belirli bir dizini guest içerisinde farklı bir adla erişilebilir hâle getirir.
Yetki Örnekleri
- Salt okunur erişim
- Okuma ve yazma
- Yalnızca belirli alt dizin
- Geçici çalışma dizini
Risk
Host kök dizini veya hassas dosya yollarını guest’e açarsa sandbox’ın sağladığı güvenlik avantajı büyük ölçüde zayıflar.
WASI Ağ Erişimi
WASI sürümü ve runtime desteğine göre TCP, UDP, DNS ve HTTP arayüzleri kullanılabilir.
Ağ Yetkisinde Kontrol Edilecekler
- Hangi hedef IP adreslerine bağlanılabilir?
- Hangi alan adları kullanılabilir?
- Hangi portlara çıkış yapılabilir?
- Sunucu soketi açılabilir mi?
- DNS çözümleme izni bulunuyor mu?
- İstek ve cevap boyutu sınırı var mı?
Guest’e bütün host ağını miras bırakmak yerine görev için gereken adres ve protokoller sınırlandırılmalıdır.
WebAssembly Runtime Nedir?
WebAssembly runtime, Wasm modüllerini veya bileşenlerini doğrulayan, derleyen, çalıştıran ve host kaynaklarıyla bağlantı kurmasını sağlayan yazılımdır.
Runtime’ın Görevleri
- WebAssembly ikili dosyasını doğrulamak
- Kodu yerel makine koduna dönüştürmek
- Memory ve table kaynaklarını yönetmek
- Import fonksiyonlarını sağlamak
- WASI arayüzlerini sunmak
- CPU ve bellek sınırları uygulamak
- Hata ve trap durumlarını yönetmek
- Component Model bindings çalıştırmak
Yaygın WebAssembly Runtime’ları
| Runtime veya Araç | Temel Kullanım |
|---|---|
| Wasmtime | Sunucu ve gömülü uygulamalar için standalone runtime |
| WasmEdge | Bulut, edge ve bazı AI iş yükleri |
| WAMR | Kaynakları sınırlı ve gömülü ortamlar |
| wasmCloud | Bileşen ve dağıtık uygulama platformu |
| jco | Component Model bileşenlerini JavaScript ortamlarında çalıştırma |
| Browser engines | Chrome, Firefox, Safari ve diğer tarayıcılardaki Wasm motorları |
Wasmtime
Bytecode Alliance tarafından geliştirilen ve WebAssembly, WASI ile Component Model desteği sunan runtime’dır.
Runtime Desteği Aynı mı?
Hayır. Her runtime bütün WASI sürümlerini, Component Model özelliklerini veya deneysel önerileri aynı seviyede desteklemeyebilir.
Hangi Diller WebAssembly Üretebilir?
- Rust
- C
- C++
- Go
- TinyGo
- C#
- AssemblyScript
- JavaScript araç zincirleri
- Python tabanlı araçlar
- MoonBit
- Zig
Destek seviyesi dile, derleyiciye, standart kütüphanelere ve hedeflenen WASI sürümüne göre değişebilir.
Dil Seçerken
- Component Model desteği
- WIT bindings araçları
- WASI sürüm desteği
- Üretilen binary boyutu
- Başlatma süresi
- Garbage collector gereksinimi
- Hata ayıklama araçları
birlikte değerlendirilmelidir.
WebAssembly Kullanım Alanları
| Alan | WebAssembly’nin Rolü |
|---|---|
| Web uygulamaları | Yoğun hesaplama ve mevcut native kodu taşıma |
| Edge computing | Hızlı başlayan taşınabilir işlevler |
| Serverless | İzole ve küçük çalışma birimleri |
| Plugin sistemi | Güvenilmeyen veya üçüncü taraf eklentileri sandbox içinde çalıştırma |
| Mikroservis | Dil bağımsız bileşenler ve arayüzler |
| AI | Ön işleme, inference ve taşınabilir eklentiler |
| IoT | Farklı cihazlara taşınabilir uygulama mantığı |
| Blockchain | Deterministik sözleşme veya işlem yürütme motoru |
Tarayıcı Uygulamalarında WebAssembly
Görüntü Düzenleme
Filtre, yeniden boyutlandırma ve format dönüştürme işlemleri kullanıcı cihazında yapılabilir.
Video İşleme
Codec, dönüştürme ve analiz kütüphaneleri tarayıcıya taşınabilir.
Oyunlar
Mevcut oyun motorlarının ve C++ kod tabanlarının web üzerinde çalıştırılmasına yardımcı olabilir.
Bilimsel Uygulamalar
Simülasyon, veri analizi ve matematiksel hesaplama iş yükleri kullanıcı cihazında çalıştırılabilir.
Serverless ve Edge Ortamlarında WebAssembly
WebAssembly bileşenleri küçük dosya boyutu ve hızlı başlatma potansiyeli nedeniyle kısa ömürlü edge ve serverless iş yüklerinde değerlendirilebilir.
Uygulamalar
- HTTP istek dönüştürme
- Kimlik doğrulama eklentileri
- İçerik filtreleme
- Görüntü optimizasyonu
- Özel yönlendirme mantığı
- API ön işleme
- Edge güvenlik kuralları
Merkezi trafik katmanları için API Gateway Nedir? rehberini inceleyebilirsiniz.
WebAssembly ile Güvenli Eklenti Sistemleri
Bir uygulama, üçüncü taraf geliştiricilerin eklenti yazmasına izin verebilir. Eklentiyi doğrudan native kod olarak ana süreçte çalıştırmak yüksek güvenlik riski oluşturabilir.
Wasm Eklenti Modeli
- Eklenti geliştiricisi belirlenen WIT arayüzünü uygular.
- Eklenti WebAssembly Component olarak derlenir.
- Ana uygulama bileşenin imzasını ve sürümünü kontrol eder.
- Runtime eklentiyi sandbox içinde çalıştırır.
- Yalnızca izin verilen host fonksiyonları sağlanır.
- CPU, bellek ve süre sınırı uygulanır.
Örnek Yetkiler
- Sipariş bilgisini okuma
- Belirli log fonksiyonunu çağırma
- Geçici veri saklama
- Yalnızca izin verilen HTTP servisine bağlanma
WebAssembly ve Mikroservis Mimarisi
Component Model, küçük işlevlerin farklı dillerde geliştirilip ortak WIT arayüzleri üzerinden birleştirilmesini sağlayabilir.
Muhtemel Avantajlar
- Dil bağımsız bileşenler
- Küçük dağıtım birimleri
- Hızlı başlatma
- İnce yetkilendirme
- Runtime düzeyinde izolasyon
Mikroservisin Yerini Alır mı?
Her durumda değil. WebAssembly Component aynı süreç veya runtime içinde birleştirilebilirken mikroservisler bağımsız ağ servisleri olarak çalışabilir.
Servisler arası iletişim hakkında Service Mesh Nedir? içeriğine göz atabilirsiniz.
WebAssembly ve Yapay Zekâ
WebAssembly, bazı yapay zekâ iş yüklerinde taşınabilir çalışma katmanı olarak kullanılabilir.
Kullanım Örnekleri
- Tarayıcıda model inference
- Metin ve görüntü ön işleme
- AI platformları için güvenli eklentiler
- Edge cihazlarında hafif model çalıştırma
- Model sonrası çıktı dönüştürme
- Özel tokenizer ve veri işleme bileşenleri
Her Model Wasm İçinde Çalışır mı?
Model boyutu, bellek kullanımı, SIMD, GPU erişimi ve runtime özellikleri uygun değilse WebAssembly tercih edilmeyebilir.
WebAssembly ve IoT
Kaynakları sınırlı cihazlarda küçük WebAssembly runtime’ları kullanılarak uygulama mantığı donanımdan daha bağımsız hâle getirilebilir.
Avantajlar
- Cihazlar arasında taşınabilir kod
- Uygulama güncellemesini donanım yazılımından ayırma
- Sandbox içinde görev çalıştırma
- Daha küçük dağıtım paketi potansiyeli
Dikkat Edilecekler
- RAM ve flash kapasitesi
- Runtime boyutu
- Gerçek zamanlı çalışma gereksinimi
- Donanım çevre birimi arayüzleri
- Güvenli güncelleme ve imza doğrulama
WebAssembly ile Container Arasındaki Fark
| Özellik | WebAssembly | Container |
|---|---|---|
| Dağıtım birimi | Wasm module veya component | Image ve filesystem katmanları |
| İşletim sistemi bağımlılığı | WASI ve runtime arayüzüne bağlı | Host kernel ve image kullanıcı alanına bağlı |
| Başlatma | Çok hızlı olabilir | Genellikle sanal makineden hızlıdır |
| Dosya sistemi | Host tarafından verilen capability’ler | Image ve mount yapıları |
| Uyumluluk | Uygulama ve kütüphane desteğine bağlı | Geniş Linux yazılım ekosistemi |
| İzolasyon | Runtime sandbox’ı | Namespace, cgroup ve ek güvenlik katmanları |
WebAssembly Container’ların Yerini Alır mı?
Bütün uygulamalarda değil. Container’lar mevcut işletim sistemi araçlarını ve paketlerini çalıştırmak için daha geniş uyumluluk sunar.
WebAssembly küçük, taşınabilir ve yetkileri daraltılmış iş yüklerinde avantaj sağlayabilir.
WebAssembly ile JVM Arasındaki Fark
JVM ve WebAssembly, farklı kaynak dillerden gelen kodu taşınabilir çalışma ortamında çalıştırma fikrini paylaşır.
| Özellik | WebAssembly | JVM |
|---|---|---|
| Temel ekosistem | Çok dilli ve tarayıcı dahil | Java ve JVM dilleri |
| Sistem arayüzü | Host ve WASI | Java standart kütüphanesi ve JVM |
| Tarayıcı desteği | Yerleşik | Modern tarayıcılarda yerleşik değil |
| Component yaklaşımı | WIT ve Component Model | JVM sınıf ve modül ekosistemi |
WebAssembly ile Native Binary Farkı
Native Binary
Belirli işlemci ve işletim sistemi için derlenir. Doğrudan işletim sistemi kaynaklarını kullanabilir.
WebAssembly
Taşınabilir formatta üretilir ve runtime üzerinden çalışır. Dış kaynak erişimleri host tarafından sağlanır.
Hangisi Daha Hızlıdır?
İş yükü, runtime, derleyici, sistem çağrıları ve donanım özelliklerine göre değişir. WebAssembly her koşulda native koddan hızlı veya aynı hızda değildir.
WebAssembly Performansı
WebAssembly, kompakt ikili format ve optimize edilebilir talimat yapısı sayesinde yüksek performans sağlayabilir.
Performansı Etkileyen Faktörler
- Kaynak dil ve derleyici
- Runtime kod üreticisi
- AOT veya JIT kullanımı
- Host ile guest arasındaki çağrı sayısı
- Veri kopyalama miktarı
- Linear memory yönetimi
- SIMD desteği
- Garbage collection gereksinimi
- Sistem çağrıları
Host–Guest Sınır Maliyeti
Çok küçük işlemler için sürekli host ve guest arasında geçiş yapmak performansı düşürebilir. İşlerin uygun büyüklükte gruplandırılması gerekebilir.
Başlatma Süresi
Küçük Wasm bileşenleri, büyük runtime veya container iş yüklerine göre hızlı başlatılabilir. Ancak gerçek sonuç runtime ve uygulama boyutuna bağlıdır.
WebAssembly Güvenliği
WebAssembly, kodun host sisteminden izole bir bellek ve çalışma modeli içerisinde çalıştırılmasını amaçlar.
Güvenlik Katmanları
- Doğrulanan komut formatı
- Sandbox bellek modeli
- Kontrollü imports ve exports
- WASI capability izinleri
- Runtime kaynak limitleri
- Host uygulamasının yetkilendirmesi
Kaynak Limitleri
Runtime aşağıdaki sınırları uygulayabilmelidir:
- Maksimum bellek
- CPU veya execution fuel
- Çalışma süresi
- Stack boyutu
- Dosya ve ağ erişimi
- Eş zamanlı görev sayısı
WebAssembly Güvenlik Riskleri
Runtime Güvenlik Açıkları
Runtime veya JIT derleyicideki bir güvenlik açığı sandbox kaçışına neden olabilir. Runtime düzenli güncellenmelidir.
Geniş Host Yetkileri
Guest’e bütün dosya sistemi ve ağ erişimi verilirse sandbox yalnızca biçimsel bir katman hâline gelebilir.
Güvensiz Host Fonksiyonları
Host tarafından sağlanan bir fonksiyon girdi doğrulaması yapmıyorsa guest bu fonksiyonu kötüye kullanabilir.
Kaynak Tüketimi
Sonsuz döngü veya yoğun bellek kullanımı hizmet reddine neden olabilir.
Tedarik Zinciri
İndirilen Wasm bileşeni kötü niyetli olabilir. Artifact imzası, digest ve kaynağı doğrulanmalıdır.
Yazılım üretim zincirini doğrulama hakkında SLSA Nedir? rehberini inceleyebilirsiniz.
Hassas Verinin Linear Memory’de Kalması
Parola, token veya kişisel veriler guest belleğinde gerekenden uzun süre tutulmamalıdır.
Side-Channel Saldırıları
Paylaşılan donanım, cache zamanlaması ve spekülatif çalıştırma gibi daha düşük seviyeli riskler threat model içerisinde değerlendirilmelidir.
WebAssembly’nin Sınırlamaları
Ekosistem Olgunluğu
Her dil ve kütüphane WebAssembly veya WASI için sorunsuz biçimde derlenmeyebilir.
İşletim Sistemi Özellikleri
Process oluşturma, bazı thread modelleri, cihaz sürücüleri ve özel sistem çağrıları sınırlı olabilir.
Hata Ayıklama
Kaynak haritaları ve debugging araçları gelişse de native veya klasik uygulama ortamları kadar kolay olmayabilir.
Runtime Uyumluluğu
Aynı WASI sürümünü desteklediğini belirten runtime’ların ek özellikleri ve davranışları farklı olabilir.
Binary Boyutu
Dil runtime’ı veya garbage collector dâhil edilen bileşenlerin boyutu beklenenden büyük olabilir.
İşlemci Özellikleri
GPU, özel SIMD veya donanım hızlandırıcılarına erişim standart ve her ortamda aynı olmayabilir.
Standartların Gelişmesi
Component Model ve WASI hızlı geliştiği için araç zincirleri arasında sürüm uyumsuzluğu görülebilir.
Örnek WIT Arayüzü
Aşağıdaki örnek, metni işleyen basit bir bileşen arayüzünü gösterir:
package teknoturkiye:metin@1.0.0;
interface metin-isleme {
record sonuc {
kelime-sayisi: u32,
karakter-sayisi: u32,
}
analiz-et: func(metin: string) -> result<sonuc, string>;
}
world analiz-bileseni {
export metin-isleme;
}
Bu Arayüz Ne Söylüyor?
- Paketin adı
teknoturkiye:metinolarak tanımlanmıştır. metin-islemeadında interface bulunur.- Fonksiyon bir string alır.
- Başarılı olursa record, hata oluşursa string döndürür.
- Bileşen bu interface’i dışarıya export eder.
Örnek WebAssembly Eklenti Mimarisi
Bir e-ticaret platformunun müşterilerine özel fiyatlandırma eklentileri geliştirme imkânı sunduğunu düşünelim.
WIT Sözleşmesi
Her eklenti aşağıdaki bilgileri alır:
- Ürün kimliği
- Temel fiyat
- Müşteri segmenti
- Kampanya kodu
Ve yeni fiyatla açıklama metnini döndürür.
Host Yetkileri
- Yalnızca belirli ürün bilgilerini okuyabilir.
- Dosya sistemine erişemez.
- Genel internet bağlantısı kuramaz.
- Belirlenen log fonksiyonunu çağırabilir.
- 100 milisaniye işlem süresine sahiptir.
- 32 MB bellek kullanabilir.
Dağıtım Süreci
- Geliştirici bileşeni imzalar.
- Platform digest ve imzayı doğrular.
- WIT sürümüyle uyumluluk kontrol edilir.
- Test ortamında otomatik testler çalıştırılır.
- Bileşen sınırlı yetkilerle üretime alınır.
- Hata ve kaynak kullanımı izlenir.
WebAssembly Uygulama Yol Haritası
Aşama 1: Kullanım Senaryosunu Belirleyin
- Tarayıcıda yoğun hesaplama mı?
- Güvenilmeyen eklenti çalıştırma mı?
- Edge işlevi mi?
- Çok dilli bileşen sistemi mi?
- IoT uygulama güncellemesi mi?
Aşama 2: Kaynak Dili ve Araç Zincirini Seçin
Dilin WASI ve Component Model desteğini kontrol edin. Yalnızca temel .wasm çıktısı üretmesi yeterli olmayabilir.
Aşama 3: WASI Sürümünü Belirleyin
Runtime, bindings generator ve bağımlılıkların aynı sürümle uyumlu olması gerekir.
Aşama 4: WIT Arayüzünü Tasarlayın
- Arayüzü küçük ve anlaşılır tutun.
- Hata türlerini açıkça tanımlayın.
- Sürümleme stratejisi oluşturun.
- Host ayrıntılarını arayüze sızdırmayın.
Aşama 5: Capability Modeli Oluşturun
Bileşenin ihtiyaç duyduğu dosya, ağ, saat ve host fonksiyonlarını listeleyin.
Aşama 6: Kaynak Limitlerini Uygulayın
- Bellek sınırı
- Execution fuel
- Timeout
- Maksimum çıktı boyutu
- Eş zamanlı çalışma sınırı
Aşama 7: Gözlemlenebilirlik Ekleyin
Başlatma süresi, çalışma süresi, trap sayısı, bellek kullanımı ve host çağrıları izlenmelidir.
Genel izleme mimarisi için Observability Nedir? içeriğini inceleyebilirsiniz.
Aşama 8: Tedarik Zincirini Koruyun
- Artifact digest’i kullanın.
- İmza doğrulaması yapın.
- Kaynak repository’yi kaydedin.
- Build provenance üretin.
- Runtime ve bağımlılıkları güncelleyin.
WebAssembly Runtime Seçim Kriterleri
Standart Desteği
- Hangi WebAssembly Core özelliklerini destekliyor?
- WASI 0.1, 0.2 veya 0.3 desteği var mı?
- Component Model desteği ne durumda?
- WASI test suite sonuçları bulunuyor mu?
Performans
- JIT ve AOT seçenekleri
- Başlatma süresi
- Memory kullanımı
- Component instantiation maliyeti
- Host çağrı performansı
Güvenlik
- Security advisory süreci
- Runtime sandbox yaklaşımı
- CPU ve memory limitleri
- Filesystem capability kontrolleri
- Network izinleri
- Güncelleme sıklığı
Entegrasyon
- Kullandığınız programlama dili için embedding API’si
- Kubernetes desteği
- Debugging ve profiling araçları
- OpenTelemetry entegrasyonu
- Artifact registry uyumluluğu
WebAssembly Kontrol Listesi
| Kontrol Maddesi | Durum |
|---|---|
| Kullanım senaryosu açıkça tanımlandı mı? | Evet / Hayır |
| WebAssembly’nin gerçekten avantaj sağlayacağı doğrulandı mı? | Evet / Hayır |
| Kaynak dilin Wasm desteği incelendi mi? | Evet / Hayır |
| WASI sürümü belirlendi mi? | Evet / Hayır |
| Runtime bu WASI sürümünü destekliyor mu? | Evet / Hayır |
| Module veya Component tercihi yapıldı mı? | Evet / Hayır |
| WIT interface ve world tanımları sürümlendi mi? | Evet / Hayır |
| Guest’in ihtiyaç duyduğu capability’ler listelendi mi? | Evet / Hayır |
| Dosya sistemi erişimi minimumda mı? | Evet / Hayır |
| Ağ hedefleri allowlist ile sınırlandırıldı mı? | Evet / Hayır |
| Bellek sınırı uygulanıyor mu? | Evet / Hayır |
| CPU veya execution fuel sınırı var mı? | Evet / Hayır |
| Çalışma süresi timeout ile sınırlandırıldı mı? | Evet / Hayır |
| Host fonksiyonlarında girdi doğrulaması yapılıyor mu? | Evet / Hayır |
| Wasm artifact digest’i doğrulanıyor mu? | Evet / Hayır |
| Artifact imzası kontrol ediliyor mu? | Evet / Hayır |
| Runtime güvenlik güncellemeleri izleniyor mu? | Evet / Hayır |
| Trap ve kaynak kullanımı loglanıyor mu? | Evet / Hayır |
| Fallback veya bileşeni devre dışı bırakma planı var mı? | Evet / Hayır |
| Farklı işletim sistemi ve runtime’larda test yapıldı mı? | Evet / Hayır |
WebAssembly Kullanımında Sık Yapılan Hatalar
- WebAssembly’yi her zaman native koddan hızlı sanmak
- WebAssembly’nin JavaScript’in tamamen yerini alacağını düşünmek
- Module ile Component kavramlarını karıştırmak
- WASI sürümlerini kontrol etmeden dağıtım yapmak
- Runtime desteği bulunmayan WIT sürümünü kullanmak
- Guest’e bütün dosya sistemini açmak
- Guest’e sınırsız ağ erişimi vermek
- CPU ve bellek limiti uygulamamak
- Host fonksiyonlarını güvenilir kabul etmek
- Wasm artifact kaynağını doğrulamamak
- Runtime güvenlik güncellemelerini geciktirmek
- Her native kütüphanenin Wasm’a kolayca derleneceğini varsaymak
- Host ve guest arasında aşırı veri kopyalamak
- WIT interface sürümleme stratejisi oluşturmamak
- WASI 0.1, 0.2 ve 0.3 arayüzlerini aynı kabul etmek
- Sandbox bulunduğu için uygulama güvenlik testlerini atlamak
- Container kullanımını hiçbir analiz yapmadan Wasm ile değiştirmek
WebAssembly ve WASI İçin Güvenilir Kaynaklar
- WebAssembly Resmî Sitesi
- WebAssembly Specifications
- W3C WebAssembly Core Specification
- WASI Sürümleri
- WASI 0.3 Dokümantasyonu
- WebAssembly Component Model
- Wasmtime Dokümantasyonu
- Bytecode Alliance
- TeknoTürkiye – API Gateway Nedir?
- TeknoTürkiye – Service Mesh Nedir?
- TeknoTürkiye – Observability Nedir?
- TeknoTürkiye – SLSA Nedir?
WebAssembly ve WASI Hakkında Sık Sorulan Sorular
WebAssembly nedir?
Farklı programlama dillerinin derlenebildiği, tarayıcı ve tarayıcı dışı çalışma ortamlarında kullanılabilen taşınabilir ikili komut formatıdır.
Wasm ne demektir?
WebAssembly kelimesinin kısa yazımıdır.
WebAssembly bir programlama dili midir?
Genellikle doğrudan uygulama yazılan yüksek seviyeli dil değil, programlama dillerinin derlendiği hedef formattır.
WebAssembly hangi dillerle yazılır?
Rust, C, C++, Go, C#, AssemblyScript, Zig ve farklı araç zincirleriyle başka dillerden WebAssembly üretilebilir.
WebAssembly yalnızca tarayıcıda mı çalışır?
Hayır. WASI ve standalone runtime’lar aracılığıyla sunucu, edge, IoT ve uygulama içi eklenti ortamlarında çalıştırılabilir.
WASI nedir?
WebAssembly uygulamalarının dosya, ağ, saat ve random gibi sistem özelliklerini taşınabilir arayüzlerle kullanmasını sağlayan standartlar ailesidir.
WASI neyin kısaltmasıdır?
WebAssembly System Interface ifadesinin kısaltmasıdır.
WASI 0.3 nedir?
WebAssembly Component Model’e yerel async func, stream ve future yetenekleri ekleyen kararlı WASI sürümüdür.
WASI 0.3 ne zaman yayımlandı?
WASI 0.3.0, 11 Haziran 2026 tarihinde yayımlandı.
WASI 0.2 hâlâ kullanılabilir mi?
Evet. Kararlı sürümdür ve Component Model tabanlı uygulamalarda kullanılabilir. Runtime ve araç zinciri uyumluluğu kontrol edilmelidir.
WASI 0.1 eski mi?
Legacy olarak sınıflandırılır ancak birçok runtime ve üretim sisteminde geniş destek görmeye devam eder.
Component Model nedir?
WebAssembly bileşenlerine yüksek seviyeli türler, dil bağımsız arayüzler ve bileşen birleştirme yeteneği ekleyen mimaridir.
WIT nedir?
WebAssembly bileşenlerinin sunduğu ve ihtiyaç duyduğu interface’leri tanımlayan arayüz dilidir.
WebAssembly Module ile Component aynı mı?
Hayır. Module temel düşük seviyeli Wasm birimidir. Component ise WIT, yüksek seviyeli türler ve Canonical ABI kullanan daha gelişmiş yapıdır.
WebAssembly güvenli midir?
Sandbox ve doğrulama önemli güvenlik avantajları sağlar. Ancak runtime açıkları, geniş host yetkileri ve kaynak tüketimi riskleri devam eder.
WebAssembly virüs çalıştırabilir mi?
Kötü amaçlı kod WebAssembly biçiminde hazırlanabilir. Sandbox etkisini sınırlar ancak kodun güvenilir kaynaktan geldiği ve yetkilerinin dar olduğu doğrulanmalıdır.
WebAssembly dosya sistemine erişebilir mi?
Yalnızca host veya WASI runtime tarafından erişim verilmişse erişebilir.
WebAssembly internete bağlanabilir mi?
Tarayıcıda Web API’leri, tarayıcı dışında ise runtime ve WASI ağ arayüzleri üzerinden izin verilirse bağlanabilir.
WebAssembly JavaScript’ten hızlı mı?
İş yüküne göre daha hızlı, benzer veya daha yavaş olabilir. Her kullanımda otomatik performans avantajı bulunmaz.
WebAssembly JavaScript’in yerini alır mı?
Çoğu web uygulamasında JavaScript ile birlikte kullanılır. Kullanıcı arayüzü ve DOM işlemlerinde JavaScript önemini korur.
WebAssembly container’ların yerini alır mı?
Bütün kullanım alanlarında hayır. Küçük ve izole iş yüklerinde alternatif olabilir; geniş işletim sistemi bağımlılığı bulunan uygulamalarda container daha uygundur.
WebAssembly ile Docker birlikte kullanılır mı?
Evet. Wasm runtime veya uygulaması container içinde çalıştırılabilir. Bazı platformlar container orkestrasyonu içinde Wasm iş yüklerini de destekler.
WebAssembly Kubernetes’te çalışır mı?
Uygun runtime ve entegrasyonlarla Kubernetes üzerinde WebAssembly iş yükleri çalıştırılabilir.
Wasmtime nedir?
Bytecode Alliance tarafından geliştirilen WebAssembly, WASI ve Component Model runtime’ıdır.
WasmEdge nedir?
Bulut, edge ve belirli yapay zekâ iş yüklerinde kullanılabilen WebAssembly runtime projelerinden biridir.
Linear memory nedir?
WebAssembly programının kullanabildiği, sürekli bayt dizisi biçimindeki sandbox bellek alanıdır.
Host ve guest ne demektir?
Host WebAssembly kodunu çalıştıran ortam, guest ise host içinde çalışan Wasm programıdır.
WebAssembly plugin sistemi için uygun mu?
Üçüncü taraf eklentilerini dar yetkiler, kaynak sınırları ve tanımlı arayüzlerle çalıştırmak için uygun olabilir.
WebAssembly edge computing için uygun mu?
Hızlı başlatma ve taşınabilirlik avantajları nedeniyle bazı edge iş yüklerinde kullanılabilir.
WebAssembly mobil uygulamada kullanılabilir mi?
Uygun runtime veya framework içine gömülerek kullanılabilir. Platform desteği ve uygulama mağazası kuralları değerlendirilmelidir.
WebAssembly’de GPU kullanılabilir mi?
Tarayıcıdaki WebGPU veya host tarafından sağlanan özel arayüzlerle mümkün olabilir. Standart ve taşınabilir destek çalışma ortamına göre değişir.
WebAssembly kodu nasıl debug edilir?
Kaynak haritaları, WAT çıktısı, runtime debugger araçları ve profiling sistemleri kullanılabilir.
WebAssembly uygulamasına ne kadar bellek verilmeli?
İş yükü ölçülmeli ve gereken minimum bellek sınırı uygulanmalıdır. Sınırsız bellek verilmemelidir.
WebAssembly artifact’i imzalanmalı mı?
Üretim ve üçüncü taraf eklenti sistemlerinde digest ve dijital imza doğrulaması önerilir.
Yeni proje WASI 0.2 mi 0.3 mü kullanmalı?
Runtime ve dil araç zinciri 0.3’ü kararlı biçimde destekliyorsa değerlendirilebilir. Aksi durumda 0.2 daha geniş araç uyumluluğu sunabilir.
WebAssembly kullanmaya nereden başlanmalı?
Önce küçük ve izole bir kullanım senaryosu seçilmeli, runtime ile dil desteği doğrulanmalı ve ardından WIT ile capability tasarımına geçilmelidir.
WebAssembly ve WASI Sonuç
WebAssembly nedir sorusunun temel cevabı; farklı programlama dillerinin derlenebildiği, taşınabilir ve sandbox tabanlı ikili çalışma formatıdır.
WebAssembly ilk olarak tarayıcıdaki yüksek performanslı uygulamalar için geliştirilmiş olsa da bugün standalone runtime’lar sayesinde sunucu, edge, IoT ve güvenli eklenti sistemlerinde kullanılabilir.
Temel WebAssembly standardı dosya ve ağ gibi sistem özelliklerini doğrudan tanımlamaz. WASI, bu özellikleri kontrollü ve taşınabilir arayüzler hâlinde sunar.
WASI 0.2, Component Model ve WIT tabanlı bileşen mimarisini kararlı hâle getirdi. WASI 0.3 ise async func, stream ve future ile asenkron işlemleri Component Model’in doğal bir parçasına dönüştürdü.
Component Model farklı dillerde geliştirilen bileşenlerin yüksek seviyeli türler ve ortak WIT arayüzleri üzerinden birleştirilmesini kolaylaştırır.
WebAssembly’nin güvenlik avantajı yalnızca sandbox’tan kaynaklanmaz. Guest’e verilen dosya, ağ ve host fonksiyonu yetkilerinin dar tutulması, CPU ve bellek sınırlarının uygulanması ve runtime’ın güncel tutulması gerekir.
WebAssembly her uygulama için container, native binary veya JavaScript’in yerini almaz. En yüksek faydayı taşınabilirlik, hızlı başlatma, güvenli eklenti çalıştırma ve dil bağımsız bileşen ihtiyacının bulunduğu projelerde sağlayabilir.
