الإعلانات
لقد قمت للتو بتنزيل تحديث ممتلئ بالميزات إلى تطبيقك المفتوح المصدر المفضل. كل شيء يعمل بشكل جيد ، ويمكنك استخدامه على أجهزتك الأخرى - لذلك فقد حان الوقت لنشرها أيضًا.
باستثناء جهاز الكمبيوتر المحمول Linux الجديد اللامع ، لا يتوافق مع حزمة تثبيت Windows. ماذا عن جهاز Android اللوحي الخاص بك؟ ايفون؟ PS4؟ لماذا لا يمكنك فقط أخذ هذا البرنامج واستخدامه أينما تريد؟ دعنا نستكشف بعض العوائق المختلفة أمام حلم "الشراء مرة واحدة ، الركض في أي مكان".
تطوير البرمجيات والهندسة المعمارية
إن فهم سبب عدم عمل البرنامج عبر أنظمة التشغيل يتطلب معرفة قليلة (فقط ، وأعد) بالكيفية التي يتم بها صنع البرامج.
عملية تطوير البرمجيات
في تدفق تطوير البرامج الأساسي للغاية لسطح المكتب والخادم والجوال (أي ليس الويب البرمجة مقابل تطوير الشبكة: ما هو الفرق؟قد تعتقد أن مبرمجي التطبيقات ومطوري الويب يقومون بنفس المهمة ، لكن هذا بعيد عن الحقيقة. فيما يلي الاختلافات الرئيسية بين المبرمجين ومطوري الويب. اقرأ أكثر ) ، سوف مبرمج:
- اكتب بعض الشفرة في واحد أو أكثر من الملفات.
- ترجمة الرمز إلى شيء يمكن للكمبيوتر تنفيذه.
- اختبار للتأكد من أن البرنامج يعمل كما هو متوقع.
- حزمة وتوزيع / نشر البرنامج.
إنها مزيج من الخطوتين الأولى والثانية التي تهمنا هنا. عملية تجميع البرنامج ، أو تحويله من الشفرة إلى تلك والأصفار التي يفهمها الكمبيوتر (لغة الآلة) معقدة. نحن لا ندخلها بتفصيل كبير ، لكن من المفيد أن نفهم ما يحدث على مستوى عالٍ.
نظام التشغيل العمارة
إحدى النقاط المهمة التي يجب فهمها هي أن نظام التشغيل ليس كيانًا واحدًا. بدلاً من ذلك ، يتكون من طبقات من البرامج.
نواة نظام التشغيل
نظام التشغيل نواة مسؤول عن التواصل مع أجهزة الكمبيوتر. يقوم البرنامج بتوصيل أوامره إلى kernel ، والتي بدورها تصدر أوامر إلى الجهاز (على سبيل المثال) لقراءة ملف من القرص الثابت ، أو رسم نافذة على الشاشة. إنه ينسق أساسًا جميع المعلومات (سواء كانت مخزنة في البيانات أو العمليات الحسابية أو إدخال المستخدم) بين الأجهزة والبرامج المختلفة. يجعل kernel كل هذه الوظائف متاحة للبرامج عبر مكالمات النظام.
ستقوم نواة كل نظام تشغيل بتنفيذ اتصالات النظام بشكل مختلف ، من حيث تلك المتوفرة ، أو ما يطلق عليه ، أو الخيارات التي يتخذونها. نتيجةً لذلك ، يجب أن يأخذ البرنامج في الاعتبار مكالمات النظام التي يدعمها نواة كل نظام تشغيل يستهدفه. قد يكون للنظام الذي تستخدمه لإرسال البيانات إلى GPU في Linux اسم مختلف أو قائمة بالمعلومات التي تحتاجها أو كلاهما في Windows. هذه الدعوة بالضبط قد لا تكون موجودة على الإطلاق.
مكتبات النظام
في كثير من الحالات ، لا يتصل البرنامج مباشرة بالنواة. بدلا من ذلك ، فإنه يدعو ل مكتبات النظام، أو مجموعات من الوظائف الأساسية. المكتبات موجودة (على سبيل المثال) كل برنامج يحفظ الملفات على القرص الصلب لا يحتاج إلى كتابة وظيفة للقيام بذلك. بدلا من ذلك ، ببساطة روابط ل مكتبة نظام ويستخدم وظيفة موجودة. تعد مكتبة GLibC لنظام Linux مثالًا رئيسيًا ، وكذلك ملفات .DLL في Win32 API أو محتويات دليل نظام ماك / مكتبة / ماك كيفية الوصول إلى مجلد مكتبة OS X ولماذا هو مفيدمن الأفضل ترك معظم مجلدات مكتبة OS X بمفردها ، لكن من المفيد معرفة طريقتك داخل مكتبة المستخدم وحولها. اقرأ أكثر .
تعمل مكتبات النظام كنوع من المترجم بين التطبيقات والنواة للمهام الروتينية. جعل التطبيقات المكالمات وظيفة لهذه المكتبات ، التي تتعامل مع الكثير من التفاصيل ذات المستوى المنخفض. يمكنهم أيضًا إجراء مكالمات النظام إلى النواة للراحة. كما قد تكون خمنت ، فهذا يعني أن هذه المكتبات مكتوبة لنواة معينة ، وبالتالي لا يمكن استخدامها عبر أنظمة التشغيل بنواة مختلفة.
رؤوس تنفيذ نظام التشغيل
آخر حاجز أمام البرنامج العالمي هو تنسيق الملفات القابلة للتنفيذ لأنظمة التشغيل. يتوقع نظام التشغيل أن يتم تشغيل الملفات التي يتبعها بشكل خاص تنسيق ملف ثنائي كل ما تحتاج لمعرفته حول تنسيقات الملفات وخصائصهانحن نستخدم كلمة ملف بالتبادل: الموسيقى ، الصورة ، جدول البيانات ، عرض الشرائح ، وهلم جرا. ولكن ما الذي يجعل الملف "ملف" ، على أي حال؟ لنجرب ونفهم هذا الجزء الأساسي من الحوسبة. اقرأ أكثر . على سبيل المثال ، الملفات القابلة للتنفيذ والتنسيق (ELF) التي تعمل على أنظمة التشغيل مثل يجب على Linux و FreeBSD تحديد خصائص معينة للملف في بايتات معينة ، كما هو موضح أدناه صورة.
ال واجهة التطبيق الثنائية (ABI) أظهرت قادرة على أهمية خاصة. يشبه ABI مجموعة من المكالمات المتوفرة من المعالج و kernel و libararies النظام ل واجهة برمجة التطبيقات (API) لأنه يحدد كيفية تواصل برنامجين مع بعضهما البعض. لكن واجهة برمجة التطبيقات (API) هي شيء يستخدمه المبرمجون (البشر) في الكود المصدري للإشارة إلى قطعتين من البرمجيات ينبغي التحدث الى بعضهم البعض. إن ABI هو ما يسمح لهم في الواقع بذلك بمجرد تجميع البرنامج وتشغيله. يقوم كل نظام تشغيل بتنفيذ ABI معين ، والذي قد يتغير أو لا يتغير بين إصدارات نفس نظام التشغيل.
بشكل عام ، تقوم أنظمة التشغيل بتطبيق ABI الخاص بها ، والذي يتم تحديده من خلال مزيج من نوع المعالج و kernel وأي مكتبات نظام قياسية. ولكن في بعض الأحيان سوف ينفذ نظام التشغيل أكثر من واحد. يتمتع FreeBSD بدعم ثنائيات Linux ، على سبيل المثال ، لأنه يوفر Linux ABI كإضافة إلى kernel FreeBSD (بدلاً من kernel Linux). هذا يختلف عن برامج virtualizatiton ما هو الجهاز الظاهري؟ كل ما تحتاج إلى معرفتهتتيح لك الأجهزة الافتراضية تشغيل أنظمة تشغيل أخرى على الكمبيوتر الحالي. إليك ما يجب أن تعرفه عنها. اقرأ أكثر مثل VMWare أو VirtualBox ، التي تستخدم برنامجًا لمحاكاة جهاز كامل (أجهزة وكلها). ونتيجة لذلك ، يكون هذا النوع من التوافق مع ABI أسرع ، ولكن هناك الكثير من الجهد للحفاظ عليه. هذا هو السبب في أنه أمر نادر الحدوث ، على الرغم من مايكروسوفت شهدت مؤخرا القيمة أوبونتو متاح الآن على متجر ويندوزيمكن الآن لـ Windows Insiders تنزيل Ubuntu وتثبيته على Windows 10. يجمع هذا بين نظامي التشغيل Linux و Windows معاً في اتحاد غير مقدس لم يتخيله أحد سوى أنهما سيعيشان طويلاً بما يكفي للشهادة. اقرأ أكثر في القيام بذلك.
استثناء: البرامج المترجمة
استنادًا إلى ما سبق ، علمنا أن المطورين يكتبون برنامجًا لنظام واحد ، ونوع واحد فقط من النظام المستهدف. إلا عندما لا يفعلون ذلك. هناك العديد من التطبيقات التي يمكنك تنزيلها وتشغيلها على جهاز Mac ، ثم نسخها وتشغيلها على نظام Windows ، وربما نسخها وتشغيلها على نظام Linux بدون أي مشاكل. كيف يكون هذا ممكنا؟
هل كنت مستلقيا حتى الآن؟
كما اتضح ، هناك فئة من البرامج التي تظهر على السطح مثل "تعمل في كل مكان". يمكنك تنزيله وتشغيله على أي النظام الأساسي المدعوم - الكلمة الرئيسية "مدعومة". في الواقع ، تقوم بتنزيل الكود المصدري للتطبيق ، بينما يتم تنزيل تطبيق آخر (ال مترجم) هو نوع من تشغيل شفرة المصدر مباشرة في الوقت الحقيقي. هذا شيء من التبسيط المفرط ، لذلك دعونا ننظر في كيفية عمل ذلك بلغتين.
جافا
عندما تم إصدار Java لأول مرة ، كان الوعد (حرفيًا) هو "الكتابة مرة واحدة ، وتشغيلها في أي مكان." كانت الفكرة لخلق التطبيقات باستخدام وظائف Java لمعرفة كيفية حفظ الملفات أو إجراء العمليات الحسابية أو إنشاء تطبيق نافذة او شباك. ثم بيئة تشغيل جافا (JRE) لكل منصة كمبيوتر مدعومة ستقوم بتشغيل الشفرة ، وترجمتها إلى وظائف OS الأصلية. إن الحيل إلى Java ، إذن ، هي أنها لا تعمل "مباشرة" على نظام التشغيل. يتم تشغيله في جزء من JRE يسمى ال آلة جافا الافتراضية وهذا ما يعمل على نظام التشغيل.
عن طريق إدخال طبقة البرامج الإضافية بين التطبيق ونظام التشغيل ، يتيح لك Java التركيز على مجموعة من الوظائف المتماثلة عبر أنظمة التشغيل. يمكنك إخبار Java بما تريد القيام به ، وترك JVM لنظامك قلقًا بشأن كيفية القيام بذلك بالفعل. الصورة أدناه تبين هذا في العمل ، حيث إطار تطبيق Java لسطح المكتب من JIDE Software يعرض نفس التطبيق لنظام التشغيل Mac (في الأعلى) و Windows (في منتصف اليسار) و "Java خالص" (في منتصف اليمين) و Linux (أسفل).
برامج Java لا "تجمع" نفسها بدقة في الوقت الفعلي. بدلاً من ذلك ، فإن برنامج التحويل البرمجي Java سيجعلهم في "bytecode". يمكنك التفكير في bytecode كبرنامج نصف خبز. عندما يقوم المطور بإصدار التطبيق ، يتم تجميعه قدر الإمكان دون معرفة نظام التشغيل الذي سيتم تشغيله. عندما تقوم بالفعل بتشغيله ، فإن JVM "ستخبزها بقية الطريق" لتناسب الوظائف الخاصة بنظام التشغيل المضيف.
الثعبان
لغة ترجمة شعبية هي الثعبان 5 أسباب لماذا بيثون البرمجة ليست عديمة الفائدةبيثون - أنت تحبها أو تكرهها. قد تتأرجح من طرف إلى آخر مثل البندول. بغض النظر ، بيثون هي لغة من الصعب أن تكون متناقضة حولها. اقرأ أكثر . عند تشغيل برنامج نصي Python ، سيقوم مترجم Python بترجمة التعليمات البرمجية إلى تعليمات لنظام التشغيل. يمكن أن تعمل أيضًا بشكل مشابه لجافا: عندما تقوم "باستيراد" الكود من خارج التطبيق الخاص بك ، فإنه يتم تجميعه ليتم ترميزه عند تشغيله لأول مرة. عندها سيعرف المترجم ما إذا كان قد تم تغيير الكود الأصلي في فترات لاحقة ، وفي هذه المرحلة سوف يعيد ترجمته إلى رمز جديد.
من النتائج الثانوية الرائعة لهذا التشغيل "عند الطلب" أنه يمكنك استخدام المترجم الشفهي لتطوير البرامج النصية بشكل تفاعلي. ببساطة عن طريق كتابة "python" في سطر الأوامر ، سوف تبدأ تشغيل المترجم الفوري ، ويمكنك تشغيل الكود ورؤية النتائج على الفور.
هذا يعني أنه يمكن للمطورين اللعب في مكان واحد وتغيير الأشياء "بشكل مباشر". بعد ذلك ، بمجرد قيام سطر من التعليمات البرمجية بعمل ما يريد ، انسخه والصقه في ملف نصي (وهو أكثر فاعلية بكثير من دورة "اختبار التعليمات البرمجية" التي يتعين على مبرمجي اللغات غير المترجمين القيام بها).
حتى عندما يكون البرنامج هو نفسه ، فمن المحتمل ألا يكون كذلك
لسوء الحظ بالنسبة للمستخدمين ، لم تطور صناعة التكنولوجيا نسقًا "عالميًا" حقًا. وقد لا تفعل ذلك أبدا. غالبًا ما يؤدي تقديم هذه الأنواع من المعايير إلى حل "القاسم المشترك الأدنى" ، مع تقديم تنازلات لصالح الحصول على موافقة الجميع.
ماذا تعتقد؟ هل تفضل أن يكون لديك برنامج متوافق عالميًا ، حتى لو كان هذا يعني أنه ليس جيدًا؟ أم أنك موافق على نظام التشغيل الذي تستخدمه ، وليس لديك مصلحة في التطبيقات من منصات أخرى؟ واسمحوا لنا أن نعرف أدناه في التعليقات!
أرصدة الصور: Masterchief_Productions / Shutterstock
كان آرون يتمتع بعمق كبير في التكنولوجيا كمحلل أعمال ومدير مشروع منذ خمسة عشر عامًا ، وكان مستخدمًا مخلصًا لأوبونتو لمدة تقريبًا (منذ Breezy Badger). تشمل اهتماماته المصادر المفتوحة وتطبيقات الأعمال الصغيرة وتكامل نظامي Linux و Android والحوسبة في وضع النص العادي.