الأدلة التقنية

مشاريع مؤسسة Apache: ماذا يحل كل مشروع

كيف ترتب مشاريع مؤسسة Apache حسب المشكلة التي يحلها كل منها، وكيف تفحص صحة أي مشروع قبل أن تعتمد عليه.

مشاريع مؤسسة Apache: ماذا يحل كل مشروع

إذا فتحت ملف الاعتماديات في أي مشروع Java، أو قرأت وصف وظيفة لمهندس بيانات Data Engineer، أو نظرت في قائمة الخدمات على سيرفر قديم في جهة حكومية، فسوف تجد كلمة Apache تتكرر أمامك: Apache Kafka وApache Spark وApache Tomcat وApache Maven، وقد يتساءل البعض: هل هذه كلها منتجات شركة واحدة اسمها Apache؟ والإجابة أن Apache ليست شركة، وإنما مؤسسة غير ربحية تستضيف أكثر من 290 مشروعاً مفتوح المصدر، ولكل مشروع منها مجتمعه ولجنته وإصداراته، والاسم المشترك يعني أنها تعيش تحت نفس القواعد ونفس الرخصة وليس أنها منتج واحد.

وقد شرحنا في مقال حوكمة المشاريع مفتوحة المصدر كيف تحكم Apache مشاريعها، أي الأدوار واللجان والتصويت بالأرقام، وشرحنا في قسم المؤسسات المحايدة لماذا توجد هذه المؤسسات أصلاً، ولن نعيد ذلك هنا. أما هذا المقال فهو خريطة عملية: ما هي المشاريع التي سوف تقابلها في العمل، وماذا يحل كل منها، ومن أين جاء، وكيف تعرف هل المشروع حي قبل أن تبني عليه نظامك.

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

  • قصة Apache باختصار، من مجموعة مطورين حول سيرفر ويب في 1995 إلى المؤسسة اليوم، والرخصة Apache License 2.0 في جملة.
  • المشاريع مقسمة حسب نوع المشكلة: السيرفرات، والبيانات الضخمة وبث الأحداث، وقواعد البيانات، والبحث، والرسائل، ومكتبات Java، والبرامج المكتبية، وأدوات المطورين، والتحليلات والتعلم الآلي، ولكل مشروع وصف قصير وتاريخ مختصر ورابط لمقالنا عنه إن وجد.
  • دورة حياة المشروع في Apache: الحاضنة Incubator ثم المشروع المستقل Top-Level Project ثم التقاعد في ال Attic.
  • كيف تفحص صحة المشروع Project Health بنفسك، مع سكربت صغير يقرأ البيانات العامة للمؤسسة ويطبع الأرقام الحقيقية.

من سيرفر ويب واحد إلى مؤسسة: قصة Apache باختصار

تحكي صفحة About the Apache HTTP Server Project أن أشهر سيرفر ويب في فبراير 1995 كان NCSA httpd، وأن تطويره توقف بعد أن ترك مطوره الأساسي المركز، فبدأت مجموعة من المطورين تجمع التصحيحات Patches التي كتبها كل منهم على حدة، وبحلول نهاية فبراير كان هناك ثمانية مطورين أساسيين أسسوا ما سمي Apache Group، وأخذوا NCSA httpd 1.3 أساساً وأضافوا عليه التصحيحات، ثم صدر Apache 1.0 في 1 ديسمبر 1995. وتقول الصفحة نفسها إن أعضاء Apache Group أسسوا في 1999 مؤسسة Apache Software Foundation واختصاراً ASF، لتعطي السيرفر غطاءً قانونياً ومالياً وتنظيمياً، ثم توسعت المؤسسة لتستضيف مشاريع أخرى كثيرة، وصفحة How the ASF works تؤكد أن المؤسسة تكونت في 1999.

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

خط زمني من اليسار إلى اليمين بست محطات: 1995 Apache Group تبدأ من كود سيرفر NCSA وتصدر 1.0 في ديسمبر، و1999 تأسيس ASF كمؤسسة غير ربحية، و2002 الحاضنة Incubator، و2004 رخصة Apache License 2.0 المتساهلة مع ترخيص براءات الاختراع، و2008 ال Attic للمشاريع المتقاعدة، و2026 أكثر من 290 مشروعاً مع 216 لجنة PMC و24 مشروعاً في الحاضنة
محطات Apache من مجموعة المطورين في 1995 إلى المؤسسة اليوم

في الرسم أعلاه لاحظ التالي:

  • لجنة الحاضنة Apache Incubator تأسست في أكتوبر 2002 بحسب بيانات اللجان في دليل المشاريع، ومنذ ذلك الوقت يدخل كل مشروع جديد من هذا الباب، وسوف نعود إليها في قسم دورة الحياة.
  • الرخصة Apache License 2.0 صدرت في يناير 2004، وهي رخصة متساهلة Permissive تسمح لك باستخدام الكود وتعديله وبيعه داخل منتج مغلق، وتضيف في البند الثالث ترخيصاً صريحاً لبراءات الاختراع Patent Grant من كل مساهم، وقد شرحنا الرخص المتساهلة والفرق بينها وبين GPL في مقال الرخص.
  • ال Apache Attic أنشئ في نوفمبر 2008 كما تقول صفحته، ليكون واضحاً للمستخدمين متى وصل مشروع إلى نهاية عمره.
  • الأرقام الحالية من الصفحة الرئيسية لـ apache.org التي تذكر أكثر من 290 مشروعاً وأكثر من 10100 صاحب صلاحية كتابة Committer وأكثر من 1190 عضواً Member، ومن البيانات العامة للمؤسسة التي سوف نقرؤها بالسكربت في آخر المقال.

كيف تقرأ خريطة المشاريع؟

المؤسسة نفسها تقسم مشاريعها في دليل المشاريع حسب الفئة، ولكن هذه الفئات يكتبها كل مشروع بنفسه في ملف وصف المشروع DOAP، فتجد مشروعاً واحداً في ست فئات، وتجد فئات متداخلة مثل big-data وdata-engineering. لذلك قسمنا المشاريع في هذا المقال حسب المشكلة التي تحلها عندك في العمل، والصورة التالية تبين الخريطة كاملة:

تسع بطاقات ملونة: السيرفرات وبوابات الواجهات البرمجية فيها HTTP Server وTomcat وAPISIX، والبيانات الضخمة وبث الأحداث فيها Hadoop وSpark وKafka وFlink وPulsar وBeam وAirflow وNiFi وIceberg وArrow وParquet، وقواعد البيانات فيها Cassandra وCouchDB وDoris وDruid وPinot وIoTDB، والبحث فيه Lucene وSolr، والرسائل فيها ActiveMQ وRocketMQ، ومكتبات Java فيها Maven وCommons وLog4j، والبرامج المكتبية فيها OpenOffice، وأدوات المطورين فيها Subversion وGroovy وNetBeans، والتحليلات والتعلم الآلي فيها Superset وOpenNLP وSystemDS وTVM وMahout وSINGA
المشاريع التي يتناولها المقال مقسمة حسب نوع المشكلة التي تحلها

ولكل مشروع في الأقسام التالية سطر يقول ماذا يحل، ثم تاريخه المختصر: من أين جاء، ومتى دخل الحاضنة ومتى أصبح مشروعاً مستقلاً Top-Level Project، وكلها مأخوذة من صفحة المشروع نفسه أو من اقتراح دخوله إلى الحاضنة Incubator Proposal أو من بيانات المؤسسة. ولاحظ أن كل المشاريع المذكورة هنا مشاريع مستقلة ناضجة، فلم نضع في الخريطة أي مشروع ما زال في الحاضنة، وتاريخ آخر إصدار لكل منها تجده بالسكربت في قسم فحص صحة المشروع.

السيرفرات وبوابات الواجهات البرمجية API Gateway

  • Apache HTTP Server: سيرفر الويب Web Server الذي بدأت به القصة، ويستقبل طلبات HTTP ويعيد الصفحات أو يمررها إلى تطبيقات أخرى عبر الوحدات Modules. وقد بدأ في فبراير 1995 من كود NCSA httpd كما ذكرنا، وما زال يصدر حتى اليوم، وآخر إصدار في سلسلة 2.4 هو 2.4.69 في أكتوبر 2026 بحسب بيانات الإصدارات في المؤسسة. وإذا كنت تبحث عن مقارنته بالبدائل كـ Reverse Proxy فقد قارنا الأدوات الشائعة في مقارنة Nginx Proxy Manager وTraefik وHAProxy.
  • Apache Tomcat: Servlet Container تشغل تطبيقات Java المكتوبة بمواصفات Servlet وJSP، أي أنها السيرفر الذي يستقبل الطلب ويمرره إلى كود Java. وتقول صفحة تاريخ Tomcat إن Sun تبرعت بالكود للمؤسسة في 1999 وإن أول إصدار من Apache كان 3.0، وتقول الصفحة نفسها إنه أصبح مشروعاً مستقلاً في 2005 بعد أن خرج من مظلة مشروع Jakarta، والسلسلة المستقرة اليوم هي 11.0 بحسب صفحة الإصدارات، وهي تطبق مواصفات Jakarta EE التي تديرها مؤسسة Eclipse.
  • Apache APISIX: بوابة واجهات برمجية API Gateway تقف أمام خدماتك وتتولى التوجيه Routing والمصادقة Authentication وتحديد عدد الطلبات Rate Limiting. وبحسب اقتراح دخوله إلى الحاضنة فقد نشر كوده على GitHub في يونيو 2019، وقدمته شركة Zhiliu للمؤسسة، فدخل الحاضنة في أكتوبر 2019 وتخرج في يوليو 2020، وقد ذكرناه مع البوابات الأخرى في قسم بوابات الواجهات البرمجية في مقال أمن الواجهات البرمجية.

البيانات الضخمة Big Data وبث الأحداث Event Streaming

هذا القسم هو الأكبر في Apache، لأن أغلب أدوات البيانات المفتوحة التي ظهرت بعد 2006 دخلت المؤسسة، وقد يكون من الصعب أن تعرف أين يقع كل مشروع، لذلك الصورة التالية تضعها على مسار واحد من مصدر البيانات إلى لوحة التقارير:

مسار من اليمين إلى اليسار بسبع مراحل مرقمة: المصادر من أجهزة وتطبيقات وقواعد بيانات، ثم NiFi لنقل البيانات وتحويلها، ثم Kafka وPulsar لتخزين الأحداث بالترتيب، ثم Spark وFlink وBeam للمعالجة على دفعات أو بث مستمر، ثم Iceberg فوق ملفات Parquet كجداول في التخزين، ثم Doris وDruid وPinot للاستعلامات التحليلية السريعة، ثم Superset للوحات والتقارير، وفوق المسار شريط Airflow الذي يجدول المهام، وتحته شريط Arrow كصيغة أعمدة في الذاكرة بين المحركات
مسار توضيحي يبين موقع كل مشروع من مشاريع البيانات، وأغلب الفرق تستخدم جزءاً منه فقط
  • Apache Hadoop: منصة لتخزين البيانات الكبيرة ومعالجتها على عدد كبير من السيرفرات، وتتكون كما في صفحتها من نظام الملفات الموزع HDFS، ومدير الموارد YARN، ومحرك المعالجة MapReduce. وتقول صفحة وصف المشروع إنه بني في الأصل كبنية تحتية لمشروع Nutch الذي يزحف على الويب ويبني فهرس بحث، ثم أصبح مشروعاً مستقلاً في يناير 2008، وآخر إصداراته 3.5.0 في أبريل 2026. واليوم قليل من الفرق تبني نظاماً جديداً على MapReduce، ولكن HDFS وYARN ما زالا تحت كثير من الأنظمة القائمة، وقد ذكرنا مكانه في قسم البيانات الضخمة في مقال التعلم الآلي.
  • Apache Spark: محرك لمعالجة البيانات الكبيرة في الذاكرة، تكتب له بلغة SQL أو Python أو Scala، ويوزع العمل على عدة سيرفرات، وهو اليوم الخيار الشائع بدل MapReduce. وبحسب صفحة البحث في موقعه فقد بدأ مشروعاً بحثياً في مختبر AMPLab في جامعة UC Berkeley، ثم دخل الحاضنة في يونيو 2013 وتخرج في فبراير 2014، وآخر إصدار له في سلسلة 4.1 هو 4.1.3.
  • Apache Kafka: منصة بث الأحداث Event Streaming التي تحفظ الرسائل في سجل Log مرتب وتسمح لأكثر من مستهلك بقراءته وإعادة قراءته. وتقول وثيقة اقتراحه إنه طور في LinkedIn لمعالجة الكم الكبير من الأحداث التي يولدها موقعها، ودخل الحاضنة في يوليو 2011 وتخرج في أكتوبر 2012. وقد شرحنا الفرق بينه وبين الطابور Message Queue مع تجربة عملية في مقال الطابور أم بث الأحداث.
  • Apache Flink: محرك للمعالجة المستمرة Stream Processing يعالج كل حدث لحظة وصوله ويحفظ الحالة State بين الأحداث، ويعالج الدفعات Batch أيضاً. وقد بدأ كما في اقتراح دخوله في 2008 مشروعاً بحثياً اسمه Stratosphere بين جامعة TU Berlin وجامعة Humboldt ومعهد Hasso Plattner، ودخل الحاضنة في أبريل 2014، وصوت المشروع في مايو 2014 على تغيير اسمه إلى Flink، ثم تخرج في ديسمبر 2014.
  • Apache Pulsar: منصة رسائل وبث أحداث تجمع بين نمط الطابور ونمط السجل، وتفصل التخزين عن السيرفرات التي تستقبل الرسائل، وتدعم أكثر من مستأجر Multi-Tenancy في نفس العنقود. وتقول وثائقه إنه طور في Yahoo، ويذكر اقتراح دخوله أنه نشر مفتوحاً في سبتمبر 2016 امتداداً لأنظمة بنتها Yahoo منذ 2011، ثم دخل الحاضنة في يونيو 2017 وتخرج في سبتمبر 2018، وصدر منه الإصدار 5.0.0 في أكتوبر 2026.
  • Apache Beam: نموذج برمجي واحد تكتب به خط المعالجة Pipeline مرة واحدة، ثم تشغله على محرك تختاره مثل Flink أو Spark أو Google Cloud Dataflow، والفكرة أنك لا تربط كودك بمحرك واحد. وبحسب اقتراح دخوله فهو مبني على ال SDK والنموذج الذي نشرته Google لخدمة Dataflow، ودخل الحاضنة في فبراير 2016 وتخرج في ديسمبر 2016.
  • Apache Airflow: أداة لجدولة المهام Workflow Orchestration، تكتب فيها خطوات العمل بلغة Python كرسم من المهام المتتابعة DAG، فيشغلها بالترتيب ويعيد المحاولة عند الفشل ويعرض حالتها في واجهة ويب. وتقول صفحة المشروع إن Maxime Beauchemin بدأه في Airbnb في أكتوبر 2014، وإنه كان مفتوح المصدر من أول Commit وأعلن رسمياً في يونيو 2015، ثم دخل الحاضنة في مارس 2016 وتخرج في ديسمبر 2018.
  • Apache NiFi: أداة لنقل البيانات بين الأنظمة وتحويلها أثناء النقل، ترسم فيها التدفق Data Flow بالسحب والإفلات في المتصفح، وتتتبع مصدر كل سجل Data Provenance. ومن الطريف أنها جاءت من وكالة الأمن القومي الأمريكية NSA، فبحسب اقتراح دخولها كان اسمها Niagarafiles وتطور منذ أواخر 2006، ثم قدمتها الوكالة للمؤسسة، فدخلت الحاضنة في نوفمبر 2014 وتخرجت في يوليو 2015.
  • Apache Iceberg: صيغة جداول Table Format تجعل مجموعة كبيرة من الملفات في التخزين تتصرف كجدول قاعدة بيانات، مع معاملات Transactions وتغيير الأعمدة Schema Evolution والرجوع إلى نسخة سابقة من الجدول Time Travel، وهي أساس ما يسمى بحيرة البيانات Lakehouse. وتذكر وثيقة اقتراحها أنها كانت تطور في Netflix، ودخلت الحاضنة في نوفمبر 2018 وتخرجت في مايو 2020.
  • Apache Arrow: صيغة أعمدة Columnar Format موحدة للبيانات في الذاكرة، تسمح لأداتين مختلفتين مثل Spark وpandas بتبادل البيانات دون تحويلها من صيغة إلى أخرى. وهو من المشاريع القليلة التي لم تمر بالحاضنة، فقد أعلنته المؤسسة في 17 فبراير 2016 مشروعاً مستقلاً مباشرة، وبدأ من كود مأخوذ من مشروع Apache Drill، ثم صدر الإصدار 1.0.0 في يوليو 2020.
  • Apache Parquet: صيغة ملفات تخزن البيانات عموداً عموداً Columnar Storage مع ضغط عال، فإذا سألت عن عمودين من مئة عمود قرأ المحرك العمودين فقط، ولذلك أصبحت الصيغة الافتراضية لملفات التحليل. ويقول مستودع مواصفاتها إنها صممت لتكون متاحة لأي مشروع في بيئة Hadoop، وحقوقه الأولى باسم Twitter وCloudera منذ 2013، ثم دخلت الحاضنة في مايو 2014 وتخرجت في أبريل 2015.

وقد يتساءل البعض: هل أحتاج كل هذا لأحلل بيانات شركتي؟ والإجابة في أغلب الحالات لا، فإذا كانت بياناتك بعشرات الجيجابايت فإن قاعدة PostgreSQL واحدة تكفي لأغلب العمل، وقد شرحنا ذلك في مقال PostgreSQL لكل شيء، والمسار في الصورة أعلاه يبدأ يستحق تكلفته عندما تكبر البيانات أو تأتي كبث مستمر من مصادر كثيرة.

قواعد البيانات Databases

  • Apache Cassandra: قاعدة بيانات موزعة Distributed Database من نوع NoSQL، تكتب على عدة سيرفرات دون سيرفر رئيسي واحد، فتتحمل سقوط سيرفر أو مركز بيانات كامل، وتناسب الكتابة الكثيرة جداً. وتقول وثائقها إنها صممت في البداية في Facebook، ودخلت الحاضنة في يناير 2009 وتخرجت في فبراير 2010، وقد شرحنا طريقة توزيعها للبيانات في قسم معماريات العناقيد في مقال عناقيد قواعد البيانات.
  • Apache CouchDB: قاعدة بيانات مستندات Document Database تخزن JSON وتتعامل معها عبر HTTP، وأهم ما يميزها النسخ المتماثل Replication في الاتجاهين، فيستطيع جهاز يعمل دون اتصال أن يزامن بياناته لاحقاً. وتقول وثيقة اقتراحها إنها بدأت خارج Apache برخصة GPL، ثم قرر مطورها Damien Katz أن يدخلها الحاضنة، فدخلت في فبراير 2008 وتخرجت في نوفمبر 2008.
  • Apache Doris: مستودع بيانات تحليلي Data Warehouse يعمل بالمعالجة المتوازية MPP ويجيب على استعلامات SQL التحليلية على بيانات كبيرة في أقل من ثانية في أغلب الحالات، ويستخدم في التقارير ولوحات المتابعة. وبحسب اقتراح دخوله فقد بني واستخدم في Baidu ونشر على GitHub باسم Palo، ثم دخل الحاضنة في يوليو 2018 وتخرج في يونيو 2022.
  • Apache Druid: قاعدة بيانات تحليلية Real-time Analytics مصممة لاستقبال الأحداث من Kafka وجعلها قابلة للاستعلام فوراً، مع تجميع سريع حسب الوقت. وتقول وثيقة اقتراحها إن شركة Metamarkets نشرتها مفتوحة في 2012، ودخلت الحاضنة في فبراير 2018 وتخرجت في ديسمبر 2019.
  • Apache Pinot: مخزن تحليلي OLAP موزع للاستعلامات السريعة على بيانات تصل لحظياً، ويستخدم عادة في لوحات يراها المستخدم النهائي وليس فريق التحليل وحده. وتقول وثائقه إنه بني في الأصل في LinkedIn، وقدمته LinkedIn للمؤسسة فدخل الحاضنة في أكتوبر 2018 وتخرج في يوليو 2021.
  • Apache IoTDB: قاعدة بيانات للسلاسل الزمنية Time Series صممت لبيانات أجهزة إنترنت الأشياء IoT، أي قراءات حساسات كثيرة جداً بطابع زمني. وتقول وثيقة اقتراحها إنها بدأت مشروعاً بحثياً في جامعة Tsinghua، ودخلت الحاضنة في نوفمبر 2018 وتخرجت في سبتمبر 2020.
  • Apache Lucene: مكتبة بحث Search Library مكتوبة بلغة Java، تبني الفهرس المعكوس Inverted Index وترتب النتائج، وهي ليست سيرفراً تشغله وإنما مكتبة تدخل في برنامجك، ولذلك تجدها داخل Solr وElasticsearch وOpenSearch. وأصبحت مشروعاً مستقلاً في يناير 2005، وتذكر صفحة الأسئلة الشائعة أن الاسم هو الاسم الأوسط لزوجة مطورها Doug Cutting، وآخر إصداراتها 10.5.2 في سبتمبر 2026. وقد شرحنا ما يحدث داخلها خطوة بخطوة في مقال كيف يعمل البحث.
  • Apache Solr: سيرفر بحث كامل مبني على Lucene، تشغله وترسل له المستندات عبر HTTP، ويضيف التوزيع على عدة سيرفرات والتصفية بالخصائص Faceting. وتقول وثيقة اقتراحه إنه كان مشروعاً داخلياً في شركة CNET يشغل البحث في مواقعها، وقدمه Yonik Seeley، فدخل الحاضنة في يناير 2006 وتخرج في يناير 2007 ليعمل تحت مشروع Lucene، وفي فبراير 2021 أعلن مجلس الإدارة Solr مشروعاً مستقلاً. وللبحث في النصوص العربية تحديداً راجع مقال البحث في النصوص العربية الذي يستخدم OpenSearch المبني على Lucene.

الرسائل والطوابير Messaging

  • Apache ActiveMQ: وسيط رسائل Message Broker مكتوب بلغة Java يدعم عدة بروتوكولات مثل AMQP وMQTT وSTOMP وواجهة JMS، وصفحته تعرض نسختين هما ActiveMQ Classic وActiveMQ Artemis. وتقول وثيقة اقتراحه إنه كان مستضافاً في موقع Codehaus، فدخل الحاضنة في ديسمبر 2005 وتخرج في يناير 2007.
  • Apache RocketMQ: منصة رسائل موزعة تجمع الطابور وبث الأحداث، وتشتهر بدعم الرسائل المؤجلة والرسائل ضمن معاملة Transactional Messages. وتقول وثيقة اقتراحها إنها طورت في Alibaba في 2011 واستخدمت في الإنتاج هناك منذ ذلك الوقت، ثم دخلت الحاضنة في نوفمبر 2016 وتخرجت في سبتمبر 2017.

وإذا كانت فكرة الطابور نفسها جديدة عليك، أي التأكيد Acknowledgement وإعادة المحاولة وطابور الرسائل الفاشلة Dead Letter Queue، فابدأ بمقال مفاهيم الطوابير قبل أن تختار أي وسيط.

مكتبات Java وأدوات البناء Build Tools

  • Apache Maven: أداة بناء Build Tool وإدارة اعتماديات Dependency Management لمشاريع Java، تقرأ ملف pom.xml وتنزل المكتبات وتبني المشروع بمراحل ثابتة. وتقول صفحة تاريخ Maven إنه بدأ في مشروع Jakarta Alexandria ثم اختبر في مشروع Turbine، وإن أول نسخة كتبها Jason van Zyl بمساعدة Bob McWhirter، وأصبح مشروعاً مستقلاً في مارس 2003، وصدر منه الإصدار 3.10.0 في أكتوبر 2026. وقد شرحناه مع تجربة عملية في قسم Maven في مقال أدوات البناء.
  • Apache Commons: مجموعة مكتبات صغيرة لأعمال تتكرر في كل مشروع Java، مثل Commons Lang للنصوص وCommons IO للملفات وCommons CSV، وغالباً تجدها في اعتماديات مشروعك دون أن تضيفها بنفسك. وتقول صفحة ميثاقها إن مجلس الإدارة صوت في 20 يونيو 2007 على ترقية مشروع Jakarta Commons الفرعي إلى مشروع مستقل.
  • Apache Log4j: مكتبة السجلات Logging الأشهر في Java، وتديرها لجنة Logging Services التي تدير أيضاً log4net وlog4cxx. وتقول صفحة دليلها إن فكرتها بدأت في أوائل 1996 في مشروع SEMPER الأوروبي، وإن المشروع انتقل إلى المؤسسة في 2003 وأصبح Apache Log4j. ولاحظ أن الثغرة الشهيرة Log4Shell كانت في هذه المكتبة، وقد شرحناها في قسم حقن السجلات في مقال السجلات.

البرامج المكتبية: OpenOffice

Apache OpenOffice حزمة مكتبية Office Suite فيها محرر نصوص وجداول وعروض، وتقول صفحته إن OpenOffice.org انتقل إلى المؤسسة في 1 يونيو 2011، وأصبح مشروعاً مستقلاً في أكتوبر 2012. ولكن قبل هذا الانتقال بأشهر كان فريق من المساهمين القدامى قد خرج بنسخة بديلة اسمها LibreOffice في سبتمبر 2010، وقد شرحنا قصة هذه النسخة البديلة في قسم النسخة البديلة Fork في مقال الحوكمة.

والوضع اليوم كما تقوله الأرقام: آخر إصدار من OpenOffice هو 4.1.16 في أكتوبر 2025، أي أن المشروع ما زال حياً ويصدر تصحيحات في سلسلة 4.1، ولكنه يتحرك ببطء شديد، بينما LibreOffice يصدر إصداراً رئيسياً كل ستة أشهر بحسب خطة إصداراته. لذلك إذا كنت تختار حزمة مكتبية لجهة أو شركة اليوم، فالخيار العملي هو LibreOffice أو أحد الحلول المبنية عليه، ولا ينصح بأن تبدأ نشراً جديداً على OpenOffice.

أدوات المطورين Developer Tools

  • Apache Subversion: نظام إدارة نسخ مركزي Centralized Version Control واختصاراً SVN، وكان الخيار الأول قبل أن ينتشر Git، وما زال يعمل في مؤسسات كثيرة. وتقول صفحته إن شركة CollabNet أسسته في 2000، وأصبح مشروعاً مستقلاً في Apache في فبراير 2010، وصدر منه الإصدار 1.15.0 في أكتوبر 2026. وقد شرحنا الفرق بين الأنظمة المركزية والموزعة في قسم إدارة النسخ المركزية في مقال Git.
  • Apache Groovy: لغة برمجة ديناميكية تعمل على JVM وتقرأ كود Java مباشرة، ومن استخداماتها المعروفة اليوم كتابة ملفات البناء في Gradle كما في دليل Gradle. وتقول وثيقة اقتراحها إن الإصدار 1.0 صدر في 2 يناير 2007، وإنها كانت مستضافة في Codehaus برعاية شركة Pivotal حتى 31 مارس 2015، فدخلت الحاضنة في مارس 2015 وتخرجت في نوفمبر 2015، وصدر منها الإصدار 6.0.0 في سبتمبر 2026.
  • Apache NetBeans: بيئة تطوير متكاملة IDE لـ Java وPHP ولغات أخرى، وإطار لبناء تطبيقات سطح المكتب. وتقول صفحة تاريخه إنه بدأ في 1996 مشروعاً لطلاب في جمهورية التشيك باسم Xelfi، ثم انتقل إلى Sun ثم Oracle، وفي 2016 تبرعت Oracle بكوده للمؤسسة، فدخل الحاضنة في أكتوبر 2016 وتخرج في أبريل 2019.

التحليلات Analytics والتعلم الآلي Machine Learning

  • Apache Superset: منصة استكشاف البيانات Data Exploration ولوحات المتابعة Dashboards، تتصل بقاعدة بياناتك وتبني منها الرسوم والتقارير. ويذكر اقتراح دخوله أن كوده جاء من مستودع airbnb/superset، وكان Maxime Beauchemin صاحب Airflow من أوائل المطورين فيه، فدخل الحاضنة في مايو 2017 وتخرج في نوفمبر 2020. وقد شرحنا تثبيته واستخدامه في دليل Apache Superset للتحليلات المتقدمة.
  • Apache OpenNLP: مكتبة Java لمعالجة اللغة الطبيعية Natural Language Processing، مثل تقسيم النص إلى كلمات Tokenization واستخراج أسماء الأشخاص والأماكن. وتقول وثيقة اقتراحها إن Jason Baldridge وGann Bierner بدآها في 2000 وهما طالبان في جامعة Edinburgh، ودخلت الحاضنة في نوفمبر 2010 وتخرجت في فبراير 2012.
  • Apache SystemDS: منصة للتعلم الآلي على البيانات الكبيرة تكتب فيها الخوارزمية بلغة عالية المستوى، فتحولها إلى خطة تنفيذ على جهاز واحد أو على عنقود Spark. وقد بدأت باسم SystemML كما في وثيقة اقتراحها مشروعاً بحثياً في مركز IBM Almaden في حدود 2007، وأصبحت مشروعاً مستقلاً في مايو 2017، ثم تغير اسمها إلى SystemDS كما يذكر مستودعها.
  • Apache TVM: مترجم Compiler لنماذج التعلم الآلي، يأخذ النموذج المدرب ويحوله إلى كود سريع لعتاد محدد مثل معالج ARM أو بطاقة رسوميات GPU. وتقول وثيقة اقتراحه إنه بدأ مشروعاً بحثياً لمجموعة SAMPL في جامعة Washington، ودخل الحاضنة في مارس 2019 وتخرج في نوفمبر 2020.
  • Apache Mahout: كان في بدايته مكتبة تعلم آلي تعمل فوق Hadoop، وأصبح مشروعاً مستقلاً في أبريل 2010، ثم غير اتجاهه بالكامل، فصفحته اليوم تقول إن عمله يتركز على التعلم الآلي الكمي Quantum Machine Learning بلغة Python عبر مكتبتي Qumat وQDP. وهذا مثال جيد على أن الاسم القديم لا يخبرك بما يفعله المشروع اليوم، فاقرأ الصفحة قبل أن تعتمد على ذاكرتك.
  • Apache SINGA: منصة موزعة للتعلم العميق Deep Learning، وتقول وثيقة اقتراحها إنها كانت تطور في مختبر أنظمة قواعد البيانات في الجامعة الوطنية في سنغافورة NUS بالتعاون مع جامعة Zhejiang، ودخلت الحاضنة في مارس 2015 وتخرجت في أكتوبر 2019.

ولاحظ أن أشهر أدوات التعلم العميق اليوم مثل PyTorch ليست في Apache، وأن مشروع MXNet الذي كان في Apache انتقل إلى ال Attic، وتقول صفحته هناك إنه أصبح مشروعاً مستقلاً في سبتمبر 2022 ثم تقاعد في سبتمبر 2023. وإذا كنت تبدأ في التعلم الآلي فابدأ بمقال التعلم الآلي للمبتدئين قبل أن تختار أي منصة.

دورة حياة المشروع: الحاضنة ثم المشروع المستقل ثم التقاعد

كل مشروع في Apache يمر بثلاث مراحل، والصورة التالية تبينها مع الأرقام الحالية:

ثلاث بطاقات من اليمين إلى اليسار: Podling مشروع في الحاضنة Incubator يتعلم طريقة Apache وعددها اليوم 24، ثم سهم أخضر graduate بتصويت ثم قرار من مجلس الإدارة إلى Top-Level Project مشروع مستقل تديره لجنة PMC خاصة به وعدد اللجان 216، ثم سهم رمادي retire عندما لا يبقى من يديره إلى Attic مشروع متقاعد لا يوجد فيه تطوير ولا إصدارات جديدة وعدد اللجان المتقاعدة 96، وسهم أحمر متقطع من الحاضنة إلى 85 مشروعاً تقاعدت داخل الحاضنة، وتحتها أمثلة: Superset دخل الحاضنة 2017 وتخرج 2020، و267 مشروعاً تخرجت حتى اليوم، وMXNet وMesos تقاعدا في 2023 و2025
دورة حياة المشروع في Apache، والأرقام من البيانات العامة للمؤسسة في أكتوبر 2026
  1. الحاضنة Incubator: المشروع الجديد يدخل باقتراح Proposal مكتوب، مثل الاقتراحات التي ربطناها في الأقسام السابقة، ويسمى خلال هذه المرحلة Podling، ويضيف إلى اسمه كلمة Incubating، والهدف كما ذكرنا في مقال الحوكمة أن يثبت أنه يعمل بطريقة Apache، أي أن له مجتمعاً متنوعاً وليس شركة واحدة، وأنه يصدر إصدارات صحيحة قانونياً.
  2. التخرج Graduation: يصوت مجتمع المشروع، ثم لجنة الحاضنة، ثم يرفع قرار Resolution إلى مجلس الإدارة الذي ينشئ لجنة PMC جديدة للمشروع، كما يشرح دليل التخرج. وبعدها يصبح المشروع مستقلاً Top-Level Project ويحذف كلمة Incubating من اسمه.
  3. التقاعد Attic: عندما لا يبقى في المشروع عدد كاف من الأشخاص لإدارته، تصوت ال PMC على حل نفسها وترفع قراراً لمجلس الإدارة كما في إجراءات ال Attic، فينتقل المشروع إلى ال Attic، وتقول صفحة ال Attic إنه غير مخول بتطوير المشاريع التي ينقل إليها أو إصدار نسخ منها، أي أن الكود يبقى متاحاً، ولكن لا توجد إصلاحات أمنية بعد ذلك، ولذلك يربط ال Attic بأي نسخة بديلة يكملها مجتمع خارج المؤسسة.

وقد يتساءل البعض: هل وجود المشروع في الحاضنة يعني أنه سيئ؟ والإجابة لا، فالحاضنة تقيس طريقة العمل وليس جودة الكود، وكثير من المشاريع تدخلها وهي مستخدمة في الإنتاج منذ سنوات كما رأيت مع Kafka وNiFi، ولكن الحاضنة تخبرك أن المجتمع ما زال يتكون، وأن 85 مشروعاً تقاعدت قبل أن تتخرج، لذلك احسب حساب ذلك إذا كان المشروع الذي تختاره ما زال Podling.

كيف تفحص صحة مشروع Apache قبل أن تعتمد عليه؟

الاسم Apache على المشروع لا يضمن أنه حي، فقد رأيت أن 96 لجنة تقاعدت، ورأيت OpenOffice يصدر تصحيحاً واحداً في السنة، والصورة التالية تبين أربع علامات تقرؤها بنفسك:

أربع بطاقات مرقمة من اليمين: Releases متى صدر آخر إصدار في downloads.apache.org، وPMC and committers كم شخصاً في اللجنة ومتى انضم آخرهم، وCommits and lists هل يدمج الكود ويرد المشرفون في القوائم، وAttic هل المشروع في قائمة المشاريع المتقاعدة، وتحتها مخرج السكربت: kafka تأسست 2012-11 ولجنتها 44 وآخر إصدار قبل 10 أيام، وopenoffice تأسست 2012-10 ولجنتها 27 وآخر إصدار قبل 363 يوماً، وmesos تقاعد في 2025-08
أربع علامات لصحة المشروع، ومثال من مخرج السكربت
  1. الإصدارات Releases: كل إصدار رسمي ينشر في downloads.apache.org، فإذا مرت سنة دون إصدار فهذا سؤال يجب أن تسأله.
  2. اللجنة PMC وأصحاب صلاحية الكتابة: صفحة كل لجنة في دليل اللجان تعرض أعضاءها وتاريخ انضمام كل منهم، واللجنة التي لم يدخلها أحد منذ سنوات علامة على مجتمع يتقلص.
  3. ال Commits والقوائم البريدية Mailing Lists: انظر في مستودع المشروع على GitHub وفي أرشيف قائمة dev، فهل تدمج التعديلات ويرد أحد على الأسئلة؟ وكل لجنة ترسل تقريراً إلى مجلس الإدارة كل ربع سنة كما تقول صفحة التقارير، والتقارير منشورة في محاضر اجتماعات المجلس، وفيها يكتب المشروع بنفسه عن نشاطه ومشكلاته.
  4. قائمة ال Attic: إذا وجدت المشروع في قائمة المشاريع المتقاعدة فخطط للانتقال منه.

سكربت يقرأ البيانات العامة للمؤسسة

بدل أن تفتح الصفحات واحدة واحدة، فإن موقع projects.apache.org ينشر بياناته في ملفات JSON عامة يحدثها يومياً، والسكربت التالي يقرؤها ويطبع ثلاثة أشياء: أرقام المؤسسة بنفس الطريقة التي يحسبها الموقع، وأكثر الفئات انتشاراً، وفحصاً سريعاً للجان التي تكتب أسماءها في سطر الأوامر. والسكربت يحتاج Node.js 18 أو أحدث فقط، ولا يحتاج أي مكتبة:

// asf-catalogue.mjs: counts Apache projects from the public data of projects.apache.org
// Usage: node asf-catalogue.mjs [pmc ...]      (Node 18 or later, no packages needed)
const BASE = 'https://projects.apache.org/json/foundation/';
const get = async (f) => {
    const r = await fetch(BASE + f);
    if (!r.ok) throw new Error(`${f}: HTTP ${r.status}`);
    return r.json();
};

const [committees, projects, podlings, retired, releases] = await Promise.all(
    ['committees.json', 'projects.json', 'podlings.json', 'committees-retired.json', 'releases.json'].map(get));

// 1) The same counts the front page of projects.apache.org shows
const pmcIds = new Set(committees.map(c => c.id));
const active = Object.values(projects).filter(p => p.pmc !== 'attic' && p.pmc !== 'incubator');
const withDoap = new Set(Object.values(projects).map(p => p.pmc));
const noDoap = [...pmcIds].filter(id => !withDoap.has(id)).length;
console.log(`committees (PMCs):      ${pmcIds.size}`);
console.log(`projects (active PMCs): ${active.length + noDoap}`);
console.log(`podlings in incubator:  ${Object.keys(podlings).length}`);
console.log(`retired committees:     ${retired.length}`);

// 2) Projects by category (a project may declare several categories in its DOAP file)
const count = {};
for (const p of active) for (const c of p.category || []) {
    if (c === 'retired') continue;
    const k = c === 'no-tlp-doap' ? '(no DOAP file)' : c.toLowerCase();
    count[k] = (count[k] || 0) + 1;
}
console.log('\ntop categories:');
for (const [k, n] of Object.entries(count).sort((a, b) => b[1] - a[1]).slice(0, 12))
    console.log(`  ${k.padEnd(18)} ${String(n).padStart(3)}`);

// 3) A quick health check for the committees given on the command line
const ids = process.argv.slice(2);
if (ids.length) {
    console.log('\npmc            established  pmc-size  latest-release  days-ago');
    const today = Date.now();
    for (const id of ids) {
        const c = committees.find(x => x.id === id);
        const gone = retired.find(x => x.id === id);
        if (!c) { console.log(`${id.padEnd(15)}${gone ? `retired ${gone.retired} (see attic.apache.org)` : 'not found'}`); continue; }
        const latest = Object.values(releases[id] || {}).sort().at(-1);
        const days = latest ? Math.round((today - Date.parse(latest)) / 864e5) : '-';
        console.log(`${id.padEnd(15)}${c.established.padEnd(13)}${String(Object.keys(c.roster).length).padStart(8)}  ${(latest || '-').padEnd(16)}${String(days).padStart(8)}`);
    }
}

الآن نشغل السكربت ونطلب فحص ست لجان، منها مشروع نشط جداً ومشروع بطيء ومشروع متقاعد:

node asf-catalogue.mjs httpd kafka superset openoffice logging mesos

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

committees (PMCs):      216
projects (active PMCs): 308
podlings in incubator:  24
retired committees:     96

top categories:
  library             94
  big-data            54
  (no DOAP file)      49
  network-server      32
  database            30
  xml                 24
  network-client      21
  build-management    18
  web-framework       17
  content             15
  cloud               12
  http                12

pmc            established  pmc-size  latest-release  days-ago
httpd          1995-02            58  2026-10-01             7
kafka          2012-11            44  2026-09-28            10
superset       2020-11            40  2026-09-30             8
openoffice     2012-10            27  2025-10-10           363
logging        2003-12            19  2026-10-01             7
mesos          retired 2025-08 (see attic.apache.org)

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

  • الأرقام الأربعة الأولى تحسب بنفس منطق الصفحة الرئيسية لموقع projects.apache.org، والرقم 216 يشمل لجان خدمات مثل لجنة الحاضنة ولجنة ال Attic ولجنة تطوير المجتمع، ولذلك يختلف قليلاً عن عدد المشاريع في apache.org، والرقم 308 أكبر لأن اللجنة الواحدة قد تدير أكثر من مشروع، مثل Commons التي تدير عشرات المكتبات.
  • الفئات يكتبها كل مشروع في ملف DOAP، فالمكتبات Library في المقدمة لأن مشاريع مثل Commons تسجل كل مكتبة وحدها، والسطر (no DOAP file) هو 49 مشروعاً لم تكتب ملف وصف أصلاً، فلا تعتمد على هذه الفئات كتصنيف دقيق، وإنما كصورة عامة.
  • عمود pmc-size هو عدد أعضاء اللجنة في ملف اللجان، وليس عدد كل المساهمين في الكود.
  • عمود latest-release مأخوذ من ملف releases.json الذي يبنيه الموقع من ملفات التنزيل الحالية، فيظهر الفرق بوضوح بين Kafka التي أصدرت قبل عشرة أيام وOpenOffice التي مرت عليها سنة تقريباً.
  • تاريخ تأسيس httpd هو 1995-02 مع أن المؤسسة نفسها تأسست في 1999، والسبب أن البيانات تسجل بداية Apache Group كما ذكرنا في أول المقال.
  • Mesos لم يعد في ملف اللجان، فيبحث السكربت عنه في ملف اللجان المتقاعدة ويخبرك بتاريخ تقاعده.

ولنكسر السكربت عمداً لنفهم شكل البيانات، فإذا كتبت اسم المكتبة التي تعرفها بدل اسم اللجنة:

node asf-catalogue.mjs log4j logging
pmc            established  pmc-size  latest-release  days-ago
log4j          not found
logging        2003-12            19  2026-10-01             7

والسبب أن البيانات مرتبة حسب اللجنة PMC وليس حسب المنتج، و Log4j منتج تديره لجنة اسمها logging، وكذلك Commons Lang تديره لجنة commons، لذلك إذا ظهر لك not found فابحث عن اسم اللجنة في دليل اللجان ثم أعد الأمر.

كيف تختار من هذه الخريطة؟

  • ابدأ من المشكلة وليس من الاسم: وجود Kafka وSpark في وصف وظيفة لا يعني أن مشروعك يحتاجهما، فقاعدة بيانات واحدة وطابور بسيط يكفيان أغلب الأنظمة في بدايتها.
  • افحص الصحة قبل الاعتماد: شغل السكربت أعلاه أو افتح صفحة اللجنة، وانظر إلى تاريخ آخر إصدار وحجم اللجنة، وتأكد أن المشروع ليس في ال Attic.
  • اقرأ تاريخ المشروع: المشروع الذي جاء من شركة واحدة مثل LinkedIn أو Alibaba قد يبقى أغلب مطوريه فيها لسنوات، وهذا ليس عيباً، ولكنه يخبرك من يحدد اتجاه المشروع فعلاً، وقد شرحنا كيف تقرأ ذلك في قائمة التحقق في مقال الحوكمة.
  • الرخصة واحدة وواضحة: كل مشاريع Apache برخصة Apache License 2.0، فلا توجد مفاجأة في الرخصة عند الانتقال من مشروع إلى آخر داخل المؤسسة، وهذه من أهم الأسباب التي تجعل الشركات تطمئن إليها.

الخلاصة

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

  • Apache مؤسسة غير ربحية وليست شركة، بدأت في 1995 بمجموعة مطورين حول سيرفر الويب، وتأسست رسمياً في 1999، وتستضيف اليوم أكثر من 290 مشروعاً برخصة واحدة هي Apache License 2.0.
  • أغلب مشاريعها جاءت من شركات وجامعات: Kafka وPinot من LinkedIn، وCassandra من Facebook، وSpark من Berkeley، وNiFi من NSA، وDoris من Baidu، وRocketMQ من Alibaba، وIceberg من Netflix، وSuperset وAirflow من Airbnb.
  • أكبر مجموعة هي البيانات الضخمة وبث الأحداث، ويمكن ترتيبها على مسار واحد من النقل إلى التخزين إلى المعالجة إلى التقارير، ولكن أغلب الفرق تحتاج جزءاً صغيراً منه.
  • كل مشروع يمر بالحاضنة ثم يصبح مستقلاً ثم قد يتقاعد في ال Attic، والمشروع المتقاعد لا توجد فيه إصلاحات أمنية جديدة.
  • OpenOffice ما زال حياً ولكنه بطيء جداً، والخيار العملي اليوم هو LibreOffice.
  • افحص صحة أي مشروع قبل أن تعتمد عليه: آخر إصدار، وحجم اللجنة، والنشاط في المستودع والقوائم، وقائمة ال Attic، والبيانات كلها عامة ويقرؤها سكربت صغير.
دليلمن يدير المشروع مفتوح المصدر؟ نماذج الحوكمة Governanceمن يقرر في مشروع يساهم فيه آلاف الأشخاص، ومن يستطيع تغيير رخصته، وما الذي تفحصه قبل أن تعتمد على أي مشروع.دليلما هي البرمجيات مفتوحة المصدر؟ القصة وأشهر الرخصكيف بدأت البرمجيات الحرة والمفتوحة، وما الفرق بين الحر والمجاني، وكيف تعرف ما تسمح به رخصة أي مشروع قبل أن تبني عليه.دليلالطابور Queue أم بث الأحداث Event Streaming؟ما يحدث للرسالة بعد قراءتها هو الفرق بين طابور مثل RabbitMQ وسجل أحداث مثل Kafka، ومنه تعرف أيهما يناسب مشروعك.دليلكيف يعمل البحث؟ الفهرس المعكوس Inverted Index وترتيب النتائجلماذا لا يكفي LIKE للبحث في تطبيقك، وكيف يجد محرك البحث الكلمات في جزء من الثانية ويرتب أهم النتائج في الأعلى.دليلApache Superset: تحليلات ولوحات تقارير على سيرفرككيف تثبت Apache Superset على سيرفرك، وتبني منه مقاييس ورسوماً ولوحة تقارير من بيانات شركتك.دليلأدوات البناء Build Tools وماذا يحدث عندما تبني مشروعكما الذي يحدث بين ضغطة البناء والملف الناتج، ولماذا ينجح البناء على جهازك ويفشل على سيرفر CI، ومتى يعطيك نفس النتيجة مرتين.دليلمشاريع مؤسسة Eclipse: من Jakarta EE إلى Mosquittoما الذي تستضيفه مؤسسة Eclipse غير المحرر الذي تعرفه، ولماذا تغيرت حزم Java من javax إلى jakarta.دليلمشاريع CNCF: خريطة أدوات Cloud Nativeماذا تعني مراحل Sandbox وIncubating وGraduated في CNCF، وما الذي يحله كل مشروع متخرج، وكيف يختار فريق صغير منها ما يحتاجه فقط.

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

  • أكتوبر 2026: كتابة المقال، وقراءة تاريخ كل مشروع من صفحته أو من اقتراح دخوله إلى الحاضنة، وتشغيل سكربت asf-catalogue.mjs على Node.js 22.14.0 على بيانات projects.apache.org.
نشرة عرب رووت | ArabRoot

معرفة تستحق مكاناً في بريدك.

مقالات مختارة وأدوات مفيدة وأفكار لمشروعك القادم، في رسالة واحدة كل أسبوع.

يمكنك إلغاء الاشتراك متى شئت. الخصوصية

تم استلام طلبك. افتح بريدك واضغط رابط التأكيد لإتمام الاشتراك.