นักพัฒนา Mozilla นำเสนอโครงการ WASI (WebAssembly System Interface) ซึ่งทำงานเกี่ยวกับการกำหนดอินเทอร์เฟซซอฟต์แวร์ที่สามารถใช้เพื่อจัดระเบียบปฏิสัมพันธ์ของแอปพลิเคชันที่ส่งมอบในรูปแบบ WebAssembly กับระบบปฏิบัติการ
เป้าหมายของโครงการคือการจัดเตรียม API ที่ขยายการใช้งาน WebAssembly และช่วยให้คุณสร้างโปรแกรม ตามปกติ ในเทคโนโลยีนี้ที่ทำงานนอกเบราว์เซอร์พกพาไปยังแพลตฟอร์มใดก็ได้และแสดงให้เห็นถึงความปลอดภัยระดับสูง
WASI คืออะไร?
WASI อนุญาตให้สภาพแวดล้อม WebAssembly สามารถเข้าถึงฟังก์ชันที่จัดเตรียมโดยระบบปฏิบัติการเช่นไฟล์ระบบไฟล์ซ็อกเก็ตเครือข่ายตัวจับเวลาและตัวสร้างตัวเลขสุ่ม
เริ่มแรก WASI API ได้รับการพัฒนาเป็นแบบไม่ใช้เบราว์เซอร์และแบบสแตนด์อโลน จาก JavaScript / Web API แต่ ในเวลาเดียวกันให้ระดับการแยกระบบที่เพียงพอ main (แอปพลิเคชันทำงานในแซนด์บ็อกซ์) และอนุญาตให้คุณกำหนดสิทธิ์ที่มอบให้กับแอปพลิเคชันอย่างชัดเจนในรูปแบบของ CloudABI และ Capsicum
วาสิ ใช้รูปแบบการรักษาความปลอดภัยตามการจัดการสิทธิ์ซึ่งภายในโปรแกรมสามารถดำเนินการที่ได้รับอนุญาตโดยเจตนาเท่านั้น
คล้ายกับวิธีที่ WebAssembly จำกัด การเข้าถึงที่ระดับของฟังก์ชันการนำเข้า WASI ควบคุมการเข้าถึงความสามารถของระบบ
ไฟล์ไดเร็กทอรีซ็อกเก็ตและรีซอร์สอื่น ๆ เชื่อมโยงกับ file descriptor (ความจุ) ชนิดพิเศษและแอ็พพลิเคชันต้องมีสิทธิ์ในการดำเนินการกับแต่ละรีซอร์ส
สิทธิ์ได้รับการจัดการตามลำดับชั้นนั่นคือการเข้าถึงไดเร็กทอรีจะถูกเปิดโดยอัตโนมัติและเข้าถึงไฟล์ทั้งหมดที่มีอยู่
ที่กำหนดว่า WebAssembly เป็นเวอร์ชันภาษาแอสเซมบลีที่ไม่ขึ้นกับแพลตฟอร์มการใช้ JIT สามารถบรรลุระดับประสิทธิภาพใกล้เคียงกับโค้ดเนทีฟในขณะที่ยังคงความสามารถในการทำงานบนแพลตฟอร์มฮาร์ดแวร์และระบบปฏิบัติการต่างๆ
ปัจจุบันโครงการจัดเตรียมโมดูล wasi-core พร้อมกับการใช้งาน POSIX API พื้นฐาน (ไฟล์ซ็อกเก็ต ฯลฯ ) ซึ่งปัจจุบันยังขาดการรองรับการล็อกและ I / O แบบอะซิงโครนัส
ในอนาคต มีการวางแผนที่จะสร้างโมดูลที่มีการใช้งาน API เพื่อดำเนินการเข้ารหัสทำงานกับกราฟิก 3 มิติโต้ตอบกับเซ็นเซอร์การดำเนินการกับกระบวนการ (ยังไม่รองรับการเรียกส้อม) และประมวลผลข้อมูลมัลติมีเดีย
ต้นแบบส่วนประกอบ
Wasmtime เป็นรันไทม์ที่รับผิดชอบในการเรียกใช้งานแอปพลิเคชันบน WebAssembly ด้วยนามสกุล WASI เป็นแอปพลิเคชันแบบสแตนด์อโลนทั่วไป
Se สนับสนุนการเปิดใช้งาน WebAssembly bytecode ด้วยความช่วยเหลือของยูทิลิตี้บรรทัดคำสั่งพิเศษ และการออกแบบไฟล์ปฏิบัติการที่พร้อมใช้งาน (wasmtime ถูกสร้างขึ้นในแอปพลิเคชันเป็นไลบรารี)
เพื่อให้ได้ระดับประสิทธิภาพที่เหมาะสมจะใช้คอมไพเลอร์ JIT ตามตัวสร้างโค้ดระดับความสูง
Lucet เป็นอีกหนึ่งเวอร์ชันรันไทม์ของโครงการ Fastly (รหัสมีกำหนดเผยแพร่ในวันนี้หรือพรุ่งนี้)
WASI SDK- เครื่องมือสำหรับรวบรวมแอปพลิเคชัน C / C ++ ในรูปแบบเว็บแอสเซมบลีโดยใช้ Clang 8.0
เป้าหมายการประกอบที่รองรับ WASI สำหรับภาษา Rust ซึ่งช่วยให้คุณสามารถคอมไพล์โค้ด Rust ลงใน WebAssembly
Wasi-sysroot คือการนำไลบรารี libc มาตรฐานมาใช้สำหรับ WASIตามรหัส Musl ตลอดจนชั้นรันไทม์เพื่อแปลฟังก์ชันที่ห้องสมุดจัดเตรียมให้เป็นการเรียกระบบของระบบปฏิบัติการต่างๆเพื่อให้สามารถเรียกใช้แอปพลิเคชัน WASI บนระบบปฏิบัติการที่แตกต่างกันได้
โครงการนี้ยังพัฒนาไลบรารี polyfill JavaScript ด้วยการใช้งาน WASI เพื่อเรียกใช้แอปพลิเคชันภายในเบราว์เซอร์ซึ่งทำให้สามารถใช้รูปแบบการควบคุมการเข้าถึง "ความสามารถ" กับโค้ดที่เรียกใช้งานในเบราว์เซอร์ได้
ในแผนการกล่าวถึงเกิดจากการสร้างระบบโมดูลที่ใช้ WASI สำหรับการรวมเข้ากับแอปพลิเคชันปลั๊กอินที่แยกได้พร้อมฟังก์ชันเพิ่มเติมที่มีให้ในรูปแบบ WebAssembly
ภารกิจหลักอย่างหนึ่งของ WebAssembly คือการตรวจสอบให้แน่ใจว่าสามารถพกพา, คาดเดาพฤติกรรมและข้อมูลประจำตัวของการเรียกใช้โค้ดบนแพลตฟอร์มต่างๆ