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

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

مشروع GNU والبرمجيات الحرة

30 د Debian 12

الهدف

أن تفهم من أين تأتي معظم الأدوات التي ستستعملها على Linux، وما معنى «البرمجيات الحرة» (logiciel libre)، وأن تعرف كيف تقرأ الرخص الكبرى (GPL و BSD و MIT) التي ستصادفها في عملك.

الخلاصة

  • في سنة 1983 أعلن ريتشارد ستولمان (Richard Stallman) عن مشروع GNU: نظام كامل من نوع UNIX، حر بالكامل.
  • في سنة 1985 أسّس مؤسسة البرمجيات الحرة (Free Software Foundation، اختصارًا FSF). ثم جاءت رخصة GPL سنة 1989.
  • البرنامج الحر يضمن أربع حريات: الاستعمال، والدراسة، وإعادة التوزيع، والتعديل مع مشاركة التعديلات.
  • رخصة GPL من نوع copyleft (الحقوق المتروكة): من يعيد توزيع برنامج GPL معدَّل يجب أن يوزّعه بدوره تحت GPL. أما رخصتا BSD و MIT فهما متساهلتان (permissives): يمكنك أن تفعل بالبرنامج تقريبًا ما تشاء.
  • في سنة 1998 ظهر مصطلح المصدر المفتوح (open source): الواقع التقني نفسه، بخطاب موجّه أكثر نحو الشركات.

1. المشكلة: الشيفرة تُغلق (أواخر السبعينيات)

في السنوات الأولى للمعلوميات كان المبرمجون يتبادلون شيفراتهم بشكل طبيعي، كما يتبادل الباحثون نتائجهم. بل إن UNIX نفسه كان يُتداول مع شيفرته المصدرية في الجامعات (الدرس 0.1).

ومع مطلع الثمانينيات تغيّر كل شيء: أدرك الناشرون أن البرنامج يمكن أن يُباع منفصلًا عن الآلة. فأصبحت الشيفرة المصدرية سرًّا تجاريًّا. وصار المستخدمون يتسلّمون برامج مترجَمة مسبقًا، لا يحق لهم دراستها، ولا تصحيحها، ولا مشاركتها.

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

2. سنة 1983: الإعلان عن مشروع GNU

في 27 سبتمبر 1983 أعلن ستولمان على Usenet (جدّ المنتديات) عن مشروع جنوني: كتابة نظام تشغيل كامل، متوافق مع UNIX، وحر بالكامل. وسمّاه GNU، وهو اختصار تكراري (récursif) يعني «GNU's Not Unix» («GNU ليس UNIX»).

لماذا التوافق مع UNIX؟ لأن UNIX مصمَّم تصميمًا جيدًا (الدرس 0.1)، ولأنه مقسَّم إلى برامج صغيرة يمكن إعادة كتابتها واحدًا واحدًا، ولأن المستخدمين سيتمكّنون من الانتقال من نظام إلى آخر دون إعادة تعلّم كل شيء.

بدأ العمل في يناير 1984، حين ترك ستولمان منصبه في MIT حتى لا تتمكّن الجامعة من المطالبة بملكية شيفرته. وفي سنة 1985 نشر بيان GNU (GNU Manifesto) الذي يشرح مقاربته، وأسّس مؤسسة البرمجيات الحرة (FSF) لتمويل المشروع.

3. لبنات GNU التي ستستعملها كل يوم

قطعةً بعد قطعة، أعاد مشروع GNU كتابة أدوات UNIX. وفي أواخر الثمانينيات لم يكن ينقصه شيء تقريبًا:

أداة GNU التاريخ الدور الأمر
GNU Emacs 1984-1985 محرّر نصوص emacs
GCC (GNU C Compiler، واليوم GNU Compiler Collection) 1987 مترجم (compilateur): استُعمل لترجمة Linux gcc
Bash (Bourne Again Shell، براين فوكس Brian Fox) 1989 الصدفة، متوافقة مع صدفة sh الخاصة بـ Bourne bash
coreutils (دمج fileutils و textutils و shellutils) التسعينيات وسنوات الألفين الأوامر الأساسية ls، cp، mv، cat، chmod
grep و sed و gawk و tar و gzip و find الثمانينيات والتسعينيات البحث، والتحويل، والأرشفة grep، sed، awk، tar
glibc ابتداءً من 1987 مكتبة C، التي تستعملها جميع البرامج تقريبًا (غير مرئية، لكنها في كل مكان)

تحقّق بنفسك:

ls --version | head -n 1      # ls (GNU coreutils) …
bash --version | head -n 1    # GNU bash, version …
grep --version | head -n 1    # grep (GNU grep) …

لكن قطعة أساسية كانت ما تزال ناقصة: النواة (noyau)، أي البرنامج الذي يخاطب العتاد مباشرة. فالنواة التي خطّط لها مشروع GNU، واسمها Hurd (بدأ العمل عليها سنة 1990)، طموحة جدًّا وتتقدّم ببطء. وما زالت إلى اليوم غير مستعملة في بيئات الإنتاج. وهذه القطعة الناقصة هي التي سيوفّرها Linux سنة 1991 (الدرس 0.4).

4. الحريات الأربع

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

يكون البرنامج حرًّا إذا تمتّع مستخدمه بـ الحريات الأربع (مرقّمة ابتداءً من الصفر، كما يليق بأهل المعلوميات):

الحرية ما يمكنك فعله مثال ملموس
0 استعمال البرنامج لأي غرض كان تثبيت Linux على 200 جهاز صندوق (caisse) في سلسلة متاجر، دون حساب للتراخيص
1 دراسة طريقة عمله وتكييفه (وهذا يستلزم الشيفرة المصدرية) قراءة شيفرة خادم ويب لفهم خطأ ما
2 إعادة توزيع نسخ منه إعطاء زميل مفتاح USB للتثبيت
3 تحسين البرنامج ومشاركة تحسيناتك تصحيح علّة (bug) وإرسال التصحيح إلى المشروع

يمكن بيع البرنامج الحر: فشركة Red Hat تبيع اشتراكات في RHEL، الذي يتكوّن من برمجيات حرة. والبرنامج المجاني ليس بالضرورة حرًّا: فكثير من التطبيقات المجانية تُخفي شيفرتها.

5. رخصة GPL ومبدأ copyleft (1989)

لضمان هذه الحريات، استعمل ستولمان… حق المؤلف نفسه. فرخصة GNU General Public License (GPL) تقول في جوهرها:

يمكنك استعمال هذا البرنامج ودراسته وتعديله وإعادة توزيعه. لكن إذا أعدت توزيع نسخة معدَّلة، فعليك نشرها تحت الرخصة نفسها، مع شيفرتها المصدرية.

هذا هو مبدأ copyleft (تلاعب لفظي بكلمة copyright): الحرية تنتقل من يد إلى يد، ولا يستطيع أحد مصادرتها في الطريق.

الإصدار السنة ما يجب تذكّره
GPL v1 1989 الإصدار الأول
GPL v2 1991 رخصة نواة Linux (بصيغة «الإصدار 2 فقط»)
GPL v3 2007 تحمي من براءات الاختراع ومن الأجهزة التي تمنع تثبيت نسخة معدَّلة
LGPL 1991 نسخة «مخفّفة» للمكتبات: يمكن لبرنامج غير حر أن يستعملها
AGPL 2007 (v3) توسّع الالتزام ليشمل البرامج المستعملة عن بُعد، عبر الشبكة (تطبيقات الويب)

نقطة مهمة لمدير الأنظمة: رخصة GPL لا تفرض عليك شيئًا ما دمت لا تعيد التوزيع. يمكنك تعديل برنامج GPL لخوادم شركتك دون نشر أي شيء. (ورخصة AGPL هي الاستثناء: إذا قدّمت الخدمة للعموم عبر الشبكة، فعليك أن تعطي الشيفرة لمستخدميها.)

6. سنة 1998: حركة «المصدر المفتوح»

في يناير 1998 أعلنت الشركة الناشرة لمتصفح Netscape أنها ستنشر شيفرته المصدرية (التي ستصبح Mozilla، ثم Firefox). وكانت تلك صدمة: شركة كبرى تفتح منتجها الرئيسي.

وبعد بضعة أسابيع، في فبراير 1998، اقترحت مجموعة من المطوّرين، من بينهم إريك ريموند (Eric S. Raymond) و بروس بيرنز (Bruce Perens)، مصطلحًا جديدًا: open source («المصدر المفتوح»)، الذي صاغته كريستين بيترسون (Christine Peterson). وأسّسوا مبادرة المصدر المفتوح (Open Source Initiative، اختصارًا OSI). وكانت فكرتهم: أن يحدّثوا الشركات عن الجودة والموثوقية والتكاليف، بدل الأخلاق والحرية.

البرمجيات الحرة (FSF) المصدر المفتوح (OSI)
الحجة الرئيسية مسألة أخلاقية: يجب أن يكون المستخدم حرًّا مسألة فعالية: التطوير المفتوح ينتج برمجيات أفضل
الشخصية الرمز ريتشارد ستولمان إريك ريموند، بروس بيرنز
النص المرجعي الحريات الأربع Open Source Definition، المشتقّ من مبادئ Debian (DFSG)
في الممارسة الرخص المعترف بها متطابقة تقريبًا

ويقارن نص ريموند الكاتدرائية والبازار (1997) بين طريقتين في التطوير: داخل مجموعة صغيرة مغلقة (الكاتدرائية) أو في العلن، مع آلاف المساهمين (البازار، وهو نموذج Linux). وإليه تُنسب عبارة كثيرًا ما تُستشهد: مع ما يكفي من العيون، يصبح العثور على كل العلل سهلًا.

وكثيرًا ما نصادف الاختصار FLOSS أو FOSS (Free/Libre and Open Source Software)، الذي يجمع المعسكرين.

7. الرخص التي ستصادفها

على الخادم، لكل برنامج رخصته. وهذه هي العائلات الرئيسية:

الرخصة النوع ما تشترطه أمثلة
GPL (v2، v3) copyleft قوي إعادة توزيع التعديلات تحت GPL، مع الشيفرة المصدرية نواة Linux (v2)، و bash، و GCC، و coreutils
LGPL copyleft ضعيف copyleft على المكتبة، لا على البرنامج الذي يستعملها glibc
AGPL copyleft شبكي توفير الشيفرة أيضًا لمستخدمي الخدمة عبر الإنترنت بعض برمجيات الويب (Nextcloud مثلًا)
BSD (بندان أو 3 بنود) متساهلة الاحتفاظ بإشعار حق المؤلف FreeBSD، و OpenSSH (في معظمه)
MIT متساهلة الاحتفاظ بإشعار حق المؤلف، لا أكثر X Window (X11)، و Node.js، و jQuery
Apache 2.0 متساهلة إشعار حق المؤلف + بند خاص ببراءات الاختراع خادم Apache httpd، و Kubernetes، و Android (في جزء كبير منه)

المثال الذي يوضّح الفرق: استطاعت Apple أن تأخذ شيفرة BSD في macOS دون أن تنشر تعديلاتها، لأن رخصة BSD تسمح بذلك. أما صانع أجهزة الإنترنت المنزلية (box) الذي يعدّل نواة Linux، فعليه أن يوفّر لزبائنه الشيفرة المصدرية لتعديلاته، لأن النواة تحت رخصة GPL.

على Debian، توجد نصوص الرخص الشائعة في مجلد واحد، وكل حزمة (paquet) تصف رخصتها:

ls /usr/share/common-licenses/          # GPL-2, GPL-3, LGPL, BSD, Apache-2.0…
head -n 3 /usr/share/common-licenses/GPL-3
# على نظام Debian كامل، لكل حزمة بطاقة رخصتها:
# /usr/share/doc/<paquet>/copyright

8. GNU/Linux أم Linux؟

يطلب ستولمان أن نقول GNU/Linux، لأن النظام الكامل مدين كثيرًا لأدوات GNU، لا للنواة وحدها. ويتّبع Debian هذا الاستعمال («Debian GNU/Linux»). أما معظم الناس، ومعظم الشركات، فيقولون ببساطة Linux.

في هذه الدورة نقول «Linux» تيسيرًا، لكن تذكّر الحقيقة التقنية: Linux هو النواة؛ وجزء كبير من الأدوات المحيطة بها يأتي من GNU. بل إن بعض أنظمة «Linux» لا تكاد تستعمل GNU: مثل Android، أو توزيعة Alpine (مع BusyBox ومكتبة musl).

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

1983  27 سبتمبر: ستولمان يعلن عن مشروع GNU
1984  بداية العمل؛ ستولمان يغادر MIT
1985  بيان GNU؛ تأسيس Free Software Foundation
1987  GCC
1989  GPL v1؛ Bash
1990  بداية Hurd، النواة التي خطّط لها GNU
1991  GPL v2؛ LGPL
1992  نواة Linux تنتقل إلى رخصة GPL: النظام الحر يكتمل
1997  « الكاتدرائية والبازار » (إريك ريموند)
1998  Netscape تفتح شيفرتها؛ ولادة مصطلح « open source » ومبادرة OSI
2007  GPL v3 و AGPL v3

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

  • «حر يعني مجاني.» لا. كلمة حر تتحدث عن الحقوق؛ ويمكن بيع البرنامج الحر (اشتراكات RHEL، دعم SUSE…).
  • «المصدر المفتوح يعني أن أي شخص يستطيع تعديل البرنامج الرسمي.» لا. يمكنك تعديل نسختك أنت. ولكي يدخل تصحيحك إلى المشروع الرسمي، يجب أن يقبله المشرفون عليه (mainteneurs).
  • «رخصة GPL تُلزم بنشر شيفرة كل ما نطوّره على Linux.» لا. البرنامج الذي يعمل فوق Linux غير معني بذلك. المعني فقط هو التعديلات المعاد توزيعها على برنامج GPL.
  • «البرمجيات الحرة للهواة.» أكبر المواقع في العالم، والبنوك، ومشغّلو الاتصالات، كلها تعمل ببرمجيات حرة.

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

على آلتك Debian 12، ستعثر على بصمة GNU وعلى الرخص المثبّتة:

ls --version | head -n 1
bash --version | head -n 1
ls /usr/share/common-licenses/
grep -m1 Version /usr/share/common-licenses/GPL-3

المهام: تسجيل إشارة GNU في ls و bash، وعرض قائمة الرخص التي يوفّرها Debian، وإيجاد تاريخ رخصة GPL 3. ثم انقر على تحقّق.


اختبار قصير

  1. ما معنى اسم «GNU»، وفي أي سنة أُعلن عن المشروع؟
  2. اذكر الحريات الأربع للبرمجيات الحرة.
  3. ما هو copyleft؟ وما الرخصة التي تُعدّ أشهر مثال عليه؟
  4. شركة عدّلت شيفرة برنامج تحت رخصة MIT وباعته دون نشر تعديلاتها. هل يحق لها ذلك؟ وماذا لو كان البرنامج تحت GPL؟
  5. ما القطعة التي كانت تنقص مشروع GNU في بداية التسعينيات؟
الأجوبة
  1. GNU's Not Unix («GNU ليس UNIX»)، وهو اختصار تكراري؛ أعلن عنه ريتشارد ستولمان في 27 سبتمبر 1983.
  2. 0 الاستعمال لأي غرض؛ 1 الدراسة والتكييف (الوصول إلى الشيفرة المصدرية)؛ 2 إعادة توزيع النسخ؛ 3 التحسين ومشاركة التحسينات.
  3. المبدأ الذي يقضي بأن تبقى النسخ المعدَّلة والمعاد توزيعها تحت الرخصة الحرة نفسها. والمثال النموذجي هو رخصة GPL.
  4. مع MIT: نعم، يكفي الاحتفاظ بإشعار حق المؤلف. مع GPL: لا، إذا أعادت توزيع نسخة معدَّلة فعليها أن توفّر الشيفرة المصدرية تحت GPL.
  5. النواة (لم تكن Hurd جاهزة): وهي التي وفّرها Linux.

المصادر المرجعية: نصوص مشروع GNU (gnu.org)، و Open Source Definition (opensource.org)، و Debian Policy. نص أصلي من MasterLinux.

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

تُنجَز على Debian 12

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

  1. الأوامر الأساسية تأتي من مشروع GNU. احفظ السطر الأول من ناتج ls --version في /root/ls.txt
    عرض تلميحأنبوب نحو head يحتفظ بالسطر الأول: ls --version | head -n 1 > /root/ls.txt
    عرض الحل
    ls --version | head -n 1 > /root/ls.txt

    التحقق : grep -q 'GNU coreutils' /root/ls.txt

  2. افعل الشيء نفسه مع الصدفة: احفظ السطر الأول من ناتج bash --version في /root/bash.txt
    عرض تلميحbash --version | head -n 1 > /root/bash.txt
    عرض الحل
    bash --version | head -n 1 > /root/bash.txt

    التحقق : grep -q 'GNU bash' /root/bash.txt

  3. يضع Debian نصوص الرخص الشائعة في المجلد /usr/share/common-licenses. احفظ قائمة محتوى هذا المجلد في /root/licences.txt
    عرض تلميحls /usr/share/common-licenses > /root/licences.txt
    عرض الحل
    ls /usr/share/common-licenses > /root/licences.txt

    التحقق : grep -q '^GPL' /root/licences.txt && grep -q '^BSD' /root/licences.txt

  4. ابحث عن السطر الذي يذكر إصدار رخصة GPL 3 وتاريخها (أول ظهور لكلمة « Version » في /usr/share/common-licenses/GPL-3) واحفظه في /root/gpl.txt
    عرض تلميحالخيار grep -m1 يتوقف عند أول نتيجة: grep -m1 Version /usr/share/common-licenses/GPL-3 > /root/gpl.txt
    عرض الحل
    grep -m1 Version /usr/share/common-licenses/GPL-3 > /root/gpl.txt

    التحقق : grep -q 'Version 3' /root/gpl.txt

المراجع الرسمية المعتمدة: GNU Project — « What is Free Software? », « The GNU Manifesto » (gnu.org) ; Open Source Initiative — The Open Source Definition (opensource.org) ; Debian Policy — /usr/share/common-licenses ; Debian Free Software Guidelines. نص أصلي من MasterLinux.