Mozilla، Fastly، Intel و Red Hat WebAssembly را به عنوان یک پلتفرم برای استفاده جهانی تبلیغ می کنند

Mozilla، Fastly، Intel و Red Hat متحد تلاش هایش در توسعه فناوری هایی است که به WebAssembly کمک می کند تا به یک پلت فرم جهانی برای اجرای کد امن در هر زیرساخت، سیستم عامل یا دستگاه تبدیل شود. انجمنی برای توسعه مشترک زمان اجرا و کامپایلرها تشکیل شده است که امکان استفاده از WebAssembly را نه تنها در مرورگرهای وب فراهم می کند. اتحاد بایت کد.

برای ایجاد برنامه های قابل حمل ارائه شده در قالب WebAssembly که می توانند خارج از مرورگر اجرا شوند، پیشنهاد می کنیم از API استفاده کنید. آیا من بودم (WebAssembly System Interface) که رابط های نرم افزاری را برای تعامل مستقیم با سیستم عامل (POSIX API برای کار با فایل ها، سوکت ها و غیره) فراهم می کند. یکی از ویژگی های بارز مدل اجرای برنامه های کاربردی با استفاده از WASI این است که آنها در یک محیط sandbox برای جداسازی از سیستم اصلی اجرا می شوند و از مکانیزم امنیتی مبتنی بر مدیریت قابلیت برای اقدامات با هر یک از منابع (فایل ها، دایرکتوری ها، سوکت ها، تماس های سیستمی) استفاده می کنند. و غیره) به برنامه باید مجوزهای مناسب داده شود (فقط دسترسی به عملکرد اعلام شده ارائه شده است).

یکی از اهداف اتحاد ایجاد شده راه حلی برای مشکل توزیع برنامه های مدولار مدرن با تعداد زیادی وابستگی است. در چنین برنامه هایی، هر وابستگی می تواند منبع بالقوه ای از آسیب پذیری ها یا حملات باشد. کنترل یک وابستگی به شما این امکان را می دهد که کنترل همه برنامه های مرتبط با آن را به دست آورید. اعتماد به برنامه به طور خودکار به معنای اعتماد به همه وابستگی‌ها است، اما وابستگی‌ها اغلب توسط تیم‌های شخص ثالثی که فعالیت‌هایشان قابل کنترل نیست، ایجاد و نگهداری می‌شوند. اعضای Bytecode Alliance قصد دارند راه حلی جامع برای اجرای امن برنامه های WebAssembly ارائه دهند که ذاتا قابل اعتماد نیستند.

برای حفاظت، پیشنهاد می شود از مفهوم نانو فرآیندها استفاده شود، که در آن هر ماژول وابستگی به یک ماژول WebAssembly جدا شده جدا می شود، که قدرت های آن فقط در رابطه با این ماژول تنظیم شده است (به عنوان مثال، یک کتابخانه برای پردازش رشته ها قادر به باز کردن سوکت یا فایل شبکه). بر خلاف جداسازی فرآیند، کنترل‌کننده‌های WebAssembly سبک وزن هستند و تقریباً به منابع اضافی نیاز ندارند - تعامل بین کنترل‌کننده‌ها بسیار کندتر از فراخوانی توابع معمولی نیست. جداسازی نه تنها در سطح تک تک ماژول‌ها، بلکه در سطح گروه‌هایی از ماژول‌ها نیز انجام می‌شود که، برای مثال، نیاز به کار با مناطق حافظه مشترک دارند.

قدرت های درخواستی را می توان هم در سطح خود وابستگی ها تعیین کرد و هم می توان به وابستگی ها در امتداد زنجیره توسط ماژول های والد تفویض کرد (منابع در WASI با نوع خاصی از توصیف کننده فایل مرتبط هستند - قابلیت). به عنوان مثال، به یک ماژول می‌توان توانایی دسترسی به دایرکتوری و تماس‌های سیستمی خاص را واگذار کرد و اگر زیرساخت توسعه ماژول به خطر بیفتد یا آسیب‌پذیری شناسایی شود، در طول حمله، دسترسی فقط به این منابع محدود می‌شود. اعلام منابع توسط سازندگان ماژول می تواند نشانگر فعالیت مشکوک باشد، مانند زمانی که یک ماژول پردازش متن درخواست مجوز برای باز کردن اتصال شبکه می کند. مجوزهای اولیه تنظیم شده بررسی می شوند و در صورت تغییر، بارگذاری وابستگی رد می شود تا زمانی که امضای ماژول محلی به روز شود.

برای توسعه مشترک تحت بال اتحاد Bytecode ترجمه شده چندین مربوط به WebAssembly پروژه ها، که قبلا به طور جداگانه توسط شرکت های موسس اتحاد توسعه داده شده بود:

  • اوقات فراغت - زمان اجرا برای اجرای برنامه های WebAssembly با پسوندهای WASI به عنوان برنامه های معمولی مستقل. هم از راه‌اندازی بایت کد WebAssembly با استفاده از ابزار خط فرمان ویژه و هم پیوند دادن فایل‌های اجرایی آماده (wasmtime به عنوان یک کتابخانه در برنامه تعبیه شده است) پشتیبانی می‌کند. Wasmtime یک ساختار ماژولار انعطاف پذیر دارد که به شما امکان می دهد زمان اجرا را برای برنامه های مختلف مقیاس کنید، به عنوان مثال، می توانید یک نسخه حذف شده برای دستگاه هایی با منابع محدود ایجاد کنید.
  • لوست - کامپایلر و زمان اجرا برای اجرای برنامه ها در قالب WebAssembly. متمایز ویژگی Lucet استفاده از کامپایل پیش بینی کامل (AOT، پیش از زمان) به جای JIT در کد ماشین مناسب برای اجرای مستقیم است. این پروژه توسط Fastly توسعه داده شده است و برای مصرف حداقل منابع و راه اندازی نمونه های جدید بسیار سریع بهینه شده است (Fastly از Lucet در یک موتور محاسباتی لبه ابری استفاده می کند که از WebAssembly برای کنترل کننده هایی که در هر درخواست راه اندازی می شوند استفاده می کند). به عنوان بخشی از پروژه مشترک، کامپایلر Lucet برای استفاده از Wasmtime به عنوان پایه برنامه ریزی شده است.
  • WAMR (WebAssembly Micro Runtime) زمان اجرا دیگری برای اجرای WebAssembly است که در ابتدا توسط اینتل برای استفاده در دستگاه های اینترنت اشیا توسعه داده شد. WAMR برای حداقل مصرف منابع بهینه شده است و می تواند در دستگاه هایی با مقدار کمی رم استفاده شود. این پروژه شامل یک مفسر و ماشین مجازی برای اجرای بایت کد WebAssembly، یک API (زیرمجموعه ای از Libc) و ابزارهایی برای مدیریت پویا برنامه است.
  • جرثقیل زدن - یک مولد کد که یک نمایش میانی مستقل از معماری های سخت افزاری را به کد ماشین اجرایی بهینه شده برای پلتفرم های سخت افزاری خاص ترجمه می کند. Cranelift از موازی سازی کامپایل تابع برای تولید نتایج بسیار سریع پشتیبانی می کند، که به آن اجازه می دهد برای ایجاد کامپایلرهای JIT استفاده شود (JIT مبتنی بر Cranelift در ماشین مجازی Wasmtime استفاده می شود).
  • WASI مشترک - اجرای جداگانه WASI (WebAssembly System Interface) API برای سازماندهی تعامل با سیستم عامل.
  • cargo-wasi - یک ماژول برای مدیر بسته Cargo که دستوری را برای کامپایل کد Rust در بایت کد WebAssembly با استفاده از رابط WASI برای استفاده از WebAssembly در خارج از مرورگر پیاده سازی می کند.
  • وات и wasmparser - تجزیه کننده برای تجزیه متن (WAT، WAST) و نمایش دودویی بایت کد WebAssembly.

به طور خلاصه، WebAssembly بسیار شبیه به Asm.js است، اما متفاوت به این صورت که یک فرمت باینری است که به جاوا اسکریپت گره خورده نیست و اجازه می دهد تا کدهای متوسط ​​سطح پایین کامپایل شده از زبان های برنامه نویسی مختلف در مرورگر اجرا شوند. WebAssembly به جمع آوری زباله نیاز ندارد زیرا از مدیریت حافظه صریح استفاده می کند. با استفاده از JIT برای WebAssembly، می توانید به سطوح عملکردی نزدیک به کد بومی دست یابید. از جمله اهداف اصلی WebAssembly اطمینان از قابل حمل بودن، رفتار قابل پیش بینی و اجرای کد یکسان در پلتفرم های مختلف است.

منبع: opennet.ru

اضافه کردن نظر