# جنو أرك

جنو أرك في مجال الحوسبة هو نظام للتحكم الموزع في تعديل البرمجيات وجزء من مشروع جنو ويخضع لرخصة جنو العمومية. يستخدم النظام في تتبع التعديلات التي تضاف لشجرة الكود source tree ومساعدة المبرمجين على دمج أو التعامل مع التعديلات التي يقوم بها العديد من الأشخاص في أوقات مختلفة. منذ عام 2009 توقفت عملية تطوير نظام جنو أرك فيما عدا إصلاح الثغرات الأمنية ولا يُنصح باستخدامه.

## خصائصه

بما أن النظام موزع وغير مركزي فكل نسخة معدلة باستخدام أرك تحصل على تعريف ID لا يتكرر على مستوى العالم، يمكن استخدام هذا التعريف في بيئة العمل الموزعة لدمج التعديلات بسهولة أو انتقاء تعديلات معينة من مصادر مختلفة تماما. غير مركزي يعني أنه لا داعي لوجود خادم مركزي يحتاج المطورون لتصريح بالدخول عليه حتى يشاركوا في البرنامج المراد تعديله. كما هو الحال في الأنظمة الأخرى يتم تخزين نسخة كاملة من المشروع للقراءة فقط على مستودع رسمي سواء باستخدام HTTP أو FTP أو SFTP ثم يسمح للمطورين بإضافة تعديلاتهم ونشرها في أرشيف (مستودع) عام خاص بهم حتى يتمكن كبير المطورين من دمج مجموعات التعديلات changesets يدويا في المستودع الرسمي. لمحاكاة أسلوب عمل نظام التحكم المركزي بإمكان كبير المطورين إتاحة الوصول إلى شل shell الخادم (SSH) أو التصريح بالتعديل (FTP، SFTP، WebDAV) على الخادم مما يسمح للمستخدمين المصرح لهم بالقيام بالتعديلات على الخادم المركزي، ولكن في الغالب هناك ديكتاتور يتولى عملية دمج تعديلات المشاركين في المشاريع التي تدار بواسطة جنو أرك. يحتوي جنو أرك على العديد من الخصائص الأخرى:

### التعديلات الذرية Atomic commits

إما أن تنفذ عملية التعديل بالكامل أو لا تنفذ على الإطلاق. يجب أن تكون شجرة الكود سليمة قبل بدء أي عملية تعديل ولا ترى التعديلات إلا بعد اكتمالها، إن حدثت مقاطعة لهذه العملية تبقى التعديلات خفية ثم يتم التراجع عن عملية التعديل بأكملها قبل بدء أي عملية جديدة، تحول هذه الطريقة دون فساد أرشيف الكود والنسخ السليمة للمستخدمين الآخرين.

### استخدام مجموعات التعديلات changesets

يتتبع نظام أرك مجموعات التعديلات – المشابهة للباتشات patches - بدلا من تتبع الملفات بشكل منفصل (كما يفعل CVS). كل مجموعة تعديلات تصف الفرق بين شجرة كود source tree وأخرى، لذا يمكن استخدام مجموعة التعديلات للوصول من نسخة إلى أخرى. يُنصح المطورون بإجراء عملية تعديل واحدة لكل خاصية أو إصلاح عيب bugfix.

### تفرع سهل

عملية التفرع branching تتسم بالكفاءة ويمكن أن يدخل فيها عدد من الأرشيفات المختلفة. ببساطة يعلن الفرع (أو «تاج» tag) عن النسخة الذي جاء منها وتستمر عملية التطوير من هنا.

### دمج احترافي

نظرا لاحتفاظ النظام بسجلات دائمة لكل النسخ الأصلية والنسخ المدمجة تستطيع عملية الدمج معرفة أي فرع يحتوى أي باتش تعديلات وبإمكانها القيام بعملية دمج من ثلاثة مصادر مختلفة مبنية على نسخة أصلية واحدة.

### توقيعات مشفرة

تحفظ مجموعة التعديلات بمصاحبة هاش لمنع أي فساد محتمل للملفات. باستخدام برنامج خارجي لتوقيع الملفات (مثل جنو بي جي $^{[لغاتأخرى]}$‏ أو أي برنامج مماثل لبي جي بي) يمكن توقيع ملفات الهاش أيضا لمنع أي تعديل غير مسموح به إذا تعرض الأرشيف للاختراق.

### إعادة التسمية

يمكن إعادة تسمية كل الملفات والمجلدات بسهولة، ويستخدم معهم تعريفات فريدة بدلا من الأسامي، بالتالي يمكن الاحتفاظ بتاريخ كل العمليات ودمج التعديلات بدون أي مشاكل حتى لو اختلفت أسامي الملفات في الأفرع.

### تتبع البيانات الوصفية metadata.

يتم تتبع تصاريح الملفات. ويدعم النظام الوصلات الرمزية symbolic links ويتتبعها كما يتتبع الملفات والمجلدات.

## خلفية المشروع والمسئولين عنه
### جنو أرك الإصدار 1 وتلا tla

توماس لورد هو أول من بدأ في بناء نظام جنو أرك والمسئول الأول عنه وبدأ في هذا المشروع عام 2001. الأمر المستخدم لتعديل مستودعات أرك كان tla اختصارا لتوماس لورد أرك. بدأ لورد المشروع كمجموعة من برامج الشل كبديل عن نظام CVS،. وأصبح أرك جزءً من مشروع جنو في 2003.
إنشق عن مشروع جنو أرك أكثر من مشروع مما أدى إلى تخلي شركة كانونيكال المحدودة عن مشروع باز Bazوتخلي والتر لاندري عن مشروع أركس ArX المنشقين كلاهما عن مشروع أرك. كلا المشروعين أثارا رد فعل عنيف: مشروع أركس نشأ نتيجة لخلاف حول أسلوب الإدارة وانتقد لورد بشدة أسلوب إعلان كانونيكال عن مشروع باز.
أعلن لورد في أغسطس 2005 استقالته كمسئول عن مشروع جنو أرك وأوصى بتبني باز ليصبح مشروع جنو أرك الرئيسي،. إلا أن هذا لم يحدث: تخلت شركة كانونيكال عن مشروع باز المنشق عن مشروع أرك لصالح مشروع بازار المنفصل، وأعلنت الشركة في 2006 تخليها عن مشروع باز بعد الإصدار 1.5. في أكتوبر 2005 أعلن أندي تاي عن قبول لورد ومؤسسة البرمجيات الحرة لعرضه بتولي مشروع جنو أرك،. قام تاي بعد ذلك بدمج العديد من مزايا باز في تلا، ولكنه أعلن في 2008 عن توقف العمل على مشروع تلا لأنه لم يعد قادرا على المنافسة مع أنظمة التحكم الأخرى.

### ريفك

ريفك كان نموذجا أوليا لنظام تحكم في تعديل البرمجيات انتوى توماس لورد أن يجعله الإصدار 2.0 من جنو أرك وصممه ليكون مختلفا اختلافا جذريا عن تلا ويستمد العديد من أفكار نظام جت Git. أعلن لورد عن ريفك في يونيو 2005 , وصدرت النسخة التجريبية الأولى في يوليو والأخيرة في أغسطس قبل إعلان لورد عن استقالته. كان ريفك به 10 أوامر رئيسية فقط وانتوى لورد أن يزيل كل مجالات الأسامي namespacesالتقييدية والأساليب المعقدة في تسمية الملفات وانتوى زيادة السرعة.
الإصدار التجريبي الأخير 0.0x2 من ريفك متاح من عام 2008، وما زال لورد مهتما ببعض أفكار جنو أرك ولكنه لا يمتلك المصادر لاستكمال العمل في مشروع ريفك.

## الانتقادات

ربما كان أشد انتقاد وجه لمشروع جنو ارك هو صعوبة تعلمه حتى بالنسبة للمتمرسين في استخدام أنظمة إدارة إعداد البرمجيات SCM الأخرى، تحديدا جنو أرك به عدد ضخم من الأوامر وهذا قد يخيف المستخدمين الجدد، كما يمكن القول أن تصميم النظام يفرض بشدة أسلوب لورد الخاص في التحكم في تعديل البرمجيات.
وينتقد آخرون جنو أرك لاستخدامه أساليب غريبة في تسمية الملفات ("FunkyFileNames") قد تؤدي إلى صعوبة استخدام الأسامي في السكربتات –بعض برامج الشل - وصعوبة نقل هذه البرامج للعمل على أنظمة أخرى غير نظام يونيكس، كما انتقد جنو أرك لبطئه الناتج عن رغبة مصمميه في تقليل تعقيد أكواده.