فلسفة يونكس

فلسفة يونكس ، التي وضعها كين تومسون ، هي مجموعة من المعايير الثقافية والمناهج الفلسفية لتطوير البرمجيات البسيطة والنمطية . وهي تستند إلى خبرة كبار مطوري نظام التشغيل يونكس . كان لمطوري يونكس الأوائل دورٌ هام في إدخال مفاهيم النمطية وإعادة الاستخدام إلى ممارسة هندسة البرمجيات، مما أدى إلى ظهور حركة " أدوات البرمجيات ". بمرور الوقت، وضع كبار مطوري يونكس (والبرامج التي تعمل عليه) مجموعة من المعايير الثقافية لتطوير البرمجيات؛ أصبحت هذه المعايير بنفس أهمية وتأثير تقنية يونكس نفسها، ولذا تُعرف باسم "فلسفة يونكس".
تُركز فلسفة يونكس على بناء برمجيات بسيطة، ومُدمجة، وواضحة، ووحداتية، وقابلة للتوسيع ، بحيث يسهل صيانتها وإعادة استخدامها من قِبل مطورين آخرين غير مُنشئيها. وتُفضل فلسفة يونكس قابلية التركيب على التصميم المتجانس .
أصل
في ورقتهم البحثية حول يونكس لعام 1974، يقتبس ريتشي وتومسون اعتبارات التصميم التالية: [ 1 ]
- اجعل كتابة البرامج واختبارها وتشغيلها أمراً سهلاً.
- الاستخدام التفاعلي بدلاً من المعالجة الدفعية .
- الاقتصاد والأناقة في التصميم بسبب قيود الحجم ("الخلاص من خلال المعاناة") .
- نظام مكتفٍ ذاتيًا : تتم صيانة جميع برامج يونكس تحت نظام يونكس.
في عام 1978، قام دوغ ماكلروي بتوثيق مجموعة من المبادئ التي تجسد "الأسلوب المميز" الذي ظهر بين مستخدمي ومطوري نظام يونكس: [ 2 ] [ 3 ]
- اجعل كل برنامج يؤدي مهمة واحدة على أكمل وجه. ولإنجاز مهمة جديدة، قم ببناء برنامج جديد بدلاً من تعقيد البرامج القديمة بإضافة "ميزات" جديدة.
- توقع أن يصبح ناتج كل برنامج مدخلاً لبرنامج آخر لم يُكتشف بعد. لا تُثقل الناتج بمعلومات زائدة. تجنب استخدام تنسيقات الإدخال العمودية أو الثنائية بشكل صارم. لا تُصر على الإدخال التفاعلي.
- صمم وطوّر برامج، وحتى أنظمة تشغيل، ليتم اختبارها مبكراً، ويفضل أن يكون ذلك في غضون أسابيع. لا تتردد في التخلص من الأجزاء غير المتقنة وإعادة بنائها.
- استخدم الأدوات بدلاً من المساعدة غير الماهرة لتخفيف مهمة البرمجة، حتى لو اضطررت إلى الانحراف لبناء الأدوات وتوقع التخلص من بعضها بعد الانتهاء من استخدامها.
وفي وقت لاحق، في عام 1994، تم تلخيصها بالاسم الصريح "فلسفة يونكس" بواسطة بيتر إتش سالوس ، الذي نسبها إلى ماكلروي: [ 4 ] [ 3 ]
- اكتب برامج تقوم بمهمة واحدة وتؤديها على أكمل وجه.
- اكتب برامج تعمل معًا.
- اكتب برامج للتعامل مع تدفقات النصوص، لأنها واجهة عالمية.
أجزاء
بيئة برمجة يونكس
في مقدمة كتابهم الصادر عام 1984 بعنوان "بيئة برمجة يونكس" ، يقدم كل من برايان كيرنيغان وروب بايك ، وكلاهما من مختبرات بيل ، وصفًا موجزًا لتصميم يونكس وفلسفة يونكس: [ 5 ]

على الرغم من أن نظام يونكس يُقدّم عددًا من البرامج والتقنيات المبتكرة، إلا أن نجاحه لا يعتمد على برنامج واحد أو فكرة واحدة. بل يكمن سرّ فعاليته في منهجية البرمجة، أي فلسفة استخدام الحاسوب. ورغم أن هذه الفلسفة لا يُمكن تلخيصها في جملة واحدة، إلا أن جوهرها يكمن في أن قوة النظام تنبع من العلاقات بين البرامج أكثر من البرامج نفسها. فكثير من برامج يونكس تُؤدي مهامًا بسيطة عند استخدامها منفردة، ولكنها، عند دمجها مع برامج أخرى، تُصبح أدوات عامة ومفيدة.
ويكتب المؤلفون كذلك أن هدفهم من هذا الكتاب هو "توصيل فلسفة برمجة يونكس". [ 5 ]
تصميم البرامج في بيئة يونكس

في أكتوبر 1984، نشر برايان كيرنيغان وروب بايك ورقة بحثية بعنوان " تصميم البرامج في بيئة يونكس" . في هذه الورقة، ينتقدان تراكم خيارات وميزات البرامج الموجودة في بعض أنظمة يونكس الأحدث مثل 4.2BSD و System V ، ويشرحان فلسفة يونكس لأدوات البرمجيات، حيث تؤدي كل أداة وظيفة عامة واحدة: [ 6 ]
يستمد نظام التشغيل يونكس قوته من أسلوب تصميم برامجه الذي يُسهّل استخدامها، والأهم من ذلك، يُسهّل دمجها مع برامج أخرى. يُعرف هذا الأسلوب باستخدام أدوات البرمجيات ، ويعتمد بشكل أكبر على كيفية اندماج البرامج في بيئة البرمجة وكيفية استخدامها مع برامج أخرى، أكثر من اعتماده على تصميمها الداخلي. [...] وقد استند هذا الأسلوب إلى استخدام الأدوات : أي استخدام البرامج بشكل منفصل أو مجتمعة لإنجاز مهمة ما، بدلاً من القيام بذلك يدويًا، أو بواسطة أنظمة فرعية متجانسة مكتفية ذاتيًا، أو بواسطة برامج خاصة تُستخدم لمرة واحدة.
يقارن المؤلفون أدوات يونكس مثل cat بمجموعات البرامج الأكبر حجماً التي تستخدمها الأنظمة الأخرى. [ 6 ]
يُعد تصميم برنامج cat نموذجيًا لمعظم برامج يونكس: فهو يُنفّذ وظيفةً واحدةً بسيطةً وعامةً يُمكن استخدامها في العديد من التطبيقات المختلفة (بما في ذلك تطبيقات لم يتوقعها مُؤلّفه الأصلي). وتُستخدم أوامر أخرى لوظائف أخرى. على سبيل المثال، توجد أوامر منفصلة لمهام نظام الملفات مثل إعادة تسمية الملفات، وحذفها، ومعرفة حجمها. في المقابل، تُجمّع أنظمة أخرى هذه المهام في أمر واحد خاص بنظام الملفات، له بنية داخلية ولغة أوامر خاصة به. (يُعدّ برنامج نسخ الملفات PIP [ 7 ] الموجود في أنظمة تشغيل مثل CP/M أو RSX-11 مثالًا على ذلك). هذا النهج ليس بالضرورة أسوأ أو أفضل، ولكنه بالتأكيد يُخالف فلسفة يونكس.
دوغ ماكلروي يتحدث عن برمجة يونكس

قام ماكيلروي ، الذي كان آنذاك رئيس مركز أبحاث علوم الحوسبة في مختبرات بيل ومخترع أنبوب يونكس ، [ 8 ] بتلخيص فلسفة يونكس على النحو التالي: [ 3 ]
هذه هي فلسفة يونكس: اكتب برامج تؤدي وظيفة واحدة وتؤديها على أكمل وجه. اكتب برامج تعمل معًا. اكتب برامج للتعامل مع تدفقات النصوص ، لأنها واجهة عالمية.
إلى جانب هذه التصريحات، فقد أكد أيضًا على البساطة والحد الأدنى في برمجة يونكس: [ 3 ]
إن مفهوم "التعقيدات المعقدة والجميلة" يكاد يكون متناقضاً. يتنافس مبرمجو يونكس فيما بينهم على لقب "البساطة والجمال" - وهي نقطة ضمنية في هذه القواعد، ولكن من الجدير ذكرها صراحةً.
في المقابل، انتقد ماكلروي نظام لينكس الحديث بسبب تضخم برامجه ، مشيرًا إلى أن "المعجبين المتحمسين أغرقوا لينكس بميزاته حتى وصل إلى حالة من السمنة المفرطة المحبطة ". [ 9 ] ويقارن هذا بالنهج السابق الذي تم اتباعه في مختبرات بيل عند تطوير ومراجعة نظام يونكس البحثي : [ 10 ]
كان كل شيء صغيرًا... ويحزنني حجم لينكس عندما أرى حجمه. [...] صفحة الدليل ، التي كانت في الأصل صفحة دليل ، أصبحت الآن مجلدًا صغيرًا، مع ألف خيار... كنا نجلس في غرفة يونكس ونتساءل: "ما الذي يمكننا حذفه؟ لماذا يوجد هذا الخيار؟" غالبًا ما يكون السبب وجود قصور في التصميم الأساسي - لم تصل إلى نقطة التصميم الصحيحة. بدلًا من إضافة خيار، فكّر فيما أجبرك على إضافته.
افعل شيئًا واحدًا وأتقنه
كما ذكر ماكلروي، وهو أمر مقبول عمومًا في مجتمع يونكس، لطالما كان يُتوقع من برامج يونكس اتباع مفهوم DOTADIW، أو "افعل شيئًا واحدًا وأتقنه". توجد مصادر محدودة للاختصار DOTADIW على الإنترنت، ولكنه يُناقش باستفاضة أثناء تطوير وتغليف أنظمة التشغيل الجديدة، وخاصة في مجتمع لينكس.
استشهد باتريك فولكردينغ ، قائد مشروع Slackware Linux ، بمبدأ التصميم هذا في انتقاده لبنية systemd ، مصرحًا بأن "محاولة التحكم في الخدمات والمآخذ والأجهزة ونقاط التحميل وما إلى ذلك، كلها داخل برنامج واحد يتعارض مع مفهوم يونكس المتمثل في القيام بشيء واحد والقيام به بشكل جيد." [ 11 ]
قواعد إريك ريموند السبعة عشر لنظام يونكس
في كتابه "فن برمجة يونكس" الذي نُشر لأول مرة عام 2003، [ 12 ] يلخص إريك إس. ريموند (المدافع عن المصادر المفتوحة والمبرمج) فلسفة يونكس بعبارة " اجعلها بسيطة، يا غبي ". [ 13 ] ويقدم سلسلة من قواعد التصميم: [ 3 ]
- بناء برامج معيارية
- اكتب برامج قابلة للقراءة
- استخدم التركيب
- فصل الآليات عن السياسة
- اكتب برامج بسيطة
- اكتب برامج صغيرة
- اكتب برامج شفافة
- اكتب برامج قوية
- اجعل البيانات معقدة عند الحاجة، وليس البرنامج.
- استند إلى المعرفة المتوقعة للمستخدمين المحتملين
- تجنب الإخراج غير الضروري
- اكتب برامج تفشل بطريقة يسهل تشخيصها
- قيمة وقت المطور مقارنة بوقت الآلة
- اكتب برامج مجردة تولد التعليمات البرمجية بدلاً من كتابة التعليمات البرمجية يدويًا
- قم بإنشاء نموذج أولي للبرنامج قبل صقله
- اكتب برامج مرنة ومفتوحة المصدر
- اجعل البرنامج والبروتوكولات قابلة للتوسيع.
مايك جانكارز: فلسفة يونكس
في عام 1994، نشر مايك غانكارز ، العضو في مجموعة هندسة يونكس التابعة لشركة ديجيتال إكويبمنت ، كتاب " فلسفة يونكس " استناداً إلى تجربته في تطوير منفذ يونكس ( ألتريكس ) في شركة ديجيتال إكويبمنت خلال ثمانينيات القرن الماضي، بالإضافة إلى مناقشاته مع زملائه. وهو أيضاً عضو في فريق تطوير نظام إكس ويندو، ومؤلف برنامج ألتريكس ويندو مانجر (uwm).
يركز الكتاب على نقل نظام التشغيل UNIX إلى أجهزة كمبيوتر مختلفة خلال حروب Unix في الثمانينيات ويصف فلسفته القائلة بأن قابلية النقل يجب أن تكون أكثر أهمية من كفاءة استخدام واجهات غير قياسية للأجهزة المادية وأجهزة الرسومات.
المبادئ التسعة الأساسية التي يدعي أنها مهمة هي
- الصغير جميل.
- اجعل كل برنامج يقوم بمهمة واحدة بشكل جيد.
- قم ببناء نموذج أولي في أسرع وقت ممكن.
- اختر سهولة الحمل على حساب الكفاءة.
- قم بتخزين البيانات في ملفات نصية بسيطة .
- استغل قوة البرمجيات لصالحك.
- استخدم البرامج النصية (shell scripts) لزيادة الكفاءة وقابلية النقل.
- تجنب واجهات المستخدم المقيدة.
- اجعل كل برنامج بمثابة مرشح .
"الأسوأ أفضل"
يشير ريتشارد ب. غابرييل إلى أن إحدى المزايا الرئيسية لنظام يونكس تكمن في تجسيده لفلسفة تصميم أطلق عليها اسم "الأسوأ هو الأفضل"، حيث تُعدّ بساطة كلٍّ من واجهة المستخدم والتنفيذ أهم من أي سمات أخرى للنظام، بما في ذلك الصحة والاتساق والشمولية. ويجادل غابرييل بأن هذا الأسلوب التصميمي يتمتع بمزايا تطورية جوهرية، مع أنه يشكك في جودة بعض النتائج.
على سبيل المثال، في بدايات نظام يونكس، كان يُستخدم نواة متجانسة (أي أن عمليات المستخدم كانت تُنفذ جميع استدعاءات نظام النواة على مكدس المستخدم). إذا وصلت إشارة إلى عملية ما أثناء انتظارها في عملية إدخال /إخراج طويلة الأمد في النواة، كان التعامل مع الموقف غير واضح. لم يكن بالإمكان تنفيذ معالج الإشارة عندما تكون العملية في وضع النواة، مع وجود بيانات نواة حساسة على المكدس.
نقد
في مقال نُشر عام ١٩٨١ بعنوان "حقيقة يونكس: واجهة المستخدم مروعة " [ ١٤ ] في مجلة داتاماشن ، انتقد دون نورمان فلسفة تصميم يونكس لإهمالها واجهة المستخدم. انطلاقًا من خلفيته في العلوم المعرفية ومن منظور فلسفة الهندسة المعرفية السائدة آنذاك [ ١٥ ] ، ركّز على كيفية فهم المستخدمين النهائيين للأنظمة وتكوين نموذج معرفي شخصي لها ، أو، في حالة يونكس، فشلهم في فهمها، مما يؤدي إلى أخطاء كارثية (مثل فقدان ساعة من العمل) بسهولة بالغة.
في بودكاست "On the Metal"، انتقد مطور الألعاب جوناثان بلو فلسفة يونكس ووصفها بأنها عفا عليها الزمن. [ 16 ] جادل بأن ربط الأدوات المعيارية معًا يؤدي إلى برامج غير فعالة للغاية. ويقول إن فلسفة يونكس تعاني من مشاكل مشابهة لمشاكل الخدمات المصغرة : فبدون إشراف شامل، ينتهي المطاف بالبنى الكبيرة إلى أن تكون غير فعالة وغير كفؤة.
انظر أيضاً
ملحوظات
- ↑ دينيس ريتشي ؛ كين تومسون (1974)، "نظام المشاركة الزمنية في يونكس" (ملف PDF) ، مجلة اتصالات رابطة مكائن الحوسبة ، 17 (7): 365-375 ، doi : 10.1145/361011.361061 ، S2CID 53235982
- ↑ إم دي ماكلروي ؛ إي إن بينسون؛ بي إيه تاغ (8 يوليو 1978). "نظام يونكس لتقاسم الوقت: مقدمة" . المجلة التقنية لنظام بيل . مختبرات بيل: 1902-1903 .
- 1 2 3 4 5 إريك س. ريموند (2004). "أساسيات فلسفة يونكس" . فن برمجة يونكس . أديسون-ويسلي بروفيشنال (نُشر في 23 سبتمبر 2003). ISBN 0-13-142901-9تم الاطلاع عليه بتاريخ 1 نوفمبر 2016 .
- ↑ بيتر هـ. سالوس (1994). ربع قرن من يونكس . أديسون-ويسلي . الصفحات 52-53 . ISBN 978-0-20-154777-1.
- 1 2 كيرنيغان، برايان دبليو. بايك، روب. بيئة برمجة يونكس. 1984. 8
- 1 2 روب بايك؛ برايان دبليو. كيرنيغان (أكتوبر 1984). "تصميم البرامج في بيئة يونكس" (ملف PDF) . المجلة التقنية لمختبرات AT&T Bell . 63 (8). الجزء 2. تم الاطلاع عليه في 15 ديسمبر 2022 .
- ↑ "دليل نظام التشغيل CP/M" (PDF) . 1983.
- ↑ دينيس ريتشي (1984)، "تطور نظام المشاركة الزمنية في يونكس" (ملف PDF) ، المجلة التقنية لمختبرات AT&T Bell ، 63 (8): 1577-1593 ، doi : 10.1002/j.1538-7305.1984.tb00054.x
- ↑ دوغلاس ماكلروي. "كلمة ألقاها في حفل توزيع جائزة اليابان على دينيس ريتشي، 19 مايو 2011، موراي هيل، نيوجيرسي" (ملف PDF) . تم الاطلاع عليه بتاريخ 19 يونيو 2014 .
- ↑ بيل ماكغونيغل. "أصول لينكس - كيف بدأت المتعة (2005)" . تم الاسترجاع في 19-06-2014 .
- ↑ "مقابلة مع باتريك فولكردينغ من شركة سلاكوير" . linuxquestions.org . 2012-06-07 . تم الاطلاع عليه بتاريخ 2015-10-24 .
- ↑ ريموند، إريك (19-09-2003). فن برمجة يونكس . أديسون-ويسلي. ISBN 0-13-142901-9تم الاطلاع عليه بتاريخ 9 فبراير 2009 .
- ↑ ريموند، إريك (19-09-2003). "فلسفة يونكس في درس واحد" . فن برمجة يونكس . أديسون-ويسلي. ISBN 0-13-142901-9تم الاطلاع عليه بتاريخ 9 فبراير 2009 .
- ↑ نورمان، دون (1981). "حقيقة يونكس: واجهة المستخدم مروعة" (ملف PDF) . داتاماشن . المجلد 27، العدد 12.
- ↑ "تاريخ شفوي لنظام يونكس" . تاريخ العلوم بجامعة برينستون .
- ↑ "بودكاست على المعدن: جوناثان بلو" .
مراجع
- بيئة برمجة يونكس، مؤرشفة بتاريخ 21-10-2011 على موقع Wayback Machine، من تأليف برايان كيرنيغان وروب بايك ، 1984
- تصميم البرامج في بيئة يونكس - الورقة التي كتبها بايك وكيرنيغان والتي سبقت الكتاب.
- ملاحظات حول البرمجة بلغة C ، روب بايك، 21 سبتمبر 1989
- ربع قرن من يونكس ، بيتر هـ. سالوس، أديسون-ويسلي، 31 مايو 1994 ( ISBN) 0-201-54777-5)
- تمت أرشفة قسم الفلسفة في 12 مايو 2008 على موقع Wayback Machine — من كتاب "فن برمجة يونكس" ، تأليف إريك س. ريموند، دار نشر أديسون-ويسلي، 17 سبتمبر 2003 ( ISBN). 0-13-142901-9)
- التقرير النهائي لمشروع تصميم نواة Multics من إعداد MD Schroeder وDD Clark وJH Saltzer وDH Wells، 1977.
- فلسفة يونكس ، مايك جانكارز، رقم ISBN 1-55558-123-4
روابط خارجية
- أساسيات فلسفة يونكس - من Catb.org
- فلسفة يونكس: مقدمة موجزة - من إعداد مشروع معلومات لينكس (LINFO)
- لماذا لا تزال فلسفة يونكس مهمة
- يتبنى مطعم الوجبات السريعة "فلسفة يونكس"
- فلسفات تطوير البرمجيات
- يونكس
