> ## Content Index
> Fetch the complete content index at: https://arabroot.io/llms.txt
> Use this file to discover other available public pages before exploring further.

# مشاريع مؤسسة Eclipse: من Jakarta EE إلى Mosquitto
- URL: https://arabroot.io/articles/مشاريع-مؤسسة-eclipse-من-jakarta-ee-الى-mosquitto/
- Published: 2026-10-08T09:45:00.000Z
- Updated: 2026-10-09T13:02:17.000Z
- Description: ما الذي تستضيفه مؤسسة Eclipse غير المحرر الذي تعرفه، ولماذا تغيرت حزم Java من javax إلى jakarta.
- Author: فريق عرب رووت
- Tags: الأدلة التقنية, قصص وتحقيقات, السيادة الرقمية والامتثال, أساسيات, سياسات المصادر المفتوحة, الاستضافة الذاتية

إذا سألت مطوراً عن Eclipse، فالإجابة في الغالب سوف تكون: محرر Java الثقيل الذي استخدمناه في الجامعة. ولكن لو فتحت ملف Dockerfile لتطبيق Java اليوم فقد تجد السطر `FROM eclipse-temurin`، ولو قرأت كود تطبيق Spring Boot 3 أو أحدث، وقد [انتقل إلى واجهات Jakarta EE](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes?ref=arabroot.io)، فسوف تجد `import jakarta.persistence.Entity`، ولو نظرت في جهاز إنترنت الأشياء IoT الذي يرسل قراءات حساس إلى السيرفر فقد يكون الوسيط Broker الذي يستقبلها اسمه Eclipse Mosquitto، وكل هذه مشاريع تستضيفها مؤسسة Eclipse، ولا علاقة لأغلبها بالمحرر.

وقد شرحنا في قسم [المؤسسات المحايدة](https://arabroot.io/articles/%D8%AD%D9%88%D9%83%D9%85%D8%A9-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-%D9%88%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D9%87%D9%85%D8%A9-%D9%81%D9%8A%D9%87%D8%A7/#foundations) في مقال الحوكمة لماذا توجد مؤسسات مثل Eclipse، والمراحل التي يمر بها المشروع فيها من الاقتراح إلى النضج، ولن نعيد ذلك هنا، وكتبنا مقالاً مشابهاً عن [مشاريع مؤسسة Apache](https://arabroot.io/articles/%D8%AE%D8%B1%D9%8A%D8%B7%D8%A9-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D9%85%D8%A4%D8%B3%D8%B3%D8%A9-apache-%D9%88%D9%85%D8%A7%D8%B0%D8%A7-%D9%8A%D8%AD%D9%84-%D9%83%D9%84-%D9%85%D9%86%D9%87%D8%A7/). أما هذا المقال فيعرض مشاريع Eclipse التي سوف تقابلها في العمل، ومن أين جاء كل منها، ثم ننهيه بتجربة عملية تشغل فيها Mosquitto وJava من Temurin في Containers.

وسوف نناقش في هذا المقال ما يلي:

- قصة مؤسسة Eclipse باختصار: من مشروع أطلقته IBM في 2001 إلى مؤسسة أوروبية مقرها بروكسل.
- Jakarta EE: كيف انتقلت Java EE من Oracle، ولماذا تغيرت أسماء الحزم Packages من `javax` إلى `jakarta`، ومعها سيرفرات GlassFish وJetty وإطار Vert.x.
- Adoptium وبناء Temurin المجاني من Java.
- أدوات المطورين: Eclipse IDE وTheia وChe وسوق الإضافات Open VSX.
- إنترنت الأشياء: Mosquitto وPaho وKura، ثم برمجيات السيارات Software Defined Vehicle باختصار.
- تجربة عملية: وسيط Mosquitto بكلمة مرور، وناشر من سطر الأوامر، وبرنامج Java على Temurin يرسل رسالة بمكتبة Paho.

## من مشروع أطلقته IBM إلى مؤسسة في بروكسل

تقول [صفحة التعريف بالمؤسسة](https://www.eclipse.org/org/?ref=arabroot.io) إن مشروع Eclipse أنشأته IBM في نوفمبر 2001 بدعم مجموعة Consortium من شركات البرمجيات، وإن مؤسسة Eclipse Foundation أنشئت في يناير 2004 كمؤسسة مستقلة غير ربحية، والهدف أن يكون للمشروع بيت محايد لا تملكه شركة واحدة، حتى تطمئن الشركات المنافسة لـ IBM إلى أن تساهم فيه. وبعد ذلك توسعت المؤسسة خارج المحرر، فاستقبلت Jetty في 2009 ومواصفات Java EE في 2017، وأصبحت اليوم كما تقول الصفحة نفسها تستضيف Adoptium وJakarta EE وبرمجيات السيارات وEclipse IDE وأكثر من 450 مشروعاً، ويدعمها أكثر من 300 عضو.

والمحطة التي تميز Eclipse عن المؤسسات الأمريكية الأخرى هي انتقالها إلى أوروبا، ففي 12 مايو 2020 [أعلنت المؤسسة](https://eclipse-foundation.blog/2020/05/12/moving-to-europe/?ref=arabroot.io) أنها سوف تتحول إلى جمعية دولية غير ربحية مقرها بروكسل في بلجيكا، والسبب كما كتبت أن أغلب نموها كان يحدث في أوروبا أصلاً، فقد كان 170 من أعضائها وأكثر من 900 من أصحاب صلاحية الكتابة Committers فيها مقيمين في أوروبا. ثم في 14 يناير 2021 [أعلنت](https://eclipse-foundation.blog/2021/01/14/welcome-to-the-eclipse-foundation-aisbl/?ref=arabroot.io) أنها أكملت الإجراءات وأسست Eclipse Foundation AISBL رسمياً، وتقول [صفحتها عن أوروبا](https://www.eclipse.org/europe/?ref=arabroot.io) إنها تعمل اليوم تحت القانون الأوروبي. وهذا يهمك إذا كنت في جهة تهتم بالسيادة الرقمية Digital Sovereignty، لأن المؤسسة التي تملك العلامات التجارية والكود تخضع لقانون أوروبي وليس أمريكياً.

والصورة التالية تبين هذه المحطات:

![خط زمني بست محطات: 2001 مشروع Eclipse تطلقه IBM مع مجموعة من الشركات، و2004 مؤسسة Eclipse Foundation مستقلة غير ربحية في يناير، و2017 Oracle تنقل Java EE ويصبح اسمها Jakarta EE، و2020 Jakarta EE 9 تغير أسماء الحزم إلى jakarta، و2021 المؤسسة تنتقل إلى بروكسل في بلجيكا كجمعية AISBL، و2026 أكثر من 450 مشروعاً وأكثر من 300 عضو](https://arabroot.io/content/images/2026/10/eclipse-projects-01-history.webp)

محطات مؤسسة Eclipse من 2001 إلى اليوم

## ما الذي تستضيفه Eclipse غير المحرر؟

المؤسسة تعرض كل مشاريعها في [دليل المشاريع](https://projects.eclipse.org/?ref=arabroot.io)، والصورة التالية تجمع المشاريع التي يتناولها هذا المقال في خمس مجموعات:

![خمس بطاقات: Enterprise Java فيها Jakarta EE وGlassFish وJetty وVert.x، وJava runtime فيها Adoptium وTemurin، وDeveloper tools فيها Eclipse IDE وTheia وChe وOpen VSX، وIoT and MQTT فيها Mosquitto وPaho وKura، وAutomotive فيها SDV وOpen Vehicle API](https://arabroot.io/content/images/2026/10/eclipse-projects-02-map.webp)

مشاريع Eclipse في هذا المقال مقسمة حسب المجال

ولكل مشروع في دليل المؤسسة صفحة فيها تبويب Governance يعرض مراجعاته الرسمية بالتاريخ: مراجعة الإنشاء Creation Review، ومراجعات الإصدارات Release Review، ومراجعة التخرج Graduation Review، ومنه أخذنا أغلب التواريخ في الأقسام التالية، وهو أسرع طريقة تعرف بها هل المشروع ما زال في مرحلة الاحتضان Incubation أم أصبح ناضجاً Mature، بحسب المراحل المكتوبة في [عملية التطوير في Eclipse](https://www.eclipse.org/projects/dev%5Fprocess/?ref=arabroot.io).

## Jakarta EE: ماذا حدث لـ Java EE؟

مواصفات Java EE هي مجموعة الواجهات البرمجية API التي تكتب بها تطبيقات Java للمؤسسات، مثل Servlet لاستقبال طلبات HTTP، وJPA لقواعد البيانات، وJAX-RS لواجهات REST، وكانت تملكها Sun ثم Oracle. وفي 12 سبتمبر 2017 [أعلنت Oracle](https://eclipse-foundation.blog/2017/09/12/java-ee-moves-to-the-eclipse-foundation/?ref=arabroot.io) مع IBM وRed Hat نقل Java EE إلى مؤسسة Eclipse، وفي 28 سبتمبر أنشأت المؤسسة [مشروع EE4J](https://eclipse-foundation.blog/2017/09/28/introducing-ee4j/?ref=arabroot.io) ليستقبل الكود، ثم في 26 فبراير 2018 [أعلنت الاسم الجديد](https://eclipse-foundation.blog/2018/02/26/and-the-name-is/?ref=arabroot.io) Jakarta EE بعد تصويت شارك فيه قرابة 7000 شخص وصوت أكثر من 64% منهم لهذا الاسم.

وقد يتساءل البعض: إذا انتقل الكود كاملاً، فلماذا تغيرت أسماء الحزم؟ والإجابة في [إعلان مايو 2019](https://eclipse-foundation.blog/2019/05/03/jakarta-ee-java-trademarks/?ref=arabroot.io)، حيث كتبت المؤسسة أنها لم تستطع الاتفاق مع Oracle على شروط تسمح لمجتمع Eclipse بتعديل الحزم تحت اسم `javax`، وأن هذه الحزم يمكن أن تبقى في مواصفات Jakarta EE ولكن كما هي فقط دون أي تعديل. والسبب أن كلمة Java علامة تجارية Trademark تملكها Oracle، وبالتالي كان أمام المجتمع خياران: أن تبقى المواصفات مجمدة للأبد، أو أن تنتقل إلى اسم جديد، فاختار الثاني. والصورة التالية تبين ما حدث بعد ذلك:

![خط زمني: 2017 انتقال Java EE إلى Eclipse، و2019 Jakarta EE 8 بنفس حزم javax، و2020 Jakarta EE 9 كل الحزم jakarta، و2022 Jakarta EE 10 ميزات جديدة، و2025 Jakarta EE 11 الإصدار الحالي، وتحته لوحتا كود: على اليمين Java EE 8 وJakarta EE 8 وTomcat 9 بأسطر import javax.servlet وjavax.persistence وjavax.ws.rs، وعلى اليسار Jakarta EE 9 و10 و11 وTomcat 10 وما بعده بنفس الأسطر ولكن بالحزمة jakarta، وتحتهما ملاحظة أن الكلاسات نفسها ولكن اسم الحزمة تغير فيجب تعديل الكود وإعادة بنائه](https://arabroot.io/content/images/2026/10/eclipse-projects-03-namespace.webp)

تغيير الحزم من javax إلى jakarta وإصدارات Jakarta EE

في الرسم أعلاه لاحظ التالي، والتواريخ كلها من [صفحة إصدارات Jakarta EE](https://jakarta.ee/release/?ref=arabroot.io):

- Jakarta EE 8 صدر في 10 سبتمبر 2019 بنفس الحزم `javax`، أي أنه نفس Java EE 8 تحت اسم جديد، فلم يحتج أحد أن يغير كوده.
- Jakarta EE 9 صدر في 8 ديسمبر 2020، و[إعلانه](https://eclipse-foundation.blog/2020/12/08/jakarta-ee-9-delivers-the-big-bang/?ref=arabroot.io) يقول بوضوح إن الحزم أصبحت `jakarta.*` بدل `javax.*`، ولم يضف ميزات جديدة تقريباً، فكان هدفه الوحيد هو هذا التغيير.
- Jakarta EE 10 صدر في 22 سبتمبر 2022، وJakarta EE 11 في 26 يونيو 2025، أما Jakarta EE 12 فما زال تحت التطوير بحسب [صفحة مواصفاته](https://jakarta.ee/specifications/platform/12/?ref=arabroot.io).
- التأثير العملي يظهر في السيرفرات، فـ [دليل الترحيل إلى Tomcat 10](https://tomcat.apache.org/migration-10.html?ref=arabroot.io) يقول إن هناك تغييراً كبيراً يكسر التوافق بين Tomcat 9 وTomcat 10 لأن الحزم تغيرت من `javax` إلى `jakarta`، وإنه يجب إعادة ترجمة تطبيقات الويب Recompile على الواجهات الجديدة، لذلك إذا نقلت تطبيقاً قديماً إلى Tomcat 10 أو 11 دون تعديل فلن يعمل.

والخطأ الشائع هنا أن يغير الفريق أسطر `import` في كوده فقط، ثم يفاجأ بأن مكتبة قديمة في الاعتماديات ما زالت تستخدم `javax`، فيفشل التطبيق عند التشغيل وليس عند البناء، لذلك افحص شجرة الاعتماديات Dependency Tree كاملة قبل الترحيل، وقد شرحنا كيف تقرؤها في [قسم Maven](https://arabroot.io/articles/%D8%A7%D8%AF%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D9%86%D8%A7%D8%A1-build-tools-%D9%85%D9%86-make-%D8%A7%D9%84%D9%89-maven-%D9%88-gradle-%D9%88-dotnet/#maven) في مقال أدوات البناء.

### السيرفرات وأطر العمل: GlassFish وJetty وVert.x

- [**Eclipse GlassFish**](https://glassfish.org/?ref=arabroot.io)**:** سيرفر تطبيقات Application Server يطبق مواصفات Jakarta EE كاملة، وقد جاء مع Java EE من Oracle وتغير اسمه إلى Eclipse GlassFish في إعلان اسم Jakarta EE نفسه. وتقول صفحته إن الإصدار 8.0 يطبق Jakarta EE 11 بالكامل، وآخر إصداراته 8.0.4 في أغسطس 2026، والسلسلة 7 ما زالت تصدر لمن يحتاج Jakarta EE 10.
- [**Eclipse Jetty**](https://jetty.org/?ref=arabroot.io)**:** سيرفر HTTP وServlet Container خفيفة تدخل غالباً داخل التطبيق نفسه Embedded بدل أن تثبت وحدها. وتقول صفحته إن سيرفر HTTP الذي أصبح Jetty طوره Greg Wilkins في 1995، وإن المشروع نقل مكوناته الأساسية إلى مؤسسة Eclipse في 2009، والسلسلة الحالية هي 12 بحسب [صفحة التنزيل](https://jetty.org/download.html?ref=arabroot.io).
- [**Eclipse Vert.x**](https://vertx.io/?ref=arabroot.io)**:** مجموعة أدوات Toolkit لبناء تطبيقات تفاعلية Reactive على JVM، أي تطبيقات لا تحجز Thread لكل طلب وإنما تعالج آلاف الاتصالات بعدد قليل من الخيوط، وقد شرحنا هذا الأسلوب في مقال [الخيوط والأقفال وasync](https://arabroot.io/articles/%D8%A7%D9%84%D8%AE%D9%8A%D9%88%D8%B7-threads-%D9%88%D8%A7%D9%84%D8%A3%D9%82%D9%81%D8%A7%D9%84-%D9%88-async-%D9%84%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%86/). وأقدم مراجعة له في [سجل حوكمته](https://projects.eclipse.org/projects/rt.vertx/governance?ref=arabroot.io) هي مراجعة الإصدار 2.1.0 في يونيو 2014، وسلسلته الحالية هي 5.

## Adoptium وTemurin: Java مجانية وموثوقة

عندما تنزل Java فأنت تنزل بناءً Build من كود OpenJDK، وهناك أكثر من جهة تبني هذا الكود وتنشره، والمشكلة التي واجهها المطورون أن الشروط والتراخيص تغيرت أكثر من مرة، فظهر في 2017 مشروع AdoptOpenJDK ليبني Java مجانية من كود OpenJDK للجميع. وتقول [صفحة Adoptium](https://adoptium.net/about/?ref=arabroot.io) إن مشروع Eclipse Adoptium هو امتداد لمهمة AdoptOpenJDK الأصلية، وفي 2 أغسطس 2021 [أعلن](https://adoptium.net/news/2021/08/adoptium-celebrates-first-release/?ref=arabroot.io) أول إصدار باسم Eclipse Temurin شمل Java 8 و11 و16، وتخرج مشروع Temurin في ديسمبر 2021 بحسب [سجل حوكمته](https://projects.eclipse.org/projects/adoptium.temurin/governance?ref=arabroot.io).

واليوم تقول [الواجهة البرمجية لـ Adoptium](https://api.adoptium.net/v3/info/available%5Freleases?ref=arabroot.io) إن الإصدارات طويلة الدعم LTS المتاحة هي 8 و11 و17 و21 و25، وإن أحدثها 25، وتنشر Docker Image رسمية باسم [eclipse-temurin](https://hub.docker.com/%5F/eclipse-temurin?ref=arabroot.io) سوف نستخدمها في التجربة. وإذا كنت تريد أن تفهم الفرق بين مواصفات Java والتطبيقات التي تبنيها، فقد شرحنا ذلك في مقال [مواصفات لغات البرمجة وتطبيقاتها](https://arabroot.io/articles/%D9%85%D9%88%D8%A7%D8%B5%D9%81%D8%A7%D8%AA-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%88%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA%D9%87%D8%A7-%D9%88%D8%AD%D9%88%D9%83%D9%85%D8%AA%D9%87%D8%A7/).

## أدوات المطورين: المحرر وما بعده

- [**Eclipse IDE**](https://eclipseide.org/?ref=arabroot.io)**:** بيئة التطوير المتكاملة IDE التي بدأت بها القصة في 2001، وما زالت تصدر بانتظام كل ثلاثة أشهر تقريباً، فـ [قائمة الإصدارات](https://www.eclipse.org/downloads/packages/release?ref=arabroot.io) فيها 2025-09 و2025-12 و2026-03 و2026-06 و2026-09، والصفحة الرئيسية تقول إن الإصدار التالي في 2026-12.
- [**Eclipse Theia**](https://theia-ide.org/?ref=arabroot.io)**:** إطار لبناء بيئات تطوير تعمل في المتصفح أو على سطح المكتب، وتصفه [أسئلته الشائعة](https://theia-ide.org/docs/faq/?ref=arabroot.io) بأنه بديل مفتوح لـ VS Code يدعم إضافات VS Code عبر Open VSX. وقد قدم [اقتراحه](https://projects.eclipse.org/proposals/eclipse-theia?ref=arabroot.io) في أبريل 2018 بقيادة Sven Efftinge وMarc Dumais ومن الجهات المهتمة Ericsson وRed Hat وTypeFox، وتخرج في أبريل 2020.
- [**Eclipse Che**](https://projects.eclipse.org/projects/ecd.che?ref=arabroot.io)**:** نظام ينشئ بيئات تطوير جاهزة في Containers داخل عنقود Kubernetes، فيفتح المطور مشروعه في المتصفح وكل الأدوات جاهزة دون تثبيت شيء على جهازه، ويعرض [سجل حوكمته](https://projects.eclipse.org/projects/ecd.che/governance?ref=arabroot.io) إنشاءه في نوفمبر 2014.
- [**Open VSX**](https://open-vsx.org/?ref=arabroot.io)**:** سوق إضافات Extensions Registry محايد بديل عن Visual Studio Marketplace، وتقول [صفحة المشروع](https://projects.eclipse.org/projects/ecd.openvsx?ref=arabroot.io) إنه يستخدم مع Theia ومحررات أخرى، والسبب في وجوده أن المحررات المفتوحة المبنية على كود VS Code تحتاج مصدراً محايداً للإضافات لا تتحكم فيه شركة واحدة. وقد قدمت [اقتراحه](https://projects.eclipse.org/proposals/eclipse-open-vsx-registry?ref=arabroot.io) شركة TypeFox في نوفمبر 2019، وتخرج في يونيو 2026.

## إنترنت الأشياء IoT وبروتوكول MQTT

بروتوكول MQTT بروتوكول رسائل خفيف يعمل بنمط النشر والاشتراك Publish/Subscribe، فالجهاز ينشر رسالته على موضوع Topic مثل `site/riyadh/temp`، والوسيط Broker يوصلها لكل من اشترك في هذا الموضوع، دون أن يعرف الناشر من المشتركون. وتقول [صفحة Paho](https://eclipse.dev/paho/?ref=arabroot.io) إن MQTT أنشأته IBM وشركة Arcom في حدود 1998، ولهذا تجد عدة مشاريع له في Eclipse:

- [**Eclipse Mosquitto**](https://mosquitto.org/?ref=arabroot.io)**:** وسيط MQTT خفيف يطبق كما تقول صفحته إصدارات البروتوكول 5.0 و3.1.1 و3.1، ويعمل على جهاز صغير مثل Raspberry Pi وعلى السيرفر. ومطوره وقائده Roger Light كما في [صفحة فريقه](https://projects.eclipse.org/projects/iot.mosquitto/who?ref=arabroot.io)، و[سجل حوكمته](https://projects.eclipse.org/projects/iot.mosquitto/governance?ref=arabroot.io) يبدأ في أغسطس 2014، وآخر إصداراته 2.1.2 في 9 فبراير 2026 بحسب [مدونته](https://mosquitto.org/blog/?ref=arabroot.io).
- [**Eclipse Paho**](https://eclipse.dev/paho/?ref=arabroot.io)**:** مكتبات العميل Client Libraries لـ MQTT بعدة لغات مثل Java وPython وC، أي الطرف الذي يتصل بالوسيط وينشر أو يشترك، وأنشئ في Eclipse في يناير 2012 بحسب [سجل حوكمته](https://projects.eclipse.org/projects/iot.paho/governance?ref=arabroot.io)، وسوف نستخدم مكتبته في Java في التجربة.
- [**Eclipse Kura**](https://eclipse.dev/kura/?ref=arabroot.io)**:** إطار مكتوب بـ Java وOSGi لبوابات الحافة IoT Edge Gateway، أي الجهاز الذي يجمع بيانات الحساسات في الموقع ويرسلها إلى السحابة، وصدر منه الإصدار 1.0.0 في سبتمبر 2014 بحسب [سجل حوكمته](https://projects.eclipse.org/projects/iot.kura/governance?ref=arabroot.io).

## برمجيات السيارات Software Defined Vehicle

السيارة الحديثة أصبحت مجموعة حواسيب، والوظائف فيها تضاف بتحديث برمجي أكثر من القطع، وهذا ما يسمى المركبة المعرفة بالبرمجيات Software Defined Vehicle. وفي 8 مارس 2022 [أعلنت المؤسسة](https://eclipse-foundation.blog/2022/03/08/eclipse-software-defined-vehicle-building-the-future-of-automotive/?ref=arabroot.io) مجموعة عمل Working Group باسم [Eclipse SDV](https://sdv.eclipse.org/?ref=arabroot.io) لتطوير أساس برمجي مفتوح تشترك فيه شركات السيارات والموردون بدل أن تبني كل شركة كل شيء وحدها. ومن أحدث مشاريعها [Eclipse Open Vehicle API](https://projects.eclipse.org/projects/automotive.openvehicle-api?ref=arabroot.io) الذي يقدم واجهة موحدة لإشارات السيارة وأحداثها، وما زال في مرحلة الاحتضان Incubating منذ إنشائه في أغسطس 2025، لذلك تعامل معه كمشروع تجريبي.

## تجربة عملية: Mosquitto وJava من Temurin

سوف نشغل وسيط Mosquitto بكلمة مرور، ثم ننشر رسالة من سطر الأوامر، ثم نكتب برنامج Java صغيراً يعمل على Temurin وينشر رسالة بمكتبة Paho، ومشترك واحد يستقبل الرسائل، والصورة التالية تبين التجربة:

![في الوسط وسيط Mosquitto 2.1.2 باسم lab-eclipse-mosquitto يستمع على 1883 بملف كلمات مرور ودون دخول مجهول، ومنشور فقط على 127.0.0.1:18830، وعلى اليمين ناشران مرقمان: 1 mosquitto_pub يرسل site/riyadh/temp 41.5، و2 برنامج Java 25 مع Paho يرسل site/riyadh/power on، وتحتهما محاولة بكلمة مرور خاطئة ترفض بالرسالة Connection Refused: not authorised، وعلى اليسار المشترك 3 mosquitto_sub على الموضوع site/riyadh/# ويستقبل الرسالتين](https://arabroot.io/content/images/2026/10/eclipse-projects-04-lab.webp)

التجربة: ناشران ووسيط واحد ومشترك، وكلها على شبكة Docker خاصة

### تشغيل الوسيط بكلمة مرور

نسخ Mosquitto 2 لا تقبل اتصالات من الشبكة دون إعداد صريح، والطريقة البسيطة التي تجدها في كثير من الأمثلة هي `allow_anonymous true`، ولكنها تعني أن أي شخص يصل إلى المنفذ يستطيع أن ينشر ويقرأ كل الرسائل، لذلك سوف نستخدم ملف كلمات مرور. ملف الإعداد `mosquitto.conf` كما يلي:

```text
listener 1883
allow_anonymous false
password_file /mosquitto/config/passwd
```

الآن نجهز Volume للإعداد، وننشئ فيه ملف كلمات المرور بأداة `mosquitto_passwd`، ثم نشغل الوسيط على شبكة خاصة، مع Docker Image بإصدار محدد Pinned Tag:

```bash
docker network create lab-eclipse-net
docker volume create lab-eclipse-config

docker run --rm --name lab-eclipse-setup \
  -v "$PWD/mosquitto.conf:/src/mosquitto.conf:ro" \
  -v lab-eclipse-config:/mosquitto/config \
  eclipse-mosquitto:2.1.2-alpine sh -c '
    cp /src/mosquitto.conf /mosquitto/config/ &&
    mosquitto_passwd -c -b /mosquitto/config/passwd sensor S3ns0r-Lab-2026 &&
    chown mosquitto:mosquitto /mosquitto/config/passwd &&
    chmod 0700 /mosquitto/config/passwd &&
    ls -l /mosquitto/config'

docker run -d --name lab-eclipse-mosquitto --network lab-eclipse-net \
  -p 127.0.0.1:18830:1883 \
  -v lab-eclipse-config:/mosquitto/config:ro \
  eclipse-mosquitto:2.1.2-alpine

docker logs lab-eclipse-mosquitto
```

والمخرج سوف يكون كما يلي:

```text
Adding password for user sensor
total 8
-rwxr-xr-x    1 root     root            75 Oct  8 07:48 mosquitto.conf
-rwx------    1 mosquitto mosquitto       193 Oct  8 07:48 passwd
1791445719: Info: running mosquitto as user: mosquitto.
1791445719: mosquitto version 2.1.2 starting
1791445719: Config loaded from /mosquitto/config/mosquitto.conf.
1791445719: Bridge support available.
1791445719: Persistence support available.
1791445719: TLS support available.
1791445719: TLS-PSK support available.
1791445719: Websockets support available.
1791445719: Plugin builtin-security has registered to receive 'basic-auth' events.
1791445719: Opening ipv4 listen socket on port 1883.
1791445719: Opening ipv6 listen socket on port 1883.
1791445719: mosquitto version 2.1.2 running
```

في الإعداد أعلاه لاحظ التالي:

- الملف `passwd` لا يحتوي كلمة المرور نفسها وإنما الهاش Hash الخاص بها، وأذوناته `0700` ومالكه المستخدم `mosquitto` الذي يعمل به الوسيط داخل ال Container كما يقول السطر `running mosquitto as user: mosquitto`.
- المنفذ منشور على `127.0.0.1` فقط، فلا يصل إليه أحد من خارج الجهاز، أما ال Containers الأخرى فتصل إليه بالاسم `lab-eclipse-mosquitto` على الشبكة الخاصة.
- الرقم في أول كل سطر هو الوقت بصيغة Unix Timestamp، وهو يقابل 8 أكتوبر 2026.

وإذا ظهر لك عند التشغيل الخطأ التالي فالسبب الأذونات Permissions:

```text
1791445678: password-file: Error: Unable to open pwfile "/mosquitto/config/passwd".
1791445678: mosquitto version 2.1.2 terminating
```

ويحدث هذا عندما تنشئ الملف في مجلد مربوط Bind Mount بمالك `root` وأذونات `0700`، فالوسيط يعمل بالمستخدم `mosquitto` ولا يستطيع قراءة ملف لا يملكه، لذلك يجب أن يكون مالك الملف هو المستخدم الذي يعمل به الوسيط، كما فعلنا بالأمر `chown` في الخطوات أعلاه.

### النشر والاشتراك من سطر الأوامر

الآن نشغل مشتركاً على كل المواضيع تحت `site/riyadh/`، ثم ننشر ثلاث مرات: الأولى بكلمة مرور خاطئة، والثانية والثالثة بالكلمة الصحيحة:

```bash
docker run -d --name lab-eclipse-sub --network lab-eclipse-net eclipse-mosquitto:2.1.2-alpine \
  mosquitto_sub -h lab-eclipse-mosquitto -u sensor -P S3ns0r-Lab-2026 -t 'site/riyadh/#' -v -C 2

docker run --rm --name lab-eclipse-pub --network lab-eclipse-net eclipse-mosquitto:2.1.2-alpine \
  mosquitto_pub -h lab-eclipse-mosquitto -u sensor -P wrong -t site/riyadh/temp -m 41.5; echo "exit=$?"
docker run --rm --name lab-eclipse-pub --network lab-eclipse-net eclipse-mosquitto:2.1.2-alpine \
  mosquitto_pub -h lab-eclipse-mosquitto -u sensor -P S3ns0r-Lab-2026 -t site/riyadh/temp -m 41.5; echo "exit=$?"
docker run --rm --name lab-eclipse-pub --network lab-eclipse-net eclipse-mosquitto:2.1.2-alpine \
  mosquitto_pub -h lab-eclipse-mosquitto -u sensor -P S3ns0r-Lab-2026 -t site/riyadh/humidity -m 18 -q 1; echo "exit=$?"

docker logs lab-eclipse-sub
```

والمخرج سوف يكون كما يلي:

```text
Connection error: Connection Refused: not authorised
Error: The connection was refused
exit=5
exit=0
exit=0
site/riyadh/temp 41.5
site/riyadh/humidity 18
```

في الإعداد أعلاه لاحظ التالي:

- المحاولة الأولى رفضت برمز الخروج 5، وسجل الوسيط يكتب السبب `disconnected: not authorised`، وهذا ما تبحث عنه في السجلات إذا اشتكى جهاز من أنه لا يستطيع الاتصال.
- الخيار `-t 'site/riyadh/#'` يشترك في كل المواضيع تحت `site/riyadh/`، فالعلامة `#` تعني كل المستويات التالية، والخيار `-v` يطبع اسم الموضوع قبل الرسالة.
- الخيار `-C 2` يجعل المشترك يخرج بعد رسالتين، وهو مناسب للتجربة فقط.
- الرسالة الثالثة أرسلت بالخيار `-q 1`، أي مستوى جودة الخدمة QoS 1 الذي يضمن وصول الرسالة مرة واحدة على الأقل، أما الافتراضي فهو QoS 0 دون تأكيد.

### برنامج Java على Temurin يرسل بمكتبة Paho

أولاً نتأكد من إصدار Java في ال Docker Image:

```bash
docker run --rm --name lab-eclipse-temurin eclipse-temurin:25.0.4.1_1-jdk java -version
```

```text
openjdk version "25.0.4.1" 2026-08-18 LTS
OpenJDK Runtime Environment Temurin-25.0.4.1+1 (build 25.0.4.1+1-LTS)
OpenJDK 64-Bit Server VM Temurin-25.0.4.1+1 (build 25.0.4.1+1-LTS, mixed mode, sharing)
```

بعد ذلك ننزل مكتبة Paho من Maven Central ونتحقق من البصمة SHA-1 المنشورة بجانبها، ثم نكتب البرنامج في ملف واحد `Publish.java`:

```bash
curl -s -o paho.jar https://repo1.maven.org/maven2/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.2.5/org.eclipse.paho.client.mqttv3-1.2.5.jar
curl -s https://repo1.maven.org/maven2/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.2.5/org.eclipse.paho.client.mqttv3-1.2.5.jar.sha1; echo
sha1sum paho.jar
```

```text
1546cfc794449c39ad569853843a930104fdc297
1546cfc794449c39ad569853843a930104fdc297  paho.jar
```

```java
import org.eclipse.paho.client.mqttv3.*;

public class Publish {
    public static void main(String[] args) throws Exception {
        System.out.println("java.vendor  = " + System.getProperty("java.vendor"));
        System.out.println("java.version = " + System.getProperty("java.version"));
        var client = new MqttClient("tcp://lab-eclipse-mosquitto:1883", "temurin-demo", null);
        var opts = new MqttConnectOptions();
        opts.setUserName("sensor");
        opts.setPassword("S3ns0r-Lab-2026".toCharArray());
        client.connect(opts);
        client.publish("site/riyadh/power", "on".getBytes(), 1, false);
        System.out.println("published site/riyadh/power = on (QoS 1)");
        client.disconnect();
    }
}
```

الآن نعيد تشغيل المشترك لرسالة واحدة، ثم نشغل البرنامج مباشرة من ملف المصدر دون خطوة ترجمة منفصلة:

```bash
docker rm -f lab-eclipse-sub
docker run -d --name lab-eclipse-sub --network lab-eclipse-net eclipse-mosquitto:2.1.2-alpine \
  mosquitto_sub -h lab-eclipse-mosquitto -u sensor -P S3ns0r-Lab-2026 -t 'site/riyadh/#' -v -C 1

docker run --rm --name lab-eclipse-temurin --network lab-eclipse-net \
  -v "$PWD:/app:ro" -w /app \
  eclipse-temurin:25.0.4.1_1-jdk java -cp paho.jar Publish.java

docker logs lab-eclipse-sub
```

والمخرج سوف يكون كما يلي:

```text
java.vendor  = Eclipse Adoptium
java.version = 25.0.4.1
published site/riyadh/power = on (QoS 1)
site/riyadh/power on
```

في الإعداد أعلاه لاحظ التالي:

- السطر `java.vendor = Eclipse Adoptium` يؤكد أن البرنامج يعمل على Temurin، وهذا ما تكتبه في تقرير الاعتماديات إذا سألك فريق الامتثال Compliance من أين جاءت Java في السيرفر.
- الأمر `java -cp paho.jar Publish.java` يشغل ملف المصدر مباشرة، وهذا مناسب للتجربة والسكربتات الصغيرة، أما المشروع الحقيقي فتبنيه بـ Maven أو Gradle.
- البرنامج والوسيط والمكتبة كلها من مؤسسة Eclipse، والمشترك لا يعرف ولا يهتم بأن الناشر برنامج Java، فهذه فائدة البروتوكول المفتوح.
- حجم Image الوسيط `eclipse-mosquitto:2.1.2-alpine` هو 41.8MB، بينما `eclipse-temurin:25.0.4.1_1-jdk` هو 603MB لأنها تحتوي JDK كاملاً، وفي الإنتاج استخدم Image من نوع JRE وهي أصغر لتشغيل تطبيق مبني مسبقاً.

### التنظيف

نحذف ما أنشأناه فقط بالاسم:

```bash
docker rm -f lab-eclipse-sub lab-eclipse-mosquitto
docker network rm lab-eclipse-net
docker volume rm lab-eclipse-config
```

## متى تحتاج مشاريع Eclipse؟

- **تطبيق Java للمؤسسات:** أنت تستخدم Jakarta EE غالباً حتى لو كنت تكتب بـ Spring Boot 3 أو أحدث، فخطط للانتقال إلى الحزم `jakarta` إذا كان تطبيقك ما زال على `javax`، لأن السيرفرات الحديثة مثل Tomcat 10 وما بعده لن تشغله.
- **Java في الإنتاج:** Temurin خيار مجاني بدعم طويل لإصدارات LTS، وال Image `eclipse-temurin` رسمية في Docker Hub، فثبت الإصدار برقمه الكامل في ملف Dockerfile حتى لا يتغير تحتك.
- **أجهزة وحساسات:** Mosquitto مع Paho يكفيان لأغلب المشاريع الصغيرة والمتوسطة، ولا تشغل الوسيط أبداً بدخول مجهول على منفذ مفتوح للإنترنت.
- **بيئة تطوير مفتوحة:** إذا كانت جهتك لا تستطيع الاعتماد على سوق إضافات Microsoft، فـ Theia وOpen VSX هما البديل المحايد.
- **قبل الاعتماد على أي مشروع:** افتح تبويب Governance في صفحته، فإذا كان ما زال Incubating مثل Open Vehicle API فاعرف أنه تجريبي.

## الخلاصة

وصلنا لنهاية الموضوع، وأهم ما فيه:

- Eclipse بدأت مشروعاً من IBM في 2001، وأصبحت مؤسسة مستقلة في 2004، ونقلت مقرها إلى بروكسل في 2021 لأن أغلب أعضائها ونموها في أوروبا، وتستضيف اليوم أكثر من 450 مشروعاً.
- Jakarta EE هي Java EE بعد انتقالها من Oracle، والاسم `javax` بقي مع Oracle، فتغيرت كل الحزم إلى `jakarta` في Jakarta EE 9 سنة 2020، وهذا التغيير يكسر التطبيقات القديمة على Tomcat 10 وما بعده.
- Adoptium هو امتداد AdoptOpenJDK، وTemurin بناء Java المجاني الذي تجده في Docker Hub باسم `eclipse-temurin`.
- الأدوات أكبر من المحرر: Theia وChe للتطوير في المتصفح، وOpen VSX سوق إضافات محايد.
- Mosquitto وPaho وKura تغطي MQTT من الوسيط إلى العميل إلى بوابة الحافة، وشغل الوسيط دائماً بملف كلمات مرور مملوك للمستخدم الذي يعمل به.
- مجموعة SDV تبني برمجيات السيارات المفتوحة، وأغلب مشاريعها ما زالت حديثة.

[![](https://arabroot.io/content/images/2026/10/apache-projects-cover-cover.webp)دليلمشاريع مؤسسة Apache: ماذا يحل كل مشروعكيف ترتب مشاريع مؤسسة Apache حسب المشكلة التي يحلها كل منها، وكيف تفحص صحة أي مشروع قبل أن تعتمد عليه.](https://arabroot.io/articles/%D8%AE%D8%B1%D9%8A%D8%B7%D8%A9-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D9%85%D8%A4%D8%B3%D8%B3%D8%A9-apache-%D9%88%D9%85%D8%A7%D8%B0%D8%A7-%D9%8A%D8%AD%D9%84-%D9%83%D9%84-%D9%85%D9%86%D9%87%D8%A7/)[![](https://arabroot.io/content/images/2026/10/oss-governance-cover-cover.webp)دليلمن يدير المشروع مفتوح المصدر؟ نماذج الحوكمة Governanceمن يقرر في مشروع يساهم فيه آلاف الأشخاص، ومن يستطيع تغيير رخصته، وما الذي تفحصه قبل أن تعتمد على أي مشروع.](https://arabroot.io/articles/%D8%AD%D9%88%D9%83%D9%85%D8%A9-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-%D9%88%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D9%87%D9%85%D8%A9-%D9%81%D9%8A%D9%87%D8%A7/)[![](https://arabroot.io/content/images/2026/10/open-source-licenses-cover-cover.webp)دليلما هي البرمجيات مفتوحة المصدر؟ القصة وأشهر الرخصكيف بدأت البرمجيات الحرة والمفتوحة، وما الفرق بين الحر والمجاني، وكيف تعرف ما تسمح به رخصة أي مشروع قبل أن تبني عليه.](https://arabroot.io/articles/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-%D9%88%D8%AA%D8%B1%D8%A7%D8%AE%D9%8A%D8%B5%D9%87%D8%A7/)[![](https://arabroot.io/content/images/2026/10/language-specs-cover-cover.webp)دليلاللغة شيء والمترجم شيء آخر: من يقرر مستقبل لغات البرمجة؟لماذا لا تصح جمل مثل «Python بطيئة»، وما الفرق بين مواصفة اللغة والبرامج التي تطبقها، ومن يقرر مستقبلها.](https://arabroot.io/articles/%D9%85%D9%88%D8%A7%D8%B5%D9%81%D8%A7%D8%AA-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%88%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA%D9%87%D8%A7-%D9%88%D8%AD%D9%88%D9%83%D9%85%D8%AA%D9%87%D8%A7/)[![](https://arabroot.io/content/images/2026/10/build-tools-cover-cover.webp)دليلأدوات البناء Build Tools وماذا يحدث عندما تبني مشروعكما الذي يحدث بين ضغطة البناء والملف الناتج، ولماذا ينجح البناء على جهازك ويفشل على سيرفر CI، ومتى يعطيك نفس النتيجة مرتين.](https://arabroot.io/articles/%D8%A7%D8%AF%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D9%86%D8%A7%D8%A1-build-tools-%D9%85%D9%86-make-%D8%A7%D9%84%D9%89-maven-%D9%88-gradle-%D9%88-dotnet/)[![](https://arabroot.io/content/images/2026/10/cncf-projects-cover-cover.webp)دليلمشاريع CNCF: خريطة أدوات Cloud Nativeماذا تعني مراحل Sandbox وIncubating وGraduated في CNCF، وما الذي يحله كل مشروع متخرج، وكيف يختار فريق صغير منها ما يحتاجه فقط.](https://arabroot.io/articles/%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-cncf-%D8%AE%D8%B1%D9%8A%D8%B7%D8%A9-%D8%A7%D8%AF%D9%88%D8%A7%D8%AA-cloud-native/)[![](https://arabroot.io/content/images/2026/10/linux-foundation-projects-cover-cover.webp)دليلمشاريع Linux Foundation خارج CNCFكيف تحولت Linux Foundation إلى مظلة فوق OpenJS وPyTorch وOpenSSF وValkey وغيرها، ومن يمولها ويقرر فيها، وكيف تقارن بمؤسسات Apache وEclipse وPython.](https://arabroot.io/articles/%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-linux-foundation-%D8%AE%D8%A7%D8%B1%D8%AC-cncf/)

## سجل التحديثات

- أكتوبر 2026: كتابة المقال، وقراءة التواريخ من مدونة مؤسسة Eclipse وصفحات المشاريع وسجلات حوكمتها، وتنفيذ التجربة على Docker 29.8.0 مع eclipse-mosquitto:2.1.2-alpine وeclipse-temurin:25.0.4.1\_1-jdk ومكتبة Paho 1.2.5.