نضج WebAssembly: WASI 0.2 ونموذج المكونات وWASM من جانب الخادم في الإنتاج

بدأ WebAssembly كوسيلة لتشغيل لغة C++ في المتصفحات بسرعة أكبر من JavaScript. بحلول عام 2026، أصبح هذا أقل ما يثير الاهتمام فيه. حوّلت WASI 0.2 ونموذج المكونات ونظام بيئي متزايد لتشغيلات وقت التشغيل من جانب الخادم WASM إلى هدف حوسبة عام ذي مصداقية — محايد للغة، ومعزول بالرمل افتراضيًا، ويبدأ في تحدي النشر القائم على الحاويات في الحوسبة الطرفية.
ما الذي غيّرته WASI 0.2 فعليًا
واجهة نظام WebAssembly (WASI) هي المواصفات التي تسمح لوحدات WASM بالتفاعل مع العالم الخارجي — أنظمة الملفات، مقابس الشبكة، الساعات، توليد الأرقام العشوائية. قبل WASI، كان بإمكان WASM في المتصفح إجراء الحوسبة لكنه لم يكن يستطيع الوصول لنظام التشغيل. WASI هي ما يجعل WebAssembly من جانب الخادم ممكنًا.
أدخلت WASI 0.2، التي أقرّها Bytecode Alliance في فبراير 2024، تغييرين أساسيين. أولًا، قامت بتوحيد نموذج المكونات — الذي يحدد كيفية عرض وحدات WASM لواجهات مكتوبة باستخدام WIT (أنواع واجهة WebAssembly) وكيفية تركيبها مع بعضها البعض. ثانيًا، قدمت wasi:http، وهي واجهة HTTP قياسية تسمح لبرامج WASM بمعالجة طلبات الويب دون وسائط خاصة بالمنصة (shims).
التأثير العملي: يمكن الآن لمكون WASM مكتوب بلغة Rust أو Go أو Python أو C أن يعرض واجهة مكتوبة يمكن لمكون آخر — ربما مكتوب بلغة مختلفة تمامًا — أن يستدعيها. قابلية التشغيل البيني بين اللغات دون تعقيدات واجهة الدوال الأجنبية (FFI).
نموذج المكونات: وحدات يمكن تركيبها
قبل نموذج المكونات، كان النوع الوحيد في WebAssembly الذي يعبر حدود الوحدة النمطية هو البايتات الخام (ذاكرة خطية). استدعاء وحدة WASM مكتوبة بلغة Rust من وحدة WASM مكتوبة بلغة Python كان يتطلب تسلسلاً مخصصًا على كلا الجانبين. يقدم نموذج المكونات نظام أنواع أغنى عند حدود الوحدة النمطية — السلاسل النصية، القوائم، السجلات، المتغيرات — يتم تعريفها في ملفات واجهة WIT.
هذا يجعل WASM متعدد اللغات عمليًا. قد يستخدم خط أنابيب معالجة البيانات مكون Rust للتحليل (للأداء)، ومكون Python لاستدلال التعلم الآلي (لتوافق النظام البيئي)، ومكون JavaScript لتحويل JSON (للإعتماد على المكتبات الحالية)، جميعها مُركَّبة في تطبيق WASM واحد مع تسليمات مكتوبة بينها. يُعتبر wasm-tools compose CLI وcargo component toolchain هما الأداتين الرئيسيتين للمطورين حاليًا. النظام البيئي مبكر ولكنه يعمل — اتفقت تشغيلات وقت تشغيل WASM الرئيسية على المواصفات.
تشغيلات وقت التشغيل من جانب الخادم: Wasmtime، WasmEdge، Wasmer
Wasmtime (Bytecode Alliance) هو تشغيل وقت التشغيل المرجعي للامتثال لـ WASI. مكتوب بلغة Rust، يستخدم Cranelift للترجمة في وقت التشغيل (JIT)، ويُعطي الأولوية للامتثال للمواصفات والعزل الأمني. تعمل منصة Compute الخاصة بـ Fastly على Wasmtime وتعالج حركة المرور الإنتاجية على نطاق واسع.
WasmEdge (مشروع CNCF) مُحسَّن للنشرات السحابية الأصلية والطرفية. يتكامل مع Kubernetes عبر containerd-wasm-shims، ويدعم استدلال LLM القائم على GGML داخل WASM، ويُستخدم في بروكسي Envoy لقابلية التوسع عبر الإضافات القائمة على WASM — وهي حالة استخدام إنتاجية رئيسية.
Wasmer يُعطي أولوية لتجربة المطورين مع أوسع دعم لـ SDKs اللغوية: روابط Python، JavaScript، Go، PHP، Ruby. تُشغّل Wasmer أيضًا Wasmer.io، وهو سجل حزم WASM مشابه لـ npm لكن لتوزيع وحدات WASM مستقلة عن المنصة.
أين يربح WASM
ظهرت ثلاثة أنماط نشر حيث يتفوق WASM حقًا على البدائل:
الحوسبة الطرفية: تشغّل Cloudflare Workers كلاً من JavaScript وWASM في أكثر من 300 موقع طرفي عالميًا. تشغّل Fastly Compute WASM مباشرةً. ميزة البداية الباردة حاسمة — تبدأ وحدة WASM في ميكروثوانٍ مقابل مئات الميلي ثانية للحاوية. بالنسبة لوظائف الطرف الحساسة للكُمون، هذا هو الفارق بين تأخير ملحوظ ولا شيء.
أنظمة الإضافات: تبنت البرامج التي تحتاج قابلية التوسع دون المخاطر الأمنية لإضافات الكود الأصلي WASM كمضيف معزول بالرمل للإضافات. يستخدم Envoy proxy WASM لنظام الامتدادات الخاص به. يُشغّل Zellij (مُتعدِّد المحطة الطرفية) الإضافات كـ WASM. نموذج العزل هو الخاصية الأساسية: لا تستطيع إضافة WASM الوصول لذاكرة المضيف أو استدعاءات النظام دون منح صريح للقدرات، مما يجعل تنفيذ كود الإضافة غير الموثوق به آمنًا.
استدلال التعلم الآلي من جانب المتصفح: يُشغّل WebLLM نماذج LLM مُكمَّاة — مثل Llama 3 وPhi-3 وMistral — داخل المتصفح عبر WASM مجتمعة مع WebGPU للوصول لوحدة معالجة الرسومات. يسمح هذا المزيج بتشغيل نماذج بحجم 3B–7B بارامتر من جانب العميل دون خادم، مما يمكّن من إمكانية العمل دون اتصال بالقضاء على إرسال البيانات لواجهات برمجة التطبيقات الخارجية.
أين لا يزال WASM يخسر
لا يفوز WASM بحمل عمل الخادم للأغراض العامة. لا يزال خادم HTTP مكتوب بلغة Go أو Node.js يعمل داخل حاوية يبدأ بسرعة كافية لمع حالات الاستخدام، ولديه أدوات ناضجة، ولا يتطلب تعقيد أهداف ترجمة WASM وتعريفات واجهة WIT. النظام البيئي لا يزال مبكرًا — لم يتم نقل معظم المكتبات إلى WASM، وتصحيح الأخطاء في WASM المُترجَم أصعب بكثير من تصحيح الكود الأصلي.
قصة الشبكة أيضًا غير مكتملة. تحتوي WASI 0.2 على wasi:http لكنها لا تتضمن بعد wasi:sockets مستقرًا للوصول التعسفي لـ TCP/UDP. التطبيقات التي تحتاج وصولًا خامًا للمقابس — قواعد البيانات، البروتوكولات المخصصة، شبكات الند للند — لا تخدمها WASM من جانب الخادم بشكل جيد بعد.
دعم اللغات في 2026
نضج النظام البيئي اللغوي بشكل كبير في العامين الماضيين:
- Rust: دعم من الدرجة الأولى.
wasm-packلأهداف المتصفح،cargo componentلنموذج المكونات. دعم كامل لـ WASI 0.2. - Go: TinyGo لـ WASI (لديها Go القياسي دعم تجريبي لـ WASM مع بعض قيود المكتبة القياسية). تنتج TinyGo ملفات ثنائية صغيرة لكنها لا تدعم كل ميزات مكتبة Go القياسية.
- Python: يترجم CPython إلى WASM عبر Emscripten (يستخدم Pyodide للاستخدام في المتصفح). يستهدف مشروع py-wasi WASM الخادم بشكل أكثر مباشرة.
- JavaScript/TypeScript: يُستخدم SpiderMonkey المُترجم إلى WASM من قِبَل Cloudflare لتشغيل عزلات JS بشكل محمول. يحوّل ComponentizeJS JavaScript إلى مكونات WASM.
- C/C++: يبقى Emscripten المسار الناضج. توفر wasi-sdk سلسلة أدوات تركز على WASI بأقل قدر ممكن.
- Swift: أضيف هدف WASM تجريبيًا في Swift 5.9، ويتحسن بسرعة خلال عام 2025.
مقارنة الحاويات
حجة Bytecode Alliance لصالح WASM مقابل الحاويات ثلاثية الأبعاد: وحدات أصغر (وحدة WASM عادةً ما تكون بالكيلوبايتات، وليست مئات الميغابايتات من طبقات الحاوية)، بدايات باردة أسرع (ميكروثوانٍ مقابل مئات الميلي ثانية)، ونموذج عزل أقوى (الأمان القائم على القدرات في WASM مقابل نواقل هروب الحاوية التي تظهر بانتظام في سجلات الثغرات الأمنية CVEs).
للخدمات طويلة الأمد حيث لا تهم البداية الباردة ولديك أدوات حاويات موجودة، الحاويات هي الإجابة الصحيحة. للوظيفة كخدمة (FaaS)، والحوسبة الطرفية، وقابلية توسيع الإضافات، فإن نموذج WASM مقنع حقًا — وتثبت عمليات النشر الإنتاجية المتزايدة ذلك.
المسار إلى WASI 0.3
توجد WASI 0.3 قيد التطوير النشط، مع الإضافات الأساسية كونها wasi:sockets لـ TCP/UDP، ودعم الإدخال/الإخراج غير المتزامن (async I/O)، وواجهات موارد النظام الإضافية. تتطور أيضًا مواصفات نموذج المكونات — لا يزال نظام الأنواع وأدوات التركيب بها حواف خشنة يعمل Bytecode Alliance بنشاط على تنعيمها.
المسار واضح: لم يعد WASM مجرد فضول في المتصفح أو مشروع بحثي. إنه يعمل في بيئات الإنتاج لدى Cloudflare وFastly وعشرات الشركات التي تستخدمه لأنظمة الإضافات وأحمال العمل الطرفية. انتهى احتكار وقت تشغيل JavaScript في المتصفح عام 2017 عندما شُحن WASM. احتكار الحاويات في حوسبة الخادم هو الجدار الذي يتسلقه WASM الآن — وWASI 0.2 هي الفأس.