Mozilla, Fastly, Intel ve Red Hat, WebAssembly'ı evrensel kullanıma yönelik bir platform olarak tanıtıyor

Mozilla, Fastly, Intel ve Red Hat Birleşik WebAssembly'ı herhangi bir altyapı, işletim sistemi veya cihazda güvenli kod yürütmeye yönelik evrensel bir platform haline getirmeye yardımcı olan teknolojiler geliştirme çabaları. WebAssembly'ın yalnızca web tarayıcılarında kullanılmasına izin vermeyen çalışma zamanı ve derleyicilerin ortak geliştirilmesi için bir topluluk oluşturulmuştur. Bayt Kodu İttifakı.

Tarayıcı dışında yürütülebilecek, WebAssembly formatında sunulan taşınabilir programlar oluşturmak için API'yi kullanmanızı öneririz. ÖYLE MİYDİM (WebAssembly Sistem Arayüzü), işletim sistemiyle doğrudan etkileşim için yazılım arayüzleri sağlar (dosyalar, soketler vb. ile çalışmak için POSIX API). WASI kullanan uygulamaların yürütme modelinin ayırt edici bir özelliği, bunların ana sistemden izolasyon için bir sanal alan ortamında çalışması ve her bir kaynakla (dosyalar, dizinler, yuvalar, sistem çağrıları) yapılan eylemler için yetenek yönetimine dayalı bir güvenlik mekanizması kullanmasıdır. vb.) uygulamaya uygun izinler verilmelidir (yalnızca beyan edilen işlevselliğe erişim sağlanır).

Biri hedefleri Oluşturulan ittifak, modern modüler uygulamaların çok sayıda bağımlılığa sahip olarak dağıtılması sorununa bir çözümdür. Bu tür uygulamalarda her bağımlılık potansiyel bir güvenlik açığı veya saldırı kaynağı olabilir. Bir bağımlılığın kontrolünü ele almak, onunla ilişkili tüm uygulamaların kontrolünü ele geçirmenize olanak tanır. Uygulamaya güven, otomatik olarak tüm bağımlılıklara güven anlamına gelir, ancak bağımlılıklar genellikle faaliyetleri kontrol edilemeyen üçüncü taraf ekipler tarafından geliştirilir ve sürdürülür. Bytecode Alliance üyeleri, doğası gereği güvenilir olmayan WebAssembly uygulamalarının güvenli bir şekilde yürütülmesi için bütünsel bir çözüm sağlamayı amaçlamaktadır.

Koruma için, her bir bağımlılık modülünün, yetkileri yalnızca bu modüle göre ayarlanan ayrı ayrı yalıtılmış bir WebAssembly modülüne ayrıldığı nanoişlemler kavramının kullanılması önerilmektedir (örneğin, dizeleri işlemek için bir kitaplık, bir ağ soketini veya dosyasını açabilme). Süreç ayırmanın aksine, WebAssembly işleyicileri hafiftir ve neredeyse hiç ek kaynak gerektirmez; işleyiciler arasındaki etkileşim, sıradan işlevleri çağırmaktan çok daha yavaş değildir. Ayırma yalnızca bireysel modüller düzeyinde değil aynı zamanda örneğin ortak bellek alanlarıyla çalışması gereken modül grupları düzeyinde de yapılabilir.

Talep edilen yetkiler hem bağımlılıklar düzeyinde belirlenebilir hem de ana modüller tarafından zincir boyunca bağımlılıklara devredilebilir (WASI'deki kaynaklar özel bir tür dosya tanımlayıcı - yetenek ile ilişkilendirilir). Örneğin, bir modüle belirli bir dizine ve sistem çağrılarına erişim yetkisi verilebilir ve bir saldırı sırasında modülün geliştirme altyapısı tehlikeye girerse veya bir güvenlik açığı tespit edilirse erişim yalnızca bu kaynaklarla sınırlı olacaktır. Modül oluşturucularının kaynak bildirimleri, bir metin işleme modülünün ağ bağlantısı açmak için izin istemesi gibi şüpheli etkinliklerin bir göstergesi olabilir. Başlangıçta ayarlanan izinler kontrol edilir ve değişirse yerel modül imzası güncellenene kadar bağımlılık yüklemesi reddedilir.

Bytecode Alliance'ın kanatları altında ortak geliştirme için tercüme WebAssembly ile ilgili birkaçı projeler, daha önce ittifakın kurucu şirketleri tarafından ayrı olarak geliştirildi:

  • zaman — WebAssembly uygulamalarını WASI uzantılarıyla normal bağımsız uygulamalar olarak çalıştırmak için çalışma zamanı. Hem özel bir komut satırı yardımcı programı kullanarak WebAssembly bayt kodunun başlatılmasını hem de hazır yürütülebilir dosyaların bağlanmasını destekler (wasmtime uygulamada bir kitaplık olarak yerleşiktir). Wasmtime, çeşitli uygulamalar için çalışma zamanını ölçeklendirmenize olanak tanıyan esnek bir modüler yapıya sahiptir; örneğin, sınırlı kaynaklara sahip cihazlar için basitleştirilmiş bir sürüm oluşturabilirsiniz;
  • Parlıyor — programları WebAssembly formatında yürütmek için derleyici ve çalışma zamanı. Ayırt edici özellik Lucet, doğrudan yürütmeye uygun makine kodunda JIT yerine tam teşekküllü öngörücü derlemenin (AOT, önceden) kullanılmasıdır. Proje Fastly tarafından geliştirildi ve minimum düzeyde kaynak tüketecek ve yeni örnekleri çok hızlı başlatacak şekilde optimize edildi (Fastly, Lucet'i her istek üzerine başlatılan işleyiciler için WebAssembly kullanan bir bulut uç bilgi işlem motorunda kullanıyor). Ortak projenin bir parçası olarak Lucet derleyicisinin Wasmtime'ı temel alacak şekilde dönüştürülmesi planlanıyor;
  • WAM (WebAssembly Micro Runtime), orijinal olarak Intel tarafından Nesnelerin İnterneti cihazlarında kullanılmak üzere geliştirilen WebAssembly'yi yürütmek için başka bir çalışma zamanıdır. WAMR, minimum kaynak tüketimi için optimize edilmiştir ve az miktarda RAM'e sahip cihazlarda kullanılabilir. Proje, WebAssembly bayt kodunu yürütmek için bir yorumlayıcı ve sanal makine, bir API (Libc'nin bir alt kümesi) ve dinamik uygulama yönetimi için araçlar içerir;
  • Vinç kaldırma — donanım mimarilerinden bağımsız bir ara temsili, belirli donanım platformları için optimize edilmiş yürütülebilir makine koduna çeviren bir kod oluşturucu. Cranelift, çok hızlı sonuç üretimi için fonksiyon derlemesinin paralelleştirilmesini destekler, bu da JIT derleyicileri oluşturmak için kullanılmasına olanak tanır (Wasmtime sanal makinesinde Cranelift tabanlı JIT kullanılır);
  • WASI ortak — işletim sistemiyle etkileşimi düzenlemek için WASI (WebAssembly Sistem Arayüzü) API'sinin ayrı bir uygulaması;
  • kargo-wasi — WebAssembly'yi tarayıcı dışında kullanmak için WASI arayüzünü kullanarak Rust kodunu WebAssembly bayt koduna derlemek için bir komut uygulayan Kargo paket yöneticisine yönelik bir modül;
  • Ne и wasmparser — metni (WAT, WAST) ve WebAssembly bayt kodunun ikili gösterimlerini ayrıştırmak için ayrıştırıcılar.

Özetlemek gerekirse, WebAssembly Asm.js'ye çok benzer, ancak farklı JavaScript'e bağlı olmayan ve çeşitli programlama dillerinden derlenen düşük seviyeli ara kodun tarayıcıda yürütülmesine izin veren ikili bir formattır. WebAssembly açık bellek yönetimini kullandığından çöp toplayıcıya ihtiyaç duymaz. WebAssembly için JIT'i kullanarak yerel koda yakın performans düzeyleri elde edebilirsiniz. WebAssembly'ın ana hedefleri arasında taşınabilirliği, öngörülebilir davranışı ve farklı platformlarda aynı kod yürütülmesini sağlamaktır.

Kaynak: opennet.ru

Yorum ekle