الدرس 1 من 7 · التاريخ
من Multics إلى UNIX (1964-1973)
الهدف
أن تفهم كيف وُلد 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. بعد ذلك انقر على تحقّق: الموقع يراقب عملك تلقائيًّا.
اختبار قصير
- ما المؤسسات الثلاث التي كانت وراء مشروع Multics؟
- على أي حاسوب كتب كين تومسون أول نسخة من UNIX، وفي أي سنة؟
- لماذا كانت إعادة كتابة نواة UNIX بلغة C (سنة 1973) حاسمة؟
- ماذا يفعل الأمر
cat /etc/passwd | grep bash | wc -l، وأي مبدأ من مبادئ UNIX يوضّحه؟ - لماذا كانت AT&T توزّع UNIX على الجامعات بدل أن تبيعه؟
الأجوبة
- MIT، و General Electric، ومختبرات Bell (AT&T).
- على حاسوب PDP-7 من صنع DEC، سنة 1969.
- بعد كتابته بلغة C أصبح UNIX قابلًا للنقل: لتشغيله على آلة أخرى يكفي في الأساس مترجم للغة C، بدل إعادة كتابة كل شيء بلغة التجميع.
- يعدّ حسابات النظام التي يحتوي سطرها على « bash ». ويوضّح مبدأ تركيب برامج صغيرة متخصصة يربط بينها أنابيب.
- كان اتفاق لمكافحة الاحتكار يعود إلى سنة 1956 يمنع AT&T من الاتجار في المعلوميات؛ فكانت تنشره بثمن رمزي مع شيفرته المصدرية.
المصادر المرجعية: مقالات D. M. Ritchie و K. Thompson المذكورة في رأس الدرس، و Debian Reference (رخصة حرة). نص أصلي من MasterLinux.