من UNIX إلى Linux: التاريخ الذي يفسّر كل شيء
خروج

الدرس 1 من 7 · التاريخ

من Multics إلى UNIX (1964-1973)

30 د Rocky Linux 9

الهدف

أن تفهم كيف وُلد UNIX، جدّ Linux، ولماذا ما زالت أفكار مبتكريه، التي يزيد عمرها على خمسين سنة، تفسّر الطريقة التي ستعمل بها اليوم على خادم (serveur) يعمل بنظام Linux.

الخلاصة

  • Multics (انطلق سنة 1964) كان مشروع نظام طموحًا جدًّا؛ وقد انسحبت منه مختبرات Bell التابعة لشركة AT&T سنة 1969.
  • في السنة نفسها كتب كين تومسون (Ken Thompson) نظامًا صغيرًا على حاسوب PDP-7: تلك كانت بداية UNIX.
  • ابتكر دينيس ريتشي (Dennis Ritchie) لغة C؛ وفي سنة 1973 أُعيدت كتابة قلب UNIX بلغة C، فأصبح قابلًا للنقل (portable) من حاسوب إلى آخر.
  • ظهرت الأنابيب (|) سنة 1973: نركّب برامج صغيرة لننجز بها أعمالًا كبيرة.
  • فلسفة UNIX — «البرنامج يؤدي مهمة واحدة ويتقنها»، و«كل شيء ملف»، و«النص لغة مشتركة» — ما زالت في صميم Linux.

1. السياق: حواسيب بحجم غرفة

في بداية الستينيات كان الحاسوب يشغل قاعة كاملة، ويكلّف ملايين الدولارات، ولا يخدم إلا شخصًا واحدًا في كل مرة. كان المبرمج يُعدّ برنامجه على بطاقات مثقّبة، ويسلّمها في الشبّاك، ثم يعود لاستلام النتيجة… في اليوم التالي. فاصلة منسيّة واحدة كانت كافية لضياع يوم كامل.

الفكرة التي كانت تشغل الباحثين آنذاك تسمّى تقاسم الوقت (time-sharing): ينتقل الحاسوب بسرعة كبيرة من مستخدم إلى آخر، بسرعة تجعل كل واحد يشعر بأن الآلة له وحده، أمام طرفيّته (terminal) الخاصة.

وهذا بالضبط ما يفعله خادم Linux اليوم: عشرات الأشخاص ومئات البرامج يستعملونه «في الوقت نفسه». عندما تكتب who أو ps خلال هذه الدورة، سترى الإرث المباشر لهذه الفكرة.

2. Multics: المشروع الكبير المخيّب للآمال (1964-1969)

في سنة 1964 أطلق ثلاثة شركاء مشروع Multics (Multiplexed Information and Computing Service):

الشريك الدور
MIT (مشروع MAC) البحث الجامعي
General Electric العتاد (الحاسوب GE-645)
مختبرات Bell مختبر البحث التابع لشركة AT&T، مشغّل الهاتف الأمريكي

أراد Multics أن يفعل كل شيء: أن يخدم مئات المستخدمين، وأن يحمي كل ملف، وأن يعمل دون توقف أبدًا، مثل شبكة الكهرباء. وكانت كثير من أفكاره ممتازة: شجرة من المجلدات، وصلاحيات وصول على الملفات، ومفسّر أوامر (shell) هو برنامج كسائر البرامج.

لكن المشروع تأخّر، وأصبح ثقيلًا ومكلفًا. وفي سنة 1969 قرّرت مختبرات Bell الانسحاب منه. استمر Multics في أماكن أخرى (أُوقف آخر نظام Multics عامل سنة 2000)، لكن باحثي مختبرات Bell وجدوا أنفسهم بلا مشروع… ورؤوسهم مليئة بالأفكار الجيدة.

3. سنة 1969: كين تومسون وحاسوب PDP-7

أراد كين تومسون أن يواصل العمل على نظام خاص به. فاستعاد حاسوب PDP-7 من صنع شركة DEC، وهو حاسوب صغير كان متجاوزًا حتى في ذلك الوقت، ومركونًا في زاوية من زوايا المختبر.

يُروى كثيرًا أن تومسون أراد أيضًا أن يشغّل عليه لعبة كتبها بنفسه، هي Space Travel، وهي محاكاة للمجموعة الشمسية. ولهذا كان يحتاج إلى نظام ملفات، ووسيلة لتشغيل البرامج، ومحرّر نصوص، ومفسّر أوامر. وفي صيف 1969 كتب ذلك كله في بضعة أسابيع، بلغة التجميع (assembleur).

وسرعان ما انضم إليه دينيس ريتشي، ثم زملاء آخرون: دوغ ماكلروي (Doug McIlroy)، وجو أوسانا (Joe Ossanna)، وبراين كيرنيغان (Brian Kernighan)…

من أين جاء الاسم؟ اقترح أحد الزملاء (يُنسب الاقتراح عادةً إلى براين كيرنيغان) اسم «Unics»، في إشارة طريفة إلى Multics: فبينما أراد Multics أن يفعل كل شيء بصيغة «multi» (المتعدّد)، يكتفي هذا النظام الصغير بفعل الأشياء ببساطة. ثم صار الاسم يُكتب UNIX.

تفصيل سيفيدك: أنظمة UNIX و Linux تحسب الوقت بالثواني منذ 1 يناير 1970 على الساعة 0 (UTC)، وهو تاريخ اختير في تلك الحقبة. يسمّى هذا التاريخ «عصر UNIX» (epoch). جرّب date +%s: العدد الكبير الذي يظهر هو عدد الثواني التي مضت منذ ذلك اليوم.

4. من PDP-7 إلى PDP-11: UNIX يجد مكانه (1970-1972)

للحصول على حاسوب أقوى، قطع الفريق وعدًا للإدارة: كتابة نظام لمعالجة النصوص لمصلحة براءات الاختراع في AT&T. وفي 1970-1971 انتقل UNIX إلى حاسوب PDP-11، وهو حاسوب أكثر انتشارًا بكثير. فأصبحت مصلحة براءات الاختراع أول «زبون» لنظام UNIX.

في نوفمبر 1971 صدر أول دليل لنظام UNIX (الإصدار الأول First Edition)، ثم توالت الإصدارات التالية كل بضعة أشهر. وشكل هذا الدليل — صفحة لكل أمر، فيها NAME و SYNOPSIS و DESCRIPTION — هو شكل صفحات man التي ستقرؤها على Linux.

5. لغة C: القرار الذي غيّر كل شيء (1972-1973)

في ذلك العصر كان نظام التشغيل يُكتب بلغة التجميع، وهي لغة خاصة بكل طراز من المعالجات. والنتيجة: نظام مكتوب لحاسوب PDP-7 لا يعمل إلا على PDP-7. وتغيير الحاسوب يعني إعادة كتابة كل شيء.

ونسب لغة C يشبه شجرة عائلة:

BCPL (Martin Richards, Cambridge, 1966-1967)
  └── B (Ken Thompson, 1969-1970) — نسخة مبسّطة من BCPL
        └── C (Dennis Ritchie, 1971-1973) — لغة B مع أنواع البيانات

ابتكر ريتشي لغة C في بداية السبعينيات. وهي قريبة من الآلة بما يكفي لكتابة نظام تشغيل، وعامّة بما يكفي لتُترجَم (compilée) على معالجات أخرى.

وفي سنة 1973 أعاد الفريق كتابة نواة UNIX بلغة C (الإصدار الرابع Fourth Edition، نوفمبر 1973). وكان ذلك سابقة بهذا الحجم: لم يبقَ بلغة التجميع إلا جزء صغير. ومنذ ذلك الحين أصبح نقل UNIX إلى حاسوب جديد يعني، في الأساس، كتابة مترجم (compilateur) للغة C لتلك الآلة.

وهذا القرار يفسّر لماذا يعمل Linux اليوم بالسهولة نفسها على خادم Intel وعلى هاتف ARM وعلى حاسوب فائق: فنواته هي أيضًا مكتوبة أساسًا بلغة C.

وفي سنة 1978 نشر كيرنيغان وريتشي كتاب The C Programming Language، المرجع الذي ما زال المبرمجون يسمّونه «K&R».

6. الأنابيب: فكرة دوغ ماكلروي (1973)

كان دوغ ماكلروي، رئيس الفريق، يطالب منذ سنوات بوسيلة لوصل البرامج بعضها ببعض، مثل خراطيم السقي. فنفّذها تومسون في ليلة واحدة سنة 1973 (الإصدار الثالث Third Edition): إنه الأنبوب (pipe)، ويُرمز له بـ |.

مثال: تريد أن تعرف كم مستخدمًا على خادمك يستعمل الصدفة bash.

# بدون أنبوب، سنحتاج إلى برنامج خاص لهذا السؤال بالتحديد.
# مع الأنبوب، نركّب ثلاث أدوات صغيرة:
cat /etc/passwd | grep bash | wc -l
#   cat  : يقرأ ملف الحسابات
#   grep : يحتفظ بالأسطر التي تحتوي على « bash »
#   wc -l: يعدّ الأسطر المتبقية

لم يُكتب أيّ من هذه البرامج الثلاثة للإجابة عن هذا السؤال. لكنها مجتمعةً تجيب عنه. وهنا تكمن قوة UNIX كلها.

7. فلسفة UNIX في أربع قواعد

لخّص ماكلروي وآخرون هذه المبادئ لاحقًا؛ وهي ما زالت أفضل بوصلة لفهم Linux.

المبدأ معناه مثال على Linux
البرنامج يؤدي مهمة واحدة ويتقنها أدوات صغيرة ومتخصصة بدل برنامج عملاق ls يعرض، sort يرتّب، grep يبحث
البرامج تعمل معًا مُخرَج أحدها يصبح مُدخَل الآخر ps aux | grep httpd
النص هو اللغة المشتركة الإعدادات والمبادلات بنص مقروء /etc/passwd، /etc/hosts، ملفات السجلات (logs)
كل شيء ملف الأقراص والطرفيات ومعلومات النواة: نقرؤها ونكتب فيها كما نفعل مع الملفات /dev/sda، /proc/version، /proc/cpuinfo
cat /proc/cpuinfo     # المعالج، معروضًا كملف نصي بسيط
cat /proc/version     # إصدار النواة، بالطريقة نفسها
ls -l /dev/null       # « ملف » خاص يبتلع كل ما يُرسَل إليه

وبالنسبة إلى مدير الأنظمة، النتيجة ملموسة جدًّا: كل شيء تقريبًا يُضبط بتعديل ملفات نصية، وكل شيء تقريبًا يُشخَّص بقراءة ملفات نصية. لا حاجة إلى أدوات رسومية.

8. 1973-1974: UNIX يخرج من المختبر

في أكتوبر 1973 قدّم ريتشي وتومسون نظام UNIX في مؤتمر جامعي حول أنظمة التشغيل (SOSP). ونُشر المقال في يوليو 1974 في مجلة Communications of the ACM. فاكتشفت الجامعات هذا النظام الأنيق وطلبت تجربته.

غير أن AT&T، بسبب اتفاق لمكافحة الاحتكار وقّعته سنة 1956 مع الحكومة الأمريكية، لم يكن يحق لها الاتجار في المعلوميات. فكانت توزّع UNIX على الجامعات بثمن رمزي، مع الشيفرة المصدرية (code source). فدرسه آلاف الطلبة وعدّلوه وحسّنوه. وهذه نقطة انطلاق الدرس التالي: عائلة UNIX الكبيرة.

في سنة 1983 نال تومسون وريتشي جائزة تورينغ (Turing)، وهي بمثابة جائزة نوبل في المعلوميات، تقديرًا لنظام UNIX. توفي دينيس ريتشي في أكتوبر 2011؛ أما كين تومسون فقد شارك بعد ذلك، في شركة Google، في ابتكار لغة Go.

9. الخط الزمني للدرس

1964  انطلاق Multics (MIT و General Electric ومختبرات Bell)
1969  مختبرات Bell تنسحب من Multics — تومسون يكتب UNIX على PDP-7
1970  الانتقال إلى PDP-11 — اسم « UNIX » يفرض نفسه
1971  أول دليل لنظام UNIX (First Edition، نوفمبر)
1972  ولادة لغة C (دينيس ريتشي)
1973  الأنابيب « | » — إعادة كتابة النواة بلغة C (Fourth Edition)
1974  مقال في Communications of the ACM: UNIX يصبح معروفًا
1983  جائزة تورينغ لتومسون وريتشي

أفكار شائعة خاطئة

  • «صمّمت شركة كبرى UNIX لتبيعه.» لا: إنه مشروع باحثَين اثنين، شبه سرّي في بدايته، على آلة مستعادة. بل إن AT&T لم يكن بإمكانها حتى أن تبيعه.
  • «Linux نسخة من UNIX.» ليس تمامًا. Linux يشبه UNIX ويحترم قواعده، لكنه لا يحتوي على أي سطر من شيفرة UNIX: لقد أُعيدت كتابته من الصفر (الدرس 0.4).
  • «كل شيء ملف» تعني أن كل شيء مخزّن على القرص. لا: الملف /proc/version غير موجود على القرص. النواة تصنعه في اللحظة التي تقرؤه فيها. ما يشبه الملف هو طريقة الوصول إليه.
  • «لغة C لغة قديمة مهجورة.» نواة Linux، ومعظم الأدوات الأساسية، وقواعد بيانات مثل PostgreSQL، كلها مكتوبة بلغة C. وما زالت من أكثر اللغات استعمالًا في العالم.

التطبيق العملي (Lab)

آلتك الأولى تنتظرك في الطرفية، بنظام Rocky Linux 9. ستجعلها تتكلم، بالعادات الموروثة عن UNIX:

uname -s                  # اسم النظام
cat /proc/version         # « كل شيء ملف »: النواة تصف نفسها في ملف
cat /etc/os-release       # بطاقة تعريف التوزيعة
cat /etc/os-release | wc -l   # أنبوب: نقرأ، ثم نعدّ

أنجز المهام: حفظ اسم النظام، ونسخ وصف النواة، وعدّ أسطر باستعمال أنبوب، ثم إيجاد سنة ولادة UNIX. بعد ذلك انقر على تحقّق: الموقع يراقب عملك تلقائيًّا.


اختبار قصير

  1. ما المؤسسات الثلاث التي كانت وراء مشروع Multics؟
  2. على أي حاسوب كتب كين تومسون أول نسخة من UNIX، وفي أي سنة؟
  3. لماذا كانت إعادة كتابة نواة UNIX بلغة C (سنة 1973) حاسمة؟
  4. ماذا يفعل الأمر cat /etc/passwd | grep bash | wc -l، وأي مبدأ من مبادئ UNIX يوضّحه؟
  5. لماذا كانت AT&T توزّع UNIX على الجامعات بدل أن تبيعه؟
الأجوبة
  1. MIT، و General Electric، ومختبرات Bell (AT&T).
  2. على حاسوب PDP-7 من صنع DEC، سنة 1969.
  3. بعد كتابته بلغة C أصبح UNIX قابلًا للنقل: لتشغيله على آلة أخرى يكفي في الأساس مترجم للغة C، بدل إعادة كتابة كل شيء بلغة التجميع.
  4. يعدّ حسابات النظام التي يحتوي سطرها على « bash ». ويوضّح مبدأ تركيب برامج صغيرة متخصصة يربط بينها أنابيب.
  5. كان اتفاق لمكافحة الاحتكار يعود إلى سنة 1956 يمنع AT&T من الاتجار في المعلوميات؛ فكانت تنشره بثمن رمزي مع شيفرته المصدرية.

المصادر المرجعية: مقالات D. M. Ritchie و K. Thompson المذكورة في رأس الدرس، و Debian Reference (رخصة حرة). نص أصلي من MasterLinux.

تمارين تطبيقية

تُنجَز على Rocky Linux 9

الطرفية عبر الإنترنت قادمة قريبًا. في انتظار ذلك، أنجِز هذه المهام على جهازك بنظام لينكس أو على آلة افتراضية أو WSL.

  1. اسأل النظام عن اسمه بالأمر uname -s واحفظ الجواب في الملف /root/systeme.txt
    عرض تلميحالعلامة > ترسل ما يعرضه الأمر إلى ملف: uname -s > /root/systeme.txt
    عرض الحل
    uname -s > /root/systeme.txt

    التحقق : grep -qx Linux /root/systeme.txt

  2. «كل شيء ملف»: النواة تصف نفسها في الملف /proc/version. انسخ محتواه إلى /root/noyau.txt
    عرض تلميحالأمر cat يقرأ ملفًا؛ أضف > /root/noyau.txt لحفظ ما يعرضه.
    عرض الحل
    cat /proc/version > /root/noyau.txt

    التحقق : grep -q '^Linux version' /root/noyau.txt

  3. اربط أداتين صغيرتين بأنبوب: احسب عدد أسطر الملف /etc/os-release (cat … | wc -l) واحفظ العدد في /root/lignes.txt
    عرض تلميحcat /etc/os-release | wc -l > /root/lignes.txt — الأمر cat يقرأ، و wc -l يعدّ، والأنبوب | يربط بينهما.
    عرض الحل
    cat /etc/os-release | wc -l > /root/lignes.txt

    التحقق : grep -qx "$(wc -l < /etc/os-release)" /root/lignes.txt

  4. اكتب في الملف /root/annee-unix.txt السنة التي كتب فيها كين تومسون أول نسخة من UNIX (عدد واحد فقط).
    عرض تلميحإنها السنة التي انسحبت فيها مختبرات Bell من مشروع Multics. مثال على الصيغة: echo 2000 > /root/annee-unix.txt
    عرض الحل
    echo 1969 > /root/annee-unix.txt

    التحقق : grep -qx 1969 /root/annee-unix.txt

المراجع الرسمية المعتمدة: D. M. Ritchie, « The Evolution of the Unix Time-sharing System » (1979, publié en 1984) ; D. M. Ritchie et K. Thompson, « The UNIX Time-Sharing System », Communications of the ACM (1974) ; Debian Reference — chapitre 1, tutoriels GNU/Linux. نص أصلي من MasterLinux.