Mozilla, Fastly, Intel และ Red Hat
หากต้องการสร้างโปรแกรมแบบพกพาที่จัดส่งในรูปแบบ WebAssembly ที่สามารถดำเนินการนอกเบราว์เซอร์ได้ เราขอแนะนำให้ใช้ API
หนึ่งใน
เพื่อการป้องกัน ขอเสนอให้ใช้แนวคิดของกระบวนการนาโน ซึ่งแต่ละโมดูลการพึ่งพาจะถูกแยกออกเป็นโมดูล WebAssembly ที่แยกออกจากกัน ซึ่งพลังของการตั้งค่านั้นสัมพันธ์กับโมดูลนี้เท่านั้น (ตัวอย่างเช่น ไลบรารีสำหรับสตริงการประมวลผลจะไม่ สามารถเปิดซ็อกเก็ตเครือข่ายหรือไฟล์ได้) ต่างจากการแยกกระบวนการ ตัวจัดการ WebAssembly มีน้ำหนักเบาและแทบไม่ต้องใช้ทรัพยากรเพิ่มเติม การโต้ตอบระหว่างตัวจัดการไม่ได้ช้ากว่าการเรียกใช้ฟังก์ชันทั่วไปมากนัก การแยกสามารถทำได้ไม่เพียงแต่ในระดับของแต่ละโมดูลเท่านั้น แต่ยังรวมถึงระดับกลุ่มของโมดูลที่ต้องทำงานกับพื้นที่หน่วยความจำทั่วไปด้วย
อำนาจที่ร้องขอสามารถกำหนดได้ทั้งในระดับของการขึ้นต่อกันเอง และมอบหมายให้การขึ้นต่อกันในสายโซ่โดยโมดูลพาเรนต์ (ทรัพยากรใน WASI เชื่อมโยงกับตัวอธิบายไฟล์ชนิดพิเศษ - ความสามารถ) ตัวอย่างเช่น โมดูลสามารถมอบหมายความสามารถในการเข้าถึงไดเร็กทอรีเฉพาะและการเรียกใช้ระบบ และหากโครงสร้างพื้นฐานการพัฒนาของโมดูลถูกโจมตีหรือมีการระบุช่องโหว่ ในระหว่างการโจมตี การเข้าถึงจะถูกจำกัดเฉพาะทรัพยากรเหล่านี้เท่านั้น การประกาศทรัพยากรโดยผู้สร้างโมดูลอาจเป็นตัวบ่งชี้ถึงกิจกรรมที่น่าสงสัย เช่น เมื่อโมดูลประมวลผลข้อความขออนุญาตเปิดการเชื่อมต่อเครือข่าย สิทธิ์ที่ตั้งค่าไว้ในตอนแรกจะถูกตรวจสอบ และหากมีการเปลี่ยนแปลง การโหลดการขึ้นต่อกันจะถูกปฏิเสธจนกว่าลายเซ็นโมดูลในเครื่องจะได้รับการอัปเดต
เพื่อการพัฒนาร่วมกันภายใต้ปีกของ Bytecode Alliance
-
เวลา — รันไทม์สำหรับการรันแอปพลิเคชัน WebAssembly ที่มีส่วนขยาย WASI เป็นแอปพลิเคชันสแตนด์อโลนทั่วไป รองรับทั้งการเปิดใช้ WebAssembly bytecode โดยใช้ยูทิลิตีบรรทัดคำสั่งพิเศษ และการลิงก์ไฟล์ปฏิบัติการสำเร็จรูป (wasmtime ถูกสร้างขึ้นในแอปพลิเคชันเป็นไลบรารี) Wasmtime มีโครงสร้างโมดูลาร์ที่ยืดหยุ่นซึ่งช่วยให้คุณสามารถปรับขนาดรันไทม์สำหรับแอปพลิเคชันต่างๆ ได้ ตัวอย่างเช่น คุณสามารถสร้างเวอร์ชันแบบแยกส่วนสำหรับอุปกรณ์ที่มีทรัพยากรจำกัด -
ลูเซท — คอมไพเลอร์และรันไทม์สำหรับการรันโปรแกรมในรูปแบบ WebAssembly โดดเด่นลักษณะเฉพาะ Lucet คือการใช้การคอมไพล์ล่วงหน้าแบบเต็มรูปแบบ (AOT ล่วงหน้า) แทน JIT ในโค้ดเครื่องที่เหมาะสำหรับการดำเนินการโดยตรง โปรเจ็กต์นี้ได้รับการพัฒนาโดย Fastly และได้รับการปรับให้เหมาะสมเพื่อใช้ทรัพยากรน้อยที่สุดและเปิดตัวอินสแตนซ์ใหม่อย่างรวดเร็ว (ใช้ Lucet อย่างรวดเร็วในกลไกการประมวลผลบนคลาวด์เอดจ์ที่ใช้ WebAssembly สำหรับตัวจัดการที่เปิดใช้งานในแต่ละคำขอ) ในฐานะที่เป็นส่วนหนึ่งของโครงการร่วม คอมไพเลอร์ Lucet ได้รับการวางแผนที่จะแปลงเพื่อใช้ Wasmtime เป็นพื้นฐาน -
WAM (WebAssembly Micro Runtime) เป็นอีกหนึ่งรันไทม์สำหรับการรัน WebAssembly ซึ่งเดิมพัฒนาโดย Intel เพื่อใช้ในอุปกรณ์ Internet of Things WAMR ได้รับการปรับให้เหมาะสมเพื่อการใช้ทรัพยากรน้อยที่สุดและสามารถใช้กับอุปกรณ์ที่มี RAM จำนวนเล็กน้อย โปรเจ็กต์นี้ประกอบด้วยล่ามและเครื่องเสมือนสำหรับการเรียกใช้งาน WebAssembly bytecode, API (ชุดย่อยของ Libc) และเครื่องมือสำหรับการจัดการแอปพลิเคชันแบบไดนามิก -
เครน — ตัวสร้างโค้ดที่แปลการแสดงระดับกลางโดยไม่ขึ้นกับสถาปัตยกรรมฮาร์ดแวร์เป็นโค้ดเครื่องที่ปฏิบัติการได้ซึ่งปรับให้เหมาะสมสำหรับแพลตฟอร์มฮาร์ดแวร์เฉพาะ Cranelift รองรับการรวบรวมฟังก์ชันแบบขนานเพื่อสร้างผลลัพธ์ที่รวดเร็วมาก ซึ่งช่วยให้สามารถใช้เพื่อสร้างคอมไพเลอร์ JIT ได้ (JIT ที่ใช้ Cranelift ใช้ในเครื่องเสมือน Wasmtime) -
วาสิทั่วไป - การใช้งานแยกต่างหากของ WASI (WebAssembly System Interface) API สำหรับการจัดระเบียบการโต้ตอบกับระบบปฏิบัติการ -
สินค้า-wasi - โมดูลสำหรับตัวจัดการแพ็คเกจ Cargo ที่ใช้คำสั่งสำหรับรวบรวมรหัส Rust ลงในรหัสไบต์ WebAssembly โดยใช้อินเทอร์เฟซ WASI เพื่อใช้ WebAssembly ภายนอกเบราว์เซอร์ -
วัด иตัวคั่น - ตัวแยกวิเคราะห์สำหรับการแยกวิเคราะห์ข้อความ (WAT, WAST) และการเป็นตัวแทนไบนารีของรหัสไบต์ WebAssembly
โดยสรุป WebAssembly ก็เหมือนกับ Asm.js มาก แต่
ที่มา: opennet.ru