ما هي بيئة التشغيل (Runtime Environment)؟
بيئة التشغيل (runtime environment) هي البرمجيات التي يحتاجها البرنامج من حوله أثناء عمله: المحرك الذي ينفّذ كوده، والمكتبات القياسية التي يستدعيها، والخدمات التي تدير الذاكرة والأخطاء والوصول إلى نظام التشغيل. ومن أمثلتها JVM وNode.js وCPython.
آخر تحديث 24 سبتمبر 2026
شغّل console.log(typeof process) في Node.js وسيطبع object. الصق السطر نفسه في وحدة التحكم (console) في Chrome وسيطبع undefined. اللغة هي JavaScript نفسها في المكانين، لكن البرنامج يعمل داخل بيئتي تشغيل مختلفتين، وكل واحدة منهما تعطيه أدوات مختلفة.
console.log(typeof process); // "object" in Node.js, "undefined" in a browser
console.log(typeof document); // "undefined" in Node.js, "object" in a browser
ماذا توفر بيئة التشغيل
كودك يصف فقط ما يجب فعله. وعندما يعمل، يعتمد على طبقة من البرمجيات ثُبّتت قبل أن تكتب سطرًا واحدًا. تتكون هذه الطبقة عادةً من خمسة أجزاء:
- محرك تنفيذ. لا بد من شيء يشغّل الكود: مفسر، أو آلة افتراضية، أو مترجم تنفيذ فوري (JIT). CPython وآلة Java الافتراضية (JVM) وV8 كلها محركات تنفيذ.
- مكتبة قياسية. دوال جاهزة للنصوص والرياضيات والتواريخ والملفات والشبكات، مثل وحدة
jsonفي Python أو حزمةjava.utilفي Java. - إدارة الذاكرة. تحجز بيئة التشغيل الذاكرة لكائناتك، وفي Python وJava وJavaScript تحررها مجددًا بجامع المهملات (garbage collector) عندما لا يستخدمها شيء.
- معالجة الأخطاء. عندما يحدث خطأ، توقف بيئة التشغيل البرنامج بطريقة منضبطة وتُبلغ عن مكانه، في صورة traceback أو stack trace.
- الوصول إلى نظام التشغيل. قراءة الملفات، وفتح اتصالات الشبكة، وقراءة متغيرات البيئة ومعاملات سطر الأوامر، كلها تمر عبر بيئة التشغيل، التي تطلبها من نظام التشغيل نيابةً عن برنامجك.
يمكنك أن تسأل بيئة تشغيل Python عن نفسها:
تعتمد الإجابات على المكان الذي يعمل فيه الكود. على خادم Linux تُرجع platform.system() القيمة 'Linux'، وعلى Mac 'Darwin'، وعلى Windows 'Windows'. وحد التكرار (recursion limit)، وهو 1000 افتراضيًا في CPython، قاعدة تضعها بيئة التشغيل وليس لغة Python، والعشرات من الوحدات المحمّلة قبل سطرك الأول هي بيئة التشغيل وهي تجهّز نفسها.
Java: الفرق بين JDK وJRE وJVM
تجعل Java الطبقات مرئية لأن لكل منها اسمًا خاصًا:
| الاسم | الاختصار | ما يحتويه | من يحتاجه |
|---|---|---|---|
| JVM | Java Virtual Machine | المحرك الذي يشغّل البايت كود (ملفات .class) ويدير الذاكرة | جزء من الاثنين التاليين |
| JRE | Java Runtime Environment | JVM مع مكتبات الأصناف القياسية | من يشغّل برامج Java فقط |
| JDK | Java Development Kit | JRE مع أدوات المطورين: javac وjar وjavadoc وjdb | من يكتب برامج Java |
المسار كالتالي: الأمر javac Main.java (أداة من JDK، وهي المترجم) يحوّل الكود المصدري إلى Main.class، ثم يشغّل الأمر java Main آلة JVM، التي تحمّل الصنف وتشغّله بمكتبات بيئة التشغيل. وJVM هي السبب في أن ملف .class واحدًا يعمل على Windows وmacOS وLinux: لكل نظام تشغيل آلة JVM خاصة به، وكلها تفهم البايت كود نفسه.
منذ Java 11، لا تشحن Oracle إلا JDK، ولا يوجد تنزيل منفصل لـ JRE. بعض التوزيعات، مثل Eclipse Temurin، ما زالت تنشر حزمة JRE. إذا كنت تتعلم Java فثبّت JDK: فهو يحتوي كل ما في JRE. ودليل تثبيت Java يشرح الخطوات.
JavaScript: المتصفح وNode.js
صُممت JavaScript لتعمل داخل صفحات الويب، لذا كانت بيئة تشغيلها الأولى هي المتصفح. تعطي بيئة المتصفح كودك كائن document الخاص بالصفحة، وwindow، والمؤقتات، وfetch لطلبات الشبكة، وتمنع عمدًا الوصول المباشر إلى ملفاتك.
أما Node.js فتأخذ محرك V8 من Google خارج المتصفح وتضعه في بيئة تشغيل مختلفة: لا يوجد document، لكن توجد وحدات مثل fs للملفات، وhttp للخوادم، وكائن process لمتغيرات البيئة والمعاملات. وDeno وBun بيئتا تشغيل أحدث للغة نفسها، ولكل منهما أدواتها. جميعها تشغّل نواة JavaScript نفسها؛ والفرق فيما يحيط بها. صفحتا بيئة تشغيل Node.js وحلقة الأحداث تتعمقان أكثر.
Python: CPython وأخواته
عندما يقول الناس "ثبّت Python" فهم يقصدون تثبيت بيئة تشغيل: مفسر CPython، والمكتبة القياسية، وpip لإضافة الحزم. وتوجد بيئات تشغيل أخرى للغة نفسها. يضيف PyPy مترجم JIT لزيادة السرعة، وMicroPython صغير بما يكفي ليعمل على المتحكمات الدقيقة.
البيئة الافتراضية (python3 -m venv .venv) ليست بيئة تشغيل جديدة. إنها تشير إلى مفسر موجود وتعطي مشروعًا واحدًا مجموعته الخاصة من الحزم المثبتة، فيستطيع مشروعان استخدام إصدارين مختلفين من المكتبة نفسها. راجع البيئات الافتراضية.
وقت الترجمة ووقت التشغيل
تدل كلمة "runtime" أيضًا على لحظة زمنية: الفترة التي يعمل فيها البرنامج، في مقابل وقت الترجمة، حين يُحوَّل الكود المصدري. الخطأ الذي يرفضه المترجم خطأ وقت ترجمة؛ والخطأ الذي لا يظهر إلا أثناء عمل البرنامج، مثل القسمة على صفر، هو خطأ وقت التشغيل. وبيئة التشغيل هي البرمجيات الموجودة خلال تلك الفترة الثانية.
حتى لغة C، التي تُترجَم مباشرة إلى لغة الآلة، لها بيئة تشغيل صغيرة. يبدأ برنامج C في كود بدء التشغيل الذي توفّره سلسلة أدوات المترجم، وتأتي دوال مثل printf وmalloc من مكتبة C القياسية (glibc في معظم أنظمة Linux، وUniversal C Runtime في Windows). الفرق ببساطة أنه لا توجد آلة افتراضية ولا جامع مهملات.
مفاهيم خاطئة شائعة
- "بيئة التشغيل هي نظام التشغيل." نظام التشغيل يدير العتاد لكل البرامج. أما بيئة التشغيل فطبقة خاصة ببرنامج واحد فوقه. وJVM نفسها برنامج يشغّله Windows أو macOS أو Linux؛ ولا تحل محلها.
- "Node.js لغة أو إطار عمل." Node.js بيئة تشغيل لـ JavaScript. أما أطر العمل مثل Express فمكتبات تعمل داخلها.
- "تثبيت بيئة تطوير (IDE) يثبّت بيئة التشغيل." لا يتضمن VS Code لغة Python ولا Java. المحرر وبيئة التشغيل يُثبَّتان بشكل منفصل، مع أن بعض بيئات التطوير، مثل IntelliJ IDEA، تستطيع تنزيل JDK نيابةً عنك.
- "اللغة نفسها تعني السلوك نفسه في كل مكان." الميزات التي توفرها بيئة التشغيل، مثل الوصول إلى الملفات والحدود الافتراضية والوحدات المتاحة، قد تختلف. والكود الذي يعمل في Node.js قد يفشل في المتصفح لهذا السبب تحديدًا.
إلى أين بعد ذلك
محرك التنفيذ داخل معظم بيئات التشغيل هو مفسر، وتلك الصفحة تقارنه أيضًا بـالمترجم. وتحت كل بيئة تشغيل يوجد نظام التشغيل. ولتتدرّب في بيئة تشغيل لم تستخدمها بعد، ابدأ دورة Java أو دورة JavaScript.
الأسئلة الشائعة
ما هو مثال على بيئة التشغيل؟
هل Node.js بيئة تشغيل؟
ماذا تعني كلمة runtime بالضبط؟
هل أثبّت JRE أم JDK؟
javac وكل ما في JRE. أما JRE وحده فيشغّل برامج Java الموجودة فقط. ومنذ Java 11، لا توزّع Oracle إلا JDK، لذا فإن JDK هو الخيار المعتاد لإصدارات Java الحالية.إلامَ تشير اختصارات JDK وJRE وJVM؟
javac.