تقوم Mozilla وFastly وIntel وRed Hat بالترويج لـ WebAssembly كمنصة للاستخدام العالمي

موزيلا، فاستلي، إنتل وريد هات المتحدة جهودها في تطوير التقنيات التي تساعد في جعل WebAssembly منصة عالمية لتنفيذ التعليمات البرمجية بشكل آمن عبر أي بنية أساسية أو نظام تشغيل أو جهاز. تم تشكيل مجتمع للتطوير المشترك لوقت التشغيل والمترجمين الذين يسمحون باستخدام WebAssembly ليس فقط في متصفحات الويب تحالف Bytecode.

لإنشاء برامج محمولة يتم تسليمها بتنسيق WebAssembly ويمكن تنفيذها خارج المتصفح، نقترح استخدام واجهة برمجة التطبيقات (API). هل كنت (واجهة نظام WebAssembly)، والتي توفر واجهات برمجية للتفاعل المباشر مع نظام التشغيل (POSIX API للعمل مع الملفات والمقابس وما إلى ذلك). من السمات المميزة لنموذج تنفيذ التطبيقات باستخدام WASI أنها تعمل في بيئة معزولة للعزل عن النظام الرئيسي وتستخدم آلية أمان تعتمد على إدارة القدرة على الإجراءات مع كل من الموارد (الملفات، والأدلة، والمآخذ، واستدعاءات النظام ، وما إلى ذلك) يجب منح التطبيق الأذونات المناسبة (يتم توفير الوصول فقط إلى الوظيفة المعلنة).

واحد من الأهداف يعد التحالف الذي تم إنشاؤه حلاً لمشكلة توزيع التطبيقات المعيارية الحديثة مع عدد كبير من التبعيات. في مثل هذه التطبيقات، يمكن أن تكون كل تبعية مصدرًا محتملاً لنقاط الضعف أو الهجمات. يتيح لك التحكم في التبعية التحكم في جميع التطبيقات المرتبطة بها. الثقة في التطبيق تعني تلقائيًا الثقة في جميع التبعيات، ولكن غالبًا ما يتم تطوير التبعيات وصيانتها بواسطة فرق خارجية لا يمكن التحكم في أنشطتها. يعتزم أعضاء Bytecode Alliance تقديم حل شامل للتنفيذ الآمن لتطبيقات WebAssembly التي ليست جديرة بالثقة بطبيعتها.

من أجل الحماية، يُقترح استخدام مفهوم العمليات النانوية، حيث يتم فصل كل وحدة تبعية إلى وحدة WebAssembly معزولة بشكل منفصل، والتي يتم تعيين صلاحياتها فيما يتعلق بهذه الوحدة فقط (على سبيل المثال، لن تكون مكتبة لمعالجة السلاسل تكون قادرًا على فتح مأخذ توصيل الشبكة أو الملف). على عكس فصل العمليات، تتميز معالجات WebAssembly بأنها خفيفة الوزن ولا تتطلب أي موارد إضافية تقريبًا - فالتفاعل بين المعالجات ليس أبطأ بكثير من استدعاء الوظائف العادية. يمكن إجراء الفصل ليس فقط على مستوى الوحدات الفردية، ولكن أيضًا على مستوى مجموعات الوحدات التي، على سبيل المثال، تحتاج إلى العمل مع مناطق الذاكرة المشتركة

يمكن تحديد الصلاحيات المطلوبة على مستوى التبعيات نفسها، وتفويضها إلى التبعيات على طول السلسلة بواسطة الوحدات الأصلية (ترتبط الموارد في WASI بنوع خاص من واصف الملف - القدرة). على سبيل المثال، يمكن تفويض الوحدة النمطية بالقدرة على الوصول إلى دليل معين واستدعاءات النظام، وإذا تعرضت البنية التحتية لتطوير الوحدة للاختراق أو تم تحديد ثغرة أمنية، أثناء الهجوم، فسيقتصر الوصول على هذه الموارد فقط. يمكن أن تكون إعلانات الموارد من قبل منشئي الوحدات مؤشرًا على نشاط مشبوه، كما هو الحال عندما تطلب وحدة معالجة النصوص إذنًا لفتح اتصال شبكة. يتم التحقق من الأذونات التي تم تعيينها في البداية وإذا تغيرت، فسيتم رفض تحميل التبعية حتى يتم تحديث توقيع الوحدة المحلية.

من أجل التطوير المشترك تحت جناح Bytecode Alliance مترجم العديد منها يتعلق بـ WebAssembly مشاريع، والتي تم تطويرها مسبقًا بشكل منفصل من قبل الشركات المؤسسة للتحالف:

  • كان - وقت التشغيل لتشغيل تطبيقات WebAssembly بامتدادات WASI كتطبيقات عادية قائمة بذاتها. وهو يدعم كلاً من إطلاق رمز WebAssembly الثانوي باستخدام أداة مساعدة خاصة لسطر الأوامر وربط الملفات القابلة للتنفيذ الجاهزة (تم تضمين Wasmtime في التطبيق كمكتبة). يحتوي Wasmtime على بنية معيارية مرنة تسمح لك بتوسيع وقت التشغيل لمختلف التطبيقات، على سبيل المثال، يمكنك إنشاء نسخة مختصرة للأجهزة ذات الموارد المحدودة؛
  • لوسيت - برنامج التحويل البرمجي ووقت التشغيل لتنفيذ البرامج بتنسيق WebAssembly. متميز خاصية Lucet هو استخدام التجميع الاستباقي الكامل (AOT، المسبق) بدلاً من JIT في كود الآلة المناسب للتنفيذ المباشر. تم تطوير المشروع بواسطة Fastly وتم تحسينه لاستهلاك الحد الأدنى من الموارد وإطلاق مثيلات جديدة بسرعة كبيرة (يستخدم Fastly Lucet في محرك حوسبة سحابي يستخدم WebAssembly للمعالجات التي يتم تشغيلها عند كل طلب). كجزء من المشروع المشترك، من المقرر تحويل مترجم Lucet لاستخدام Wasmtime كأساس؛
  • WAMR (WebAssembly Micro Runtime) هو وقت تشغيل آخر لتنفيذ WebAssembly، والذي تم تطويره في الأصل بواسطة Intel للاستخدام في أجهزة إنترنت الأشياء. تم تحسين WAMR للحد الأدنى من استهلاك الموارد ويمكن استخدامه على الأجهزة التي تحتوي على كمية صغيرة من ذاكرة الوصول العشوائي. يتضمن المشروع مترجمًا وجهازًا افتراضيًا لتنفيذ كود WebAssembly الثانوي، وواجهة برمجة التطبيقات (مجموعة فرعية من Libc) وأدوات لإدارة التطبيقات الديناميكية؛
  • رافعة - منشئ الأكواد الذي يترجم التمثيل الوسيط المستقل عن بنيات الأجهزة إلى كود جهاز قابل للتنفيذ ومُحسّن لمنصات أجهزة محددة. يدعم Cranelift توازي تجميع الوظائف لتوليد نتائج سريعة جدًا، مما يسمح باستخدامه لإنشاء مترجمات JIT (يتم استخدام JIT المستند إلى Cranelift في الجهاز الظاهري Wasmtime)؛
  • واسي شائع - تطبيق منفصل لـ WASI (WebAssembly System Interface) API لتنظيم التفاعل مع نظام التشغيل؛
  • البضائع WASI - وحدة نمطية لمدير حزم Cargo الذي ينفذ أمرًا لتجميع كود Rust في كود WebAssembly الثانوي باستخدام واجهة WASI لاستخدام WebAssembly خارج المتصفح؛
  • وانظر ما и com.wasmparser - موزعون لتحليل النص (WAT، WAST) والتمثيل الثنائي لرمز WebAssembly الثانوي.

للتلخيص، WebAssembly يشبه إلى حد كبير Asm.js، ولكن مختلف من حيث أنه تنسيق ثنائي غير مرتبط بجافا سكريبت ويسمح بتنفيذ تعليمات برمجية متوسطة منخفضة المستوى تم تجميعها من لغات برمجة مختلفة في المتصفح. لا يتطلب WebAssembly أداة تجميع البيانات المهملة لأنه يستخدم إدارة الذاكرة الصريحة. باستخدام JIT for WebAssembly، يمكنك تحقيق مستويات أداء قريبة من التعليمات البرمجية الأصلية. من بين الأهداف الرئيسية لـ WebAssembly هو ضمان قابلية النقل والسلوك المتوقع وتنفيذ التعليمات البرمجية المتطابقة على منصات مختلفة.

المصدر: opennet.ru

إضافة تعليق