شيفرة مصدرية

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

تعريفات

يعرف نظام معلومات لينوكس الكود المصدري على النحو التالي:
شفرة المصدر (يشار إليها أيضًا باسم المصدر أو الشفرة) هي إصدار البرنامج كما هو مكتوب في الأصل (مكتوبًا في الحاسوب) بواسطة شخص بنص عادي أي (الأحرف الأبجدية الرقمية مقروءة من البشر).
يمكن أيضا أخذ فكرة بشكل أوسع من شفرة المصدر، لتضمين رمز الآلة والإشعارات باللغات الرسومية، ولا يعتبر أي منهما نصأ بطبيعته. مثال من مقالة تم تقديمها حول مؤتمر IEEE السنوي وحول تحليل تعليمات رمز المصدر. 
غالبًا ما تكون هناك عدة خطوات لترجمة البرنامج أو التلاعب به بين شفرة المصدر الأصلية المكتوبة بواسطة إنسان وقابل للتنفيذ. في حين أن البعض، مثل مؤسسة البرمجيات الحرة (FSF)، يجادلون بأن ملف وسيط "ليس رمز مصدر حقيقي ولا يحسب كشفرة المصدر"،  يجد آخرون أنه من المناسب الرجوع إلى كل ملف بسيط ككود المصدر للخطوات التالية.

نبذة تاريخية

تم إدخال أول البرامج الخاصة بأجهزة الحاسوب المخزنة في برنامج ثنائي من خلال مفاتيح اللوحة الأمامية للحاسوب. لم تكن الجيل الأول من لغات البرمجة هذه مميزة بين شفرة المصدر ولغة الآلة.
عندما قدمت IBM لأول مرة برنامجًا للعمل مع الأجهزة، تم توفير شفرة المصدر بدون أي رسوم إضافية. في ذلك الوقت، تم تضمين تكلفة تطوير البرامج ودعمها في سعر الجهاز. لعقود من الزمان، قامت IBM بتوزيع كود المصدر مع تراخيص منتجات البرمجيات الخاصة بها، بعد عام 1999.
نشرت معظم مجلات الحاسوب المبكرة شفرة المصدر باعتبارها نوع من البرامج.
من حين لآخر يتم نشر شفرة مصدر لبرامج كبيرة مثل كتاب مقوى مثل أجهزة الحاسوب والتنضيد.

منظمة

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

المقاصد

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

الجوانب القانونية

انظر أيضًا: تاريخ البرمجيات الحرة والمفتوحة المصدر
يختلف الوضع في جميع أنحاء العالم، ولكن في الولايات المتحدة قبل عام 1974، لم تكن البرمجيات وشفرة المصدر محمية بحقوق التأليف والنشر، وبالتالي دائمًا برامج المجال العام.
في عام 1974، قررت اللجنة الأمريكية للاستخدامات التكنولوجية الحديثة للأعمال المحمية بحقوق الطبع والنشر (CONTU) أن "برامج الحاسوب، إلى الحد الذي تجسد فيه الخلق الأصلي للمؤلف، هي موضوع مناسب لحقوق النشر".
في عام 1983 في قضية المحكمة الأمريكية أبل ضد فرانكلين حكمت أن الشيء نفسه ينطبق على رمز الكائن. وأن قانون حق المؤلف أعطى برامج الحاسوب حالة حقوق التأليف والنشر للأعمال الأدبية.
في عام 1999، في قضية الولايات المتحدة في قضية بيرنشتاين ضد الولايات المتحدة، قضت المحكمة كذلك بأن قانون المصدر يمكن اعتباره شكلاً من أشكال حرية التعبير المحمية دستوريًا. جادل أنصار حرية التعبير بأنه نظرًا لأن رمز المصدر ينقل المعلومات إلى المبرمجين، مكتوب بلغة، ويمكن استخدامه لمشاركة الفكاهة وغيرها من الأعمال الفنية، فإنه يعد شكلاً محميًا للتواصل.

الترخيص

المادة الرئيسية: رخصة البرمجيات
مؤلف العمل غير العادي مثل البرمجيات،  لديه العديد من الحقوق الحصرية، من بينها حقوق النشر الخاصة بالكود المصدري ورمز الكائن.   يمتلك المؤلف الحق وإمكانية منح العملاء ومستخدمي برامجه بعض حقوقه الحصرية في شكل ترخيص البرامج. يمكن ربط البرمجيات ورمز مصدرها المرفق بالعديد من نماذج الترخيص؛ التمييز الأكثر أهمية هو البرمجيات مفتوحة المصدر مقابل البرمجيات الاحتكارية. يتم ذلك عن طريق تضمين إشعار حقوق النشر الذي يعلن شروط الترخيص. إذا لم يتم العثور على أي إخطار، فيعني ذلك أن الافتراضي لجميع الحقوق محفوظة.
وبوجه عام، يكون البرنامج مفتوح المصدر إذا كان رمز المصدر مجانيًا للاستخدام والتوزيع والتعديل والدراسة والملكية إذا كان الكود المصدري سرًا، أو مملوكًا ومقيّدًا بشكل خاص. من أول تراخيص البرامج التي يتم نشرها ومنح هذه الحريات بشكل صريح رخصة جنو العمومية في عام 1989؛ رخصة بي إس دي هي مثال مبكر آخر من عام 1990.
بالنسبة للبرمجيات الاحتكارية، يتم استخدام أحكام مختلف قوانين حقوق النشر والسرية التجارية وبراءات الاختراع لإبقاء رمز المصدر مغلقًا. بالإضافة إلى ذلك، تأتي العديد من برامج البيع بالتجزئة مع اتفاقية ترخيص المستخدم النهائي (EULA) التي تحظر عادة فك أو إلغاء الهندسة أو التحليل أو التعديل أو التحايل على حماية النسخ. تتضمن أنواع الحماية من التعليمات البرمجية المصدر - بخلاف التجميع التقليدي إلى رمز الكائن - تشفير التعليمات البرمجية أو تشويش التعليمات البرمجية أو تشفير الشفرة

الجودة

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