Mozilla, Fastly, Intel และ Red Hat ส่งเสริม WebAssembly ให้เป็นแพลตฟอร์มสำหรับการใช้งานสากล

Mozilla, Fastly, Intel และ Red Hat สห ความพยายามในการพัฒนาเทคโนโลยีที่ช่วยทำให้ WebAssembly เป็นแพลตฟอร์มสากลสำหรับการเรียกใช้โค้ดอย่างปลอดภัยบนโครงสร้างพื้นฐาน ระบบปฏิบัติการ หรืออุปกรณ์ใดๆ ชุมชนได้รับการจัดตั้งขึ้นเพื่อการพัฒนาร่วมกันของรันไทม์และคอมไพเลอร์ที่อนุญาตให้ใช้ WebAssembly ไม่เพียงแต่ในเว็บเบราว์เซอร์ พันธมิตรไบต์โค้ด.

หากต้องการสร้างโปรแกรมแบบพกพาที่จัดส่งในรูปแบบ WebAssembly ที่สามารถดำเนินการนอกเบราว์เซอร์ได้ เราขอแนะนำให้ใช้ API วาสิ (WebAssembly System Interface) ซึ่งจัดเตรียมอินเทอร์เฟซซอฟต์แวร์สำหรับการโต้ตอบโดยตรงกับระบบปฏิบัติการ (POSIX API สำหรับการทำงานกับไฟล์ ซ็อกเก็ต ฯลฯ) คุณสมบัติที่โดดเด่นของรูปแบบการดำเนินการของแอปพลิเคชันที่ใช้ WASI คือทำงานในสภาพแวดล้อมแซนด์บ็อกซ์เพื่อแยกออกจากระบบหลัก และใช้กลไกความปลอดภัยตามการจัดการความสามารถสำหรับการดำเนินการกับทรัพยากรแต่ละรายการ (ไฟล์ ไดเร็กทอรี ซ็อกเก็ต การเรียกระบบ ฯลฯ) แอปพลิเคชันจะต้องได้รับการอนุญาตที่เหมาะสม (ให้สิทธิ์การเข้าถึงฟังก์ชันที่ประกาศไว้เท่านั้น)

หนึ่งใน เป้าหมาย พันธมิตรที่สร้างขึ้นเป็นวิธีการแก้ปัญหาในการกระจายแอปพลิเคชันโมดูลาร์สมัยใหม่ที่มีการพึ่งพาจำนวนมาก ในแอปพลิเคชันดังกล่าว ทุกการพึ่งพาอาจเป็นสาเหตุของช่องโหว่หรือการโจมตีได้ การควบคุมการขึ้นต่อกันทำให้คุณสามารถควบคุมแอปพลิเคชันทั้งหมดที่เกี่ยวข้องได้ ความน่าเชื่อถือในแอปพลิเคชันแสดงถึงความไว้วางใจในการขึ้นต่อกันทั้งหมดโดยอัตโนมัติ แต่การขึ้นต่อกันมักจะได้รับการพัฒนาและดูแลรักษาโดยทีมงานบุคคลที่สามซึ่งกิจกรรมไม่สามารถควบคุมได้ สมาชิก Bytecode Alliance ตั้งใจที่จะมอบโซลูชันแบบองค์รวมสำหรับการดำเนินการที่ปลอดภัยของแอปพลิเคชัน WebAssembly ที่ไม่น่าเชื่อถือโดยเนื้อแท้

เพื่อการป้องกัน ขอเสนอให้ใช้แนวคิดของกระบวนการนาโน ซึ่งแต่ละโมดูลการพึ่งพาจะถูกแยกออกเป็นโมดูล WebAssembly ที่แยกออกจากกัน ซึ่งพลังของการตั้งค่านั้นสัมพันธ์กับโมดูลนี้เท่านั้น (ตัวอย่างเช่น ไลบรารีสำหรับสตริงการประมวลผลจะไม่ สามารถเปิดซ็อกเก็ตเครือข่ายหรือไฟล์ได้) ต่างจากการแยกกระบวนการ ตัวจัดการ WebAssembly มีน้ำหนักเบาและแทบไม่ต้องใช้ทรัพยากรเพิ่มเติม การโต้ตอบระหว่างตัวจัดการไม่ได้ช้ากว่าการเรียกใช้ฟังก์ชันทั่วไปมากนัก การแยกสามารถทำได้ไม่เพียงแต่ในระดับของแต่ละโมดูลเท่านั้น แต่ยังรวมถึงระดับกลุ่มของโมดูลที่ต้องทำงานกับพื้นที่หน่วยความจำทั่วไปด้วย

อำนาจที่ร้องขอสามารถกำหนดได้ทั้งในระดับของการขึ้นต่อกันเอง และมอบหมายให้การขึ้นต่อกันในสายโซ่โดยโมดูลพาเรนต์ (ทรัพยากรใน WASI เชื่อมโยงกับตัวอธิบายไฟล์ชนิดพิเศษ - ความสามารถ) ตัวอย่างเช่น โมดูลสามารถมอบหมายความสามารถในการเข้าถึงไดเร็กทอรีเฉพาะและการเรียกใช้ระบบ และหากโครงสร้างพื้นฐานการพัฒนาของโมดูลถูกโจมตีหรือมีการระบุช่องโหว่ ในระหว่างการโจมตี การเข้าถึงจะถูกจำกัดเฉพาะทรัพยากรเหล่านี้เท่านั้น การประกาศทรัพยากรโดยผู้สร้างโมดูลอาจเป็นตัวบ่งชี้ถึงกิจกรรมที่น่าสงสัย เช่น เมื่อโมดูลประมวลผลข้อความขออนุญาตเปิดการเชื่อมต่อเครือข่าย สิทธิ์ที่ตั้งค่าไว้ในตอนแรกจะถูกตรวจสอบ และหากมีการเปลี่ยนแปลง การโหลดการขึ้นต่อกันจะถูกปฏิเสธจนกว่าลายเซ็นโมดูลในเครื่องจะได้รับการอัปเดต

เพื่อการพัฒนาร่วมกันภายใต้ปีกของ Bytecode Alliance แปลแล้ว หลายอย่างที่เกี่ยวข้องกับ WebAssembly โครงการซึ่งก่อนหน้านี้ได้รับการพัฒนาแยกกันโดยบริษัทผู้ก่อตั้งพันธมิตร:

  • เวลา — รันไทม์สำหรับการรันแอปพลิเคชัน 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 มาก แต่ ต่าง โดยที่เป็นรูปแบบไบนารี่ที่ไม่เชื่อมโยงกับ JavaScript และอนุญาตให้เรียกใช้โค้ดระดับกลางระดับต่ำที่คอมไพล์จากภาษาโปรแกรมต่างๆ ในเบราว์เซอร์ได้ WebAssembly ไม่ต้องการตัวรวบรวมขยะเนื่องจากใช้การจัดการหน่วยความจำที่ชัดเจน ด้วยการใช้ JIT สำหรับ WebAssembly คุณสามารถบรรลุระดับประสิทธิภาพที่ใกล้เคียงกับโค้ดเนทีฟ เป้าหมายหลักของ WebAssembly คือการรับประกันความสามารถในการพกพา พฤติกรรมที่คาดการณ์ได้ และการเรียกใช้โค้ดที่เหมือนกันบนแพลตฟอร์มที่แตกต่างกัน

ที่มา: opennet.ru

เพิ่มความคิดเห็น