ويب أسمبلي غادر المتصفح.. أين يُستخدم فعلياً في 2026؟

تم تقديم ويب أسمبلي في 2017 كطريقة لتشغيل الكود المُجمّع (compiled code) في المتصفحات بسرعة تقترب من السرعة الأصلية. في 2026، أصبحت هذه القصة الأصلية مجرد حاشية. القصة الأكثر إثارة هي ما حدث خارج المتصفح — حيث يعمل Wasm الآن في الدوال غير الخادمية (serverless functions)، والعقد الطرفية (edge nodes)، وأنظمة الإضافات، وامتدادات قواعد البيانات. قام نموذج المكونات (Component Model) و WASI 0.2 بإضفاء الطابع الرسمي على هذا في 2024، ولحقت به المنظومة البيئية بالكامل.
ملخص سريع: ما هو Wasm فعلياً؟
ويب أسمبلي هو تنسيق تعليمات ثنائي (binary instruction format) مصمم للعمل داخل آلة افتراضية معزولة (sandboxed VM). يمكن تجميعه من C, C++, Rust, Go, Swift, Kotlin وقائمة متزايدة من اللغات الأخرى. ثلاث خصائص تجعله مميزاً:
- التنفيذ الحتمي (Deterministic execution) — نفس الملف الثنائي يُنتج نفس المخرجات على كل منصة، في كل مرة.
- عزل الذاكرة (Memory isolation) — لا تملك وحدة Wasm وصولاً مباشراً إلى نظام التشغيل المضيف، أو نظام الملفات، أو الشبكة إلا إذا مُنح صراحةً عبر واجهة.
- قابلية النقل المعمارية — نفس ملف
.wasmالثنائي يعمل على x86 و ARM و RISC-V دون إعادة تجميع.
فيما يتعلق بالحجم، فإن وحدة Wasm النموذجية أصغر بـ 10–100 مرة من صورة حاوية Docker المكافئة. في بدء التشغيل، يتم تهيئة بيئات تشغيل Wasm في microseconds — مقارنة بمئات المللي ثانية أو الثواني للحاويات. هذه ليست مزايا هامشية؛ إنها تغير ما هو مجدٍ اقتصادياً على الحافة.
WASI 0.2 ونموذج المكونات — لماذا يهمان؟
WASI (واجهة نظام ويب أسمبلي) هي الـ API الموحَّد الذي يسمح لوحدات Wasm بالتفاعل مع العالم الخارجي — إدخال/إخراج الملفات، الشبكات، الساعات، العشوائية. كان WASI 0.1 بسيطاً بالتصميم. WASI 0.2، الذي صدر في يناير 2024، أضاف طلبات واستجابات HTTP، والمقابس (sockets)، وأساسيات التشفير (cryptography primitives)، والأهم من ذلك، نموذج المكونات.
يحدد نموذج المكونات كيفية تكوين وحدات Wasm مع بعضها البعض. يمكن لمكوِّن Rust استدعاء مكوِّن Python باستخدام واجهة محددة الأنواع (typed interface) مُعرَّفة في WIT (أنواع واجهات Wasm)، دون أي تكلفة إضافية لـ FFI وضمانات أنواع قوية تعبر الحدود. قبل ذلك، كانت وحدات Wasm وحدات معزولة — مفيدة ولكنها غير قابلة للتكوين. نموذج المكونات هو ما يجعل Wasm منصة حقيقية وليس مجرد هدف تجميع.
النتيجة العملية: يمكنك الآن بناء تطبيق Wasm عن طريق تكوين مكونات مطورة بشكل مستقل، مكتوبة بلغات مختلفة، مرتبطة على مستوى الواجهة بدلاً من المستوى الثنائي. لا ذاكرة مشتركة، ولا كوابيس توافق ABI.
بيئات التشغيل على جانب الخادم: Wasmtime, Wasmer, WasmEdge
ظهرت ثلاث بيئات تشغيل كخيارات إنتاجية جادة لـ Wasm على جانب الخادم:
- Wasmtime (من تحالف Bytecode Alliance، مكتوبة بلغة Rust): جاهز للإنتاج، متوافق تماماً مع WASI 0.2، يُستخدم في الإنتاج بواسطة Fastly و Shopify. التطبيق المرجعي لمواصفات Wasm.
- Wasmer: يدعم WASIX — WASI موسّع مع استدعاءات نظام شبيهة بـ POSIX تسمح بتشغيل المزيد من برامج نمط Unix دون تعديل. يستضيف صور Wasm المتوافقة مع Docker عبر سجل Wasmer.
- WasmEdge: مشروع رمل لـ CNCF مُحسَّن لأعباء عمل استدلال الذكاء الاصطناعي. يُشغّل GGML و llama.cpp المُجمّعين إلى Wasm، مما يجعله بيئة التشغيل المفضلة لنشر الذكاء الاصطناعي على الحافة حيث يكون Docker ثقيلاً جداً.
بعيداً عن بيئات التشغيل، Spin من Fermyon هو إطار عمل للخدمات الصغيرة مبني أصلاً على Wasm — يشبه AWS Lambda ولكن مع دلالات تنفيذ Wasm، ومكونات WASI 0.2، وبدون مشكلة البداية الباردة (cold start).
الحوسبة الطرفية (Edge Compute): حالة الاستخدام القاتلة
إذا كنت تريد فهم لماذا تبنى مزودو الحافة Wasm قبل أي شخص آخر، ففكر في الاقتصاديات: على الحافة، أنت تُشغّل آلاف الدوال للعملاء على بنية تحتية مشتركة، وتحتاج إلى العزل، والبدء السريع، وانخفاض استهلاك الذاكرة في وقت واحد. الحاويات تحل العزل ولكنها تفشل في وقت البدء والتكلفة الإضافية لكل دالة. الآلات الافتراضية أسوأ. Wasm يحل الثلاثة معاً.
- Cloudflare Workers يستخدم معزلات V8 (V8 isolates) مع دعم كامل لـ Wasm. تبدأ الدوال في أقل من 1ms. أكثر من 2 مليون مطور نشروا كود Workers.
- Fastly Compute يستخدم Wasmtime مع تجميع مسبق (AOT). وقت البدء البارد هو حرفياً 0ms — الوحدة مُجمَّعة بالفعل ككود أصلي عند وصول الطلب. دالة Rust مُجمَّعة إلى Wasm تعمل ضمن 5–10% من سرعة التنفيذ الأصلية.
- Vercel Edge Functions تدعم وحدات Wasm كمواطنين من الدرجة الأولى إلى جانب JavaScript.
نموذج العزل (sandbox) أساسي هنا: الكود المقدم من المستخدم غير الموثوق يُشغَّل على بنية تحتية طرفية مشتركة دون تكلفة الحاوية لأن ضمانات عزل Wasm مفروضة على مستوى الآلة الافتراضية وليس على مستوى نظام التشغيل. لا تحتاج إلى مساحة اسم نواة (kernel namespace) منفصلة لكل مستأجر.
أنظمة الإضافات: وسّع دون تنازلات
مشكلة الإضافات التقليدية: تريد السماح للمستخدمين بتوسيع منصتك، لكن تنفيذ كود مستخدم عشوائي داخل عمليتك هو كارثة أمنية. كانت الخيارات تاريخياً: عزل العملية الفرعية (subprocess isolation) (بطيء ومعقد)، لغة برمجة نصية مخصصة (محدودة)، أو مجرد قبول المخاطرة (سيء). Wasm يحل هذا.
- Extism هو نظام إضافات مفتوح المصدر مبني على Wasm. تُرسل ملف
.wasmكإضافة؛ يقوم المضيف بتحميله بأمان في بيئة معزولة مع فقط الواجهات التي تعرضها صراحةً. تستخدمه HashiCorp لإضافات Vault، وGrafana لإضافات مصادر البيانات، والعديد من محركات الألعاب لأنظمة التعديل (modding). - إضافات واجهة الدفع في Shopify (Checkout UI Extensions) تعمل كوحدات Wasm. كود المورد يُشغَّل داخل بنية Shopify التحتية دون أي قدرة على تسريب البيانات أو الوصول إلى أنظمة خارج الواجهة المحددة. هذا ممكن فقط لأن العزل في Wasm يجعله آمناً بشكل افتراضي.
- Zed (محرر الكود المبني على Rust) يستخدم Wasm للإضافات. لا حاجة لبيئة تشغيل Node.js، ولا سلاسل تبعية npm، ولا إدارة عملية إضافية. تعمل الإضافات معزولة في Wasm مع واجهة مضيف محددة جيداً.
النمط معمم: أي منصة تقبل كوداً مقدمًا من المستخدم يمكنها استبدال "مخاطرة تنفيذ كود عشوائي" بـ "تنفيذ Wasm في واجهة محددة" والحصول على الأمان، وقابلية النقل، ومرونة اللغة في نفس الوقت.
امتدادات قواعد البيانات
إضافة PostgreSQL التجريبية pg_wasm تسمح بالدوال المعرفة من قبل المستخدم (UDFs) مكتوبة بأي لغة تُجمّع إلى Wasm. تدعم SingleStore وظائف Wasm المعرفة من قبل المستخدم في الإنتاج. القيمة المقترحة مباشرة: اكتب دالة حساسة للأداء بلغة Rust، اجمعها إلى Wasm، انشرها دون إعادة تجميع ثنائي قاعدة البيانات ودون تثبيت مجموعة أدوات Rust على خادم قاعدة البيانات. كما أن عزل Wasm يعني أن الدالة المعطوبة لا يمكنها إفساد ذاكرة قاعدة البيانات — فهي تعمل في مساحة ذاكرة خطية خاصة بها.
لأعباء العمل التحليلية، يفتح هذا الباب أمام تجميعات وتحويلات مخصصة عالية الأداء كانت تتطلب سابقاً إضافات C أو كتابتها بلغة PL/pgSQL البطيئة.
استدلال الذكاء الاصطناعي في Wasm
WasmEdge مع llama.cpp المُجمّع إلى Wasm يمكنه تشغيل استدلال الـ LLM على أي مضيف WasmEdge. التكلفة الإضافية مقارنة بالتنفيذ الأصلي حوالي 15–25% — كبيرة، لكنها مقبولة لحالات استخدام كثيرة. المردود هو قابلية النقل: نفس الملف الثنائي Wasm يعمل على خادم سحابي x86، أو عقدة طرفية ARM، أو جهاز IoT RISC-V دون إعادة تجميع.
هذا مهم في سياقات IoT والذكاء الاصطناعي المضمن على الحافة حيث يكون تشغيل Docker غير عملي بسبب قيود التخزين والذاكرة. نموذج 7B مكمّم بـ 4 بتات يعمل عبر WasmEdge على جهاز طرفي هو نمط نشر حقيقي في 2026، وليس مجرد عرض توضيحي.
ما لا يزال Wasm لا يستطيع فعله بشكل جيد
قيود Wasm حقيقية وتستحق الذكر:
- تعدد الخيوط (Multi-threading) يتحسن — اقتراح الخيوط والذاكرة المشتركة موجودان في المواصفات — لكن كتابة Wasm متعدد الخيوط بشكل صحيح لا يزال أصعب من الخيوط الأصلية، ودعم بيئة التشغيل متفاوت.
- اللغات المُجمّعة للقمامة (Garbage-collected languages) (Go, Python, JavaScript) تُنتج ملفات Wasm ثنائية أكبر لأن بيئة تشغيل GC يجب أن تُجمّع داخلياً. ملف Go Wasm عادةً ما يكون بحجم 5–15MB. هذا يتقلص مع نضج تكامل GC، لكنه حقيقي اليوم.
- تصحيح الأخطاء في الإنتاج أصعب من الكود الأصلي. تساعد خرائط المصادر (source maps)، لكن تتبعات المكدس في Wasm لا تزال أقل راحة من التصحيح الأصلي.
- مجموعات أدوات Java و .NET لا تزال في طور النضج. جافا لديها مخرجات Wasm تجريبية، و .NET لديها Blazer لـ Wasm في المتصفح، لكن تحويل .NET من جانب الخادم إلى Wasm لحالات الاستخدام العامة ليس جاهزاً للإنتاج بعد.
أين يصل بنا هذا؟
أصل Wasm في المتصفح كان حادثًا تاريخيًا — مضيف مناسب وفّر العزل، وطبقة تفاعل مع JS، وبيئة موحدة. ما بناه المتصفح فعليًا هو وحدة تنفيذ عالمية، محمولة، ومعزولة تعمل أيضاً في الخوادم، والعقد الطرفية، وقواعد البيانات، ومضيفي الإضافات.
نموذج المكونات أخيرًا يعطي Wasm دلالات التركيب ليعمل كمنصة برمجية حقيقية — وحدات بواجهات محددة الأنواع، قابلة للتكوين دون ذاكرة مشتركة أو تعقيد FFI. WASI 0.2 أعطاه نموذج الوصول للنظام ليكون مفيداً في سياقات غير المتصفح. لحقت به بيئات التشغيل والأدوات.
السؤال الآن ليس ما إذا كان Wasm سيكون مهماً. إنه يعمل بالفعل في CDN الخاص بك، وربما في إضافات IDE الخاص بك، وبشكل متزايد في قاعدة بياناتك. السؤال هو أي حالة استخدام ستجعله لا مفر منه لبيئتك التقنية — وبالنسبة لمعظم الفرق، تلك اللحظة أقرب مما يتوقعون.