شفرة المصدر

main() { printf("hello, world") }
شفرة مصدرية بسيطة بلغة C لبرنامج " Hello world ". مأخوذة من كتاب "لغة البرمجة C" الرائد ، وهي من تأليف برايان كيرنيغان في مختبرات بيل عام 1974. [ 1 ]

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

خلفية

ظهرت أولى الحواسيب القابلة للبرمجة في أواخر أربعينيات القرن العشرين، [ 2 ] وكانت تُبرمج بلغة الآلة (تعليمات بسيطة يمكن للمعالج تنفيذها مباشرةً). كانت لغة الآلة صعبة التصحيح وغير قابلة للنقل بين أنظمة الحاسوب المختلفة. [ 3 ] في البداية، كانت موارد الأجهزة نادرة ومكلفة، بينما كانت الموارد البشرية أرخص. [ 4 ] مع ازدياد تعقيد البرامج، أصبحت إنتاجية المبرمجين عائقًا رئيسيًا. أدى ذلك إلى ظهور لغات برمجة عالية المستوى مثل فورتران في منتصف خمسينيات القرن العشرين. جرّدت هذه اللغات تفاصيل الأجهزة، وصُممت للتعبير عن خوارزميات يسهل على البشر فهمها. [ 5 ] [ 6 ] وبما أن البرمجيات تعليمات منفصلة عن أجهزة الحاسوب الأساسية ، فهي تُعتبر حديثة نسبيًا، ويعود تاريخها إلى لغات البرمجة عالية المستوى المبكرة هذه مثل فورتران، وليسب ، وكوبول . [ 6 ] تزامن اختراع لغات البرمجة عالية المستوى مع اختراع المترجمات اللازمة لترجمة الشفرة المصدرية تلقائيًا إلى شفرة الآلة التي يمكن تنفيذها مباشرة على أجهزة الحاسوب. [ 7 ]

تعتبر بعض تعريفات شفرة المصدر أنها شكل من أشكال الشفرة التي يتم تعديلها مباشرة بواسطة البشر، وعادةً ما تكون بلغة برمجة عالية المستوى. [ 8 ]

يمكن تنفيذ كود الكائن مباشرةً بواسطة الجهاز، ويتم إنشاؤه تلقائيًا من كود المصدر، غالبًا عبر خطوة وسيطة هي لغة التجميع . بينما يعمل كود الكائن على منصة محددة فقط، يمكن نقل كود المصدر إلى جهاز آخر وإعادة تجميعه هناك. بالنسبة لكود المصدر نفسه، قد يختلف كود الكائن اختلافًا كبيرًا، ليس فقط بناءً على الجهاز الذي يُجمَّع من أجله، ولكن أيضًا بناءً على تحسين الأداء من قِبل المُجمِّع. [ 9 ] [ 10 ]

منظمة

لا تحتوي معظم البرامج على جميع الموارد اللازمة لتشغيلها، وتعتمد على مكتبات خارجية . ومن وظائف المترجم ربط هذه الملفات بطريقة تُمكّن الجهاز من تنفيذ البرنامج. [ 11 ]

مثالٌ أكثر تعقيدًا لشفرة جافا المصدرية. كُتبت بأسلوب البرمجة الكائنية ، وهي تُوضح الشفرة النمطية . مع تمييز التعليقات التمهيدية باللون الأحمر، والتعليقات المضمنة باللون الأخضر، وعبارات البرنامج باللون الأزرق.

يستخدم مطورو البرامج عادةً إدارة التكوين لتتبع التغييرات التي تطرأ على ملفات التعليمات البرمجية المصدرية ( التحكم في الإصدار ). كما يتتبع نظام إدارة التكوين أي ملف من ملفات التعليمات البرمجية الكائنية يتوافق مع أي إصدار من ملف التعليمات البرمجية المصدرية. [ 12 ]

الأغراض

تقدير

يُستخدم عدد أسطر التعليمات البرمجية المصدرية (SLOC) غالبًا كمقياس عند تقييم إنتاجية مبرمجي الحاسوب، والقيمة الاقتصادية لقاعدة التعليمات البرمجية، وتقدير الجهد المبذول في المشاريع قيد التطوير، والتكلفة المستمرة لصيانة البرامج بعد إصدارها. [ 13 ]

تواصل

يُستخدم الكود المصدري أيضًا لتبادل الخوارزميات بين الأطراف، على سبيل المثال، مقتطفات الكود على الإنترنت أو في الكتب. [ 14 ]

قد يجد مبرمجو الحاسوب فائدةً في مراجعة الشيفرة المصدرية الموجودة للتعرف على تقنيات البرمجة. [ 14 ] وكثيراً ما يُشار إلى مشاركة الشيفرة المصدرية بين المطورين كعاملٍ مساهم في نضج مهاراتهم البرمجية. [ 14 ] ويعتبر البعض الشيفرة المصدرية وسيلةً فنيةً تعبيرية . [ 15 ]

غالباً ما يحتوي الكود المصدري على تعليقات - وهي عبارة عن كتل نصية مُعلَّمة للمُصرِّف لتجاهلها. لا يُعد هذا المحتوى جزءاً من منطق البرنامج، وإنما يهدف إلى مساعدة القراء على فهم البرنامج. [ 16 ]

غالباً ما تُبقي الشركات شفرة المصدر سرية لإخفاء الخوارزميات التي تُعتبر سراً تجارياً . وتُستخدم شفرات المصدر والخوارزميات السرية والخاصة على نطاق واسع في تطبيقات حكومية حساسة، مثل العدالة الجنائية ، مما ينتج عنه سلوكٌ غامضٌ يفتقر إلى الشفافية في منهجية الخوارزمية. ويؤدي ذلك إلى تجنب التدقيق العام في قضايا مثل التحيز. [ 17 ]

تعديل

يُعدّ الوصول إلى شفرة المصدر (وليس فقط شفرة الكائن ) أمرًا أساسيًا لتعديلها. [ 18 ] فهم الشفرة الموجودة ضروري لفهم كيفية عملها [ 18 ] وقبل تعديلها. [ 19 ] تعتمد سرعة الفهم على كلٍّ من قاعدة الشفرة ومهارة المبرمج. [ 20 ] يسهل على المبرمجين ذوي الخبرة فهم وظيفة الشفرة على مستوى عالٍ. [ 21 ] تُستخدم أحيانًا تقنيات تصوير البرمجيات لتسريع هذه العملية. [ 22 ]

يستخدم العديد من مبرمجي البرمجيات بيئة تطوير متكاملة (IDE) لتحسين إنتاجيتهم. تتضمن بيئات التطوير المتكاملة عادةً العديد من الميزات المدمجة، بما في ذلك محرر شفرة المصدر الذي يُنبه المبرمج إلى الأخطاء الشائعة. [ 23 ] غالبًا ما يشمل التعديل إعادة هيكلة الشفرة (تحسين البنية دون تغيير الوظيفة) وإعادة بنائها (تحسين البنية والوظيفة معًا). [ 24 ] يكاد كل تغيير في الشفرة يُدخل أخطاءً جديدة أو آثارًا جانبية غير متوقعة ، مما يتطلب جولة أخرى من الإصلاحات. [ 19 ]

تُستخدم مراجعات الكود من قِبل مطورين آخرين غالبًا لتدقيق الكود الجديد المُضاف إلى المشروع. [ 25 ] والهدف من هذه المرحلة هو التحقق من أن الكود يفي بمعايير الأسلوب وسهولة الصيانة ، وأنه يُمثل تطبيقًا صحيحًا لتصميم البرنامج . [ 26 ] ووفقًا لبعض التقديرات، تُقلل مراجعة الكود بشكل كبير من عدد الأخطاء التي تستمر بعد اكتمال اختبار البرنامج . [ 25 ] إلى جانب اختبار البرنامج الذي يعتمد على تنفيذ الكود، يستخدم تحليل البرنامج الثابت أدوات آلية لاكتشاف المشاكل في الكود المصدري. تدعم العديد من بيئات التطوير المتكاملة (IDEs) أدوات تحليل الكود، والتي قد تُوفر مقاييس حول وضوح الكود وسهولة صيانته. [ 27 ] تُعد أدوات تصحيح الأخطاء أدوات تُمكّن المبرمجين غالبًا من تتبع تنفيذ الكود خطوة بخطوة مع تتبع الكود المصدري المُقابل لكل تغيير في الحالة. [ 28 ]

التجميع والتنفيذ

يجب أن تمر ملفات الشيفرة المصدرية في لغات البرمجة عالية المستوى بمرحلة معالجة مسبقة إلى شيفرة الآلة قبل تنفيذ التعليمات. [ 7 ] بعد التجميع، يمكن حفظ البرنامج كملف كائن ، ويستطيع المحمل (جزء من نظام التشغيل) أخذ هذا الملف المحفوظ وتنفيذه كعملية على عتاد الحاسوب. [ 11 ] تستخدم بعض لغات البرمجة مترجمًا فوريًا بدلًا من المترجم. يقوم المترجم الفوري بتحويل البرنامج إلى شيفرة الآلة أثناء التشغيل ، مما يجعلها أبطأ من 10 إلى 100 مرة من لغات البرمجة المترجمة . [ 23 ] [ 29 ]

سهولة الحمل

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

لتحقيق هذا الهدف، فإن ملفات التعليمات البرمجية المصدرية المصغرة أو المبهمة أو التي تم فك تجميعها (والتي تزيل جميعها التعليقات الموجودة في التعليمات البرمجية الأصلية) تكون قابلة للنقل بشكل عام مثل ملفات التعليمات البرمجية المصدرية الأصلية (التي تتضمن دائمًا تقريبًا تعليقات)، على الرغم من أنها أقل فائدة بكثير للتعديل، وبالتالي لا تفي بتعريف التعليمات البرمجية المصدرية في رخصة جنو العمومية العامة ، الإصدار 2 (GPL2).

جودة

جودة البرمجيات مصطلح شامل يشير إلى سلوك الكود الصحيح والفعال، وقابليته لإعادة الاستخدام والنقل ، أو سهولة تعديله. [ 30 ] عادةً ما يكون بناء الجودة في المنتج منذ البداية أكثر فعالية من حيث التكلفة من محاولة إضافتها لاحقًا في عملية التطوير. [ 31 ] يساهم الكود عالي الجودة في خفض تكلفة دورة حياة المنتج لكل من الموردين والعملاء، وذلك بفضل موثوقيته العالية وسهولة صيانته . [ 32 ] [ 33 ]

تُعرَّف قابلية الصيانة بأنها جودة البرمجيات التي تُمكّن من تعديلها بسهولة دون تعطيل وظائفها الحالية. [ 34 ] إن اتباع معايير البرمجة، مثل استخدام أسماء واضحة للدوال والمتغيرات تُشير إلى وظائفها، يُسهّل عملية الصيانة. [ 35 ] كما أن استخدام عبارات التكرار الشرطية فقط في حال إمكانية تنفيذ الكود أكثر من مرة، وحذف الأكواد التي لن تُنفَّذ أبدًا، يُحسّن من سهولة فهم الكود. [ 36 ] تتجاهل العديد من مؤسسات تطوير البرمجيات قابلية الصيانة خلال مرحلة التطوير، على الرغم من أن ذلك يزيد من التكاليف على المدى الطويل. [ 33 ] ينشأ الدين التقني عندما يختار المبرمجون، غالبًا بدافع الكسل أو الاستعجال للوفاء بالموعد النهائي، حلولًا سريعة وغير متقنة بدلًا من دمج قابلية الصيانة في الكود. [ 37 ] ومن الأسباب الشائعة لذلك التقليل من تقدير جهد تطوير البرمجيات ، مما يؤدي إلى عدم كفاية الموارد المخصصة للتطوير. [ 38 ] ومن التحديات التي تواجه قابلية الصيانة أن العديد من دورات هندسة البرمجيات لا تُركّز عليها. [ 39 ] فمهندسو التطوير الذين يعلمون أنهم لن يكونوا مسؤولين عن صيانة البرمجيات لا يملكون حافزًا لدمج قابلية الصيانة. [ 19 ]

يختلف الوضع عالميًا، ولكن في الولايات المتحدة قبل عام 1974، لم تكن البرامج وشفرتها المصدرية خاضعة لحقوق النشر ، وبالتالي كانت دائمًا برامجًا متاحة للعموم . [ 40 ] في عام 1974، قررت لجنة الولايات المتحدة المعنية بالاستخدامات التكنولوجية الجديدة للمصنفات المحمية بحقوق النشر ( CONTU ) أن "برامج الحاسوب، بقدر ما تجسد إبداعًا أصليًا للمؤلف، تُعد موضوعًا مناسبًا لحقوق النشر". [ 41 ] [ 42 ]

نادرًا ما تُوزَّع البرامج الاحتكارية كشفرة مصدرية. [ 43 ] ورغم أن مصطلح "البرمجيات مفتوحة المصدر" يشير حرفيًا إلى إمكانية الوصول العام إلى الشفرة المصدرية ، [ 44 ] إلا أن للبرمجيات مفتوحة المصدر متطلبات إضافية: إعادة التوزيع مجانًا، وإمكانية تعديل الشفرة المصدرية وإصدار أعمال مشتقة بموجب الترخيص نفسه، وعدم التمييز بين الاستخدامات المختلفة، بما في ذلك الاستخدام التجاري. [ 45 ] [ 46 ] ويمكن لإعادة استخدام البرمجيات مفتوحة المصدر مجانًا أن تُسرِّع عملية التطوير. [ 47 ]

انظر أيضاً

مراجع

  1. كيرنيغان، برايان دبليو. "البرمجة بلغة سي: دليل تعليمي" (ملف PDF) . مختبرات بيل، موراي هيل، نيوجيرسي. مؤرشف من الأصل (ملف PDF) في 23 فبراير 2015.
  2. ^ جابرييلي ومارتيني 2023 ، ص. 519.
  3. ^ جابرييلي ومارتيني 2023 ، ص 520-521.
  4. ^ جابرييلي ومارتيني 2023 ، ص. 522.
  5. ^ جابرييلي ومارتيني 2023 ، ص. 521.
  6. 1 2 تريسي 2021 ، ص. 1.
  7. 1 2 تريسي 2021 ، ص. 121.
  8. ستالمان، ريتشارد (فبراير 1989). "رخصة جنو العامة" . جنو.
  9. ^ لين وآخرون. 2001 ، ص 238-239.
  10. كاتيال 2019 ، ص 1194.
  11. 1 2 تريسي 2021 ، ص 122-123.
  12. ^ أوريجان 2022 ، الصفحات من 230 إلى 231، 233، 377.
  13. فوستر 2014 ، الصفحات 249، 274، 280، 305.
  14. 1 2 3 سبينليس، د: قراءة الشفرة: منظور المصادر المفتوحة . أديسون-ويسلي بروفيشنال، 2003. ISBN 0-201-79940-5
  15. " الفن وبرمجة الحاسوب " ONLamp.com مؤرشف في 20 فبراير 2018 في Wayback Machine ، (2005)
  16. ^ كازماريك وآخرون. 2018 ، ص. 68.
  17. ^ كاتيال 2019 ، ص 1186-1187.
  18. 1 2 كاتيال 2019 ، ص. 1195.
  19. 1 2 3 أوفوت، جيف (يناير 2018). "نظرة عامة على صيانة البرمجيات وتطويرها" . قسم علوم الحاسوب ، جامعة جورج ماسون . تم الاطلاع عليه في 5 مايو 2024 .
  20. ^ تريباثي ونايك 2014 ، ص. 296.
  21. ^ تريباثي ونايك 2014 ، ص. 297.
  22. ^ تريباثي ونايك 2014 ، ص 318-319.
  23. 1 2 O'Regan 2022 ، ص. 375.
  24. ^ تريباثي ونايك 2014 ، ص. 94.
  25. 1 2 دولي 2017 ، ص. 272.
  26. ^ أوريجان 2022 ، ص 18 ، 21.
  27. أوريجان 2022 ، ص 133.
  28. ^ كازماريك وآخرون. 2018 ، ص 348-349.
  29. سيبستا 2012 ، ص 28.
  30. جالين 2018 ، ص 26.
  31. ^ أوريجان 2022 ، ص 68 ، 117.
  32. ^ أوريجان 2022 ، ص 3 ، 268.
  33. 1 2 فارغا 2018 ، ص. 12.
  34. فارغا 2018 ، ص 5.
  35. ^ تريباثي ونايك 2014 ، ص 296-297.
  36. ^ تريباثي ونايك 2014 ، ص. 309.
  37. فارغا 2018 ، ص 6-7.
  38. فارغا 2018 ، ص 7.
  39. فارغا 2018 ، ص 7-8.
  40. ليو، جوزيف ب.؛ دوغان، ستايسي ل. (2005). "قانون حقوق التأليف والنشر وتحديد الموضوع: حالة برامج الحاسوب" . المسح السنوي لجامعة نيويورك للقانون الأمريكي . 61 (2). مؤرشف من الأصل في 25 يونيو 2021.
  41. قضية شركة أبل للكمبيوتر ضد شركة فرانكلين للكمبيوتر تعيد البايت إلى حماية حقوق التأليف والنشر لبرامج الكمبيوتر. مؤرشفة في 7 مايو 2017 في Wayback Machine في مجلة القانون بجامعة جولدن جيت، المجلد 14، العدد 2، المقال 3 بقلم جان ل. نوسباوم (يناير 1984).
  42. ليملي، مينيل، ميرجز وسامويلسون. قانون البرمجيات والإنترنت ، ص 34.
  43. بويل 2003 ، ص 45.
  44. مورين وآخرون 2012 ، المصادر المفتوحة مقابل المصادر المغلقة.
  45. سين وآخرون 2008 ، ص 209.
  46. مورين وآخرون 2012 ، ترخيص البرمجيات الحرة والمفتوحة المصدر (FOSS).
  47. أوريجان 2022 ، ص 106.

مصادر

  • أبلون، ليليان؛ بوغارت، آندي (2017). أيام الصفر، آلاف الليالي: حياة وأزمنة ثغرات اليوم الصفر واستغلالها (ملف PDF) . مؤسسة راند. ISBN 978-0-8330-9761-3تمت أرشفة الملف (PDF) من النسخة الأصلية بتاريخ 8 أكتوبر 2024. تم الاطلاع عليه بتاريخ 31 مايو 2024 .
  • بويل، جيمس (2003). "حركة التسييج الثانية وبناء المجال العام" . القانون والمشاكل المعاصرة . 66 (1): 33-74 . ISSN 0023-9186 . مؤرشف من الأصل في 24 مارس 2025. تم الاطلاع عليه في 7 أبريل 2025 . 
  • كامبل-كيلي، مارتن؛ غارسيا-شوارتز، دانيال د. (2015). من الحواسيب المركزية إلى الهواتف الذكية: تاريخ صناعة الحواسيب العالمية . مطبعة جامعة هارفارد. ISBN 978-0-674-28655-9.
  • داسواني، نيل ؛ البيادي، مودي (2021). الاختراقات الكبيرة: دروس في الأمن السيبراني للجميع . دار نشر أبريس. رقم ISBN 978-1-4842-6654-0.
  • دولي، جون ف. (2017). تطوير البرمجيات، والتصميم، والبرمجة: مع الأنماط، وتصحيح الأخطاء، واختبار الوحدات، وإعادة البناء . دار نشر أبريس. رقم ISBN 978-1-4842-3153-1.
  • فوستر، إلفيس سي. (2014). هندسة البرمجيات: منهجية منظمة . دار نشر أبريس. رقم ISBN 978-1-4842-0847-2.
  • غابرييلي، ماوريتسيو؛ مارتيني، سيموني (2023). لغات البرمجة: المبادئ والنماذج (الطبعة الثانية  ). سبرينغر. ISBN 978-3-031-34144-1.
  • غالين، دانيال (2018). جودة البرمجيات: المفاهيم والتطبيق . جون وايلي وأولاده. ISBN 978-1-119-13449-7.
  • هابر، موري جيه؛ هيبرت، براد (2018). نواقل هجوم الأصول: بناء استراتيجيات فعالة لإدارة الثغرات الأمنية لحماية المؤسسات . أبريس. ISBN 978-1-4842-3627-7.
  • كاتشماريك، ستيفان؛ ليز، براد؛ بينيت، غاري؛ فيشر، ميتش (2018). لغة البرمجة Objective-C للمبتدئين تمامًا: برمجة سهلة لأجهزة iPhone وiPad وMac . دار نشر Apress. رقم ISBN 978-1-4842-3428-0.
  • كاتيال، سونيا ك. (2019). "مفارقة سرية شفرة المصدر" . مجلة كورنيل للقانون . 104 : 1183.
  • كيتشن، روب؛ دودج، مارتن (2011). مساحة/شفرة: البرمجيات والحياة اليومية . مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 978-0-262-04248-2.
  • لين، دانيال؛ ساغ، ماثيو؛ لوري، رونالد س. (2001). "شفرة المصدر مقابل شفرة الكائن: الآثار المترتبة على براءات الاختراع لمجتمع المصادر المفتوحة" . مجلة سانتا كلارا لقانون الحاسوب والتكنولوجيا المتقدمة . 18 : 235. مؤرشف من الأصل في 20 مايو 2024. تم الاطلاع عليه في 31 مايو 2024 .
  • مورين، أندرو؛ أوربان، جينيفر؛ سلييز، بيوتر (2012). "دليل سريع لترخيص البرمجيات للمبرمجين العلماء" . مجلة PLOS لعلم الأحياء الحاسوبي . 8 (7) e1002598. رمز Bibcode : 2012PLSCB...8E2598M . doi : 10.1371/journal.pcbi.1002598 . ISSN 1553-7358 . PMC 3406002. PMID 22844236 .   
  • أوريغان، جيرارد (2022). دليل موجز لهندسة البرمجيات: من الأساسيات إلى أساليب التطبيق . سبرينغر نيتشر. ISBN 978-3-031-07816-3.
  • سين، رافي؛ سوبرامانيام، تشاندراسيكار؛ نيلسون، ماثيو ل. (2008). "محددات اختيار ترخيص برمجيات المصادر المفتوحة". مجلة نظم إدارة المعلومات . 25 (3). إنفورما المملكة المتحدة المحدودة: 207-240 . doi : 10.2753/mis0742-1222250306 . ISSN 0742-1222 . 
  • سيبستا، روبرت و. (2012). مفاهيم لغات البرمجة (  الطبعة العاشرة). أديسون-ويسلي. ISBN 978-0-13-139531-2.
  • تريسي، كيم و. (2021). البرمجيات: تاريخ تقني . دار مورغان وكلايبول للنشر. رقم ISBN 978-1-4503-8724-8.
  • تريباثي، بريادارشي؛ نايك، كشيراساجار (2014). تطور البرمجيات وصيانتها: نهج الممارس . جون وايلي وأولاده. رقم ISBN 978-0-470-60341-3.
  • فارغا، إرفين (2018). فك شفرة صيانة البرمجيات وتطويرها: التفكير خارج الصندوق . سبرينغر. ISBN 978-3-319-71303-8.