واجهات نواة لينكس

واجهة برمجة تطبيقات لينكس، وواجهة التطبيق الثنائية للينكس، وواجهات برمجة التطبيقات وواجهات التطبيق الثنائية داخل النواة

توفر نواة لينكس واجهات متعددة لبرامج مساحة المستخدم وبرامج وضع النواة . يمكن تصنيف هذه الواجهات إما كواجهة برمجة تطبيقات (API) أو واجهة ثنائية للتطبيقات (ABI)، ويمكن تصنيفها أيضاً إما كواجهات خاصة بالنواة ومساحة المستخدم أو واجهات داخلية خاصة بالنواة.

واجهة برمجة تطبيقات لينكس

تتكون واجهة برمجة تطبيقات لينكس من واجهة استدعاء النظام لنواة لينكس، ومكتبة GNU C (من GNU )، و libcgroup ، [ 1 ] و libdrm ، و libalsa و libevdev [ 2 ] (من freedesktop.org ).
واجهة برمجة تطبيقات لينكس مقابل واجهة برمجة تطبيقات POSIX

تتضمن واجهة برمجة تطبيقات لينكس واجهة برمجة تطبيقات نواة النظام - مساحة المستخدم، والتي تتيح للتعليمات البرمجية في مساحة المستخدم الوصول إلى موارد وخدمات نواة لينكس. [ 3 ] وهي تتألف من واجهة استدعاء النظام لنواة لينكس والروتينات الفرعية في مكتبة C القياسية . وقد انصبّ تركيز تطوير واجهة برمجة تطبيقات لينكس على توفير الميزات القابلة للاستخدام للمواصفات المحددة في معيار POSIX بطريقة تتسم بالتوافق والمتانة والأداء العالي، بالإضافة إلى توفير ميزات إضافية مفيدة غير محددة في معيار POSIX، تمامًا كما توفر واجهات برمجة تطبيقات نواة النظام - مساحة المستخدم في الأنظمة الأخرى التي تُطبّق واجهة برمجة تطبيقات POSIX ميزات إضافية غير محددة في معيار POSIX.

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

يُكتب الكثير من البرامج المجانية والمفتوحة المصدر المتاحة لواجهة برمجة تطبيقات POSIX. ونظرًا لأن تطوير نواة لينكس يتدفق إليها بشكل أكبر بكثير مقارنةً بمجموعات النواة ومكتبة C القياسية الأخرى المتوافقة مع POSIX، فقد تم تعزيز نواة لينكس وواجهة برمجة تطبيقاتها بميزات إضافية. وقد يوفر البرمجة لواجهة برمجة تطبيقات لينكس الكاملة، بدلاً من واجهة برمجة تطبيقات POSIX فقط، مزايا في الحالات التي تكون فيها هذه الميزات الإضافية مفيدة. ومن الأمثلة الحالية المعروفة udev و systemd و Weston . [ 5 ] ويدعو أشخاص مثل لينارت بوتيرينغ علنًا إلى تفضيل واجهة برمجة تطبيقات لينكس على واجهة برمجة تطبيقات POSIX، حيثما توفر هذه الأخيرة مزايا. [ 6 ]

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

واجهة استدعاء النظام لنواة لينكس

تُعرَّف واجهة استدعاء النظام لنواة النظام بأنها مجموعة جميع استدعاءات النظام المُنفَّذة والمتاحة في النواة. في نواة لينكس، تُعرِّف أنظمة فرعية مختلفة، مثل مدير العرض المباشر (DRM)، استدعاءات نظام خاصة بها، وكلها جزء من واجهة استدعاء النظام.

تُناقش علنًا العديد من المشكلات المتعلقة بتنظيم استدعاءات نظام نواة لينكس. وقد أشار إلى هذه المشكلات كلٌ من آندي لوتوميرسكي ومايكل كيريسك وآخرون. [ 8 ] [ 9 ] [ 10 ] [ 11 ]

مكتبة C القياسية

مكتبة GNU C هي عبارة عن غلاف حول واجهة استدعاء نظام نواة لينكس.

تتضمن مكتبة C القياسية لنظام Linux أغلفةً حول استدعاءات النظام الخاصة بنواة Linux؛ ويُشكّل الجمع بين واجهة استدعاءات النظام الخاصة بنواة Linux ومكتبة C القياسية ما يُعرف بواجهة برمجة تطبيقات Linux (API). ومن بين التطبيقات الشائعة لمكتبة C القياسية ما يلي:

على الرغم من أن المشهد يتغير، إلا أن glibc لا تزال من بين هذه الخيارات هي التنفيذ الأكثر شيوعًا، لدرجة أن الكثيرين يعتبرونها الإعداد الافتراضي والمصطلح مرادفًا لـ libc.

إضافات إلى POSIX

كما هو الحال في الأنظمة الأخرى الشبيهة بنظام يونكس ، توجد إمكانيات إضافية لنواة لينكس لا تُعد جزءًا من معيار POSIX:

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

مكتبات إضافية

واجهة التطبيق الثنائية لنظام لينكس

واجهة برمجة تطبيقات لينكس وواجهة التطبيق الثنائية

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

يجب تعريف واجهة التطبيق الثنائية (ABI) لكل مجموعة تعليمات، مثل x86 و x86-64 و MIPS و ARMv7-A (32 بت) و ARMv8-A (64 بت) وما إلى ذلك مع ترتيب البايتات ، إذا كان كلاهما مدعومًا.

ينبغي أن يكون النظام قادراً على تجميع البرنامج باستخدام مُجمِّعات مختلفة وفقاً للتعريفات المحددة في واجهة التطبيق الثنائية (ABI) وتحقيق توافق ثنائي كامل. ومن أمثلة المُجمِّعات المجانية والمفتوحة المصدر : مجموعة مُجمِّعات جنو (GNU Compiler Collection ) و LLVM / Clang .

واجهات برمجة التطبيقات داخل النواة

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

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

واجهات برمجة التطبيقات داخل النواة

بما أنه لا توجد واجهات برمجة تطبيقات مستقرة داخل النواة، فلا يمكن أن تكون هناك واجهات برمجة تطبيقات مستقرة داخل النواة. [ 16 ]

واجهات برمجة التطبيقات التجريدية

OpenGL هي في الواقع واجهة برمجة تطبيقات تجريدية للاستفادة من وحدات معالجة الرسومات المتنوعة من موردين متعددين دون الحاجة إلى البرمجة لكل منها على حدة.
لكن تنفيذ مواصفات OpenGL يتم على وحدة المعالجة المركزية ضمن سياق نظام التشغيل قيد التشغيل. وكان أحد أهداف تصميم Vulkan هو تقليل مهام "برنامج تشغيل الرسومات"، أي تنفيذ واجهة برمجة تطبيقات الرسومات.

في العديد من حالات الاستخدام، تُعتبر واجهة برمجة تطبيقات لينكس منخفضة المستوى للغاية، لذا يجب استخدام واجهات برمجة تطبيقات ذات مستوى تجريد أعلى. يجب تنفيذ واجهات برمجة التطبيقات عالية المستوى فوق واجهات برمجة التطبيقات منخفضة المستوى. أمثلة:

انظر أيضاً

مراجع

  1. 1 2 "ControlGroupInterface" . freedesktop.org .
  2. "libevdev" . freedesktop.org .
  3. أليساندرو روبيني (2006-11-02). "استدعاءات نظام النواة" . linux.it . تم الاسترجاع في 2014-11-11 .
  4. لينوس تورفالدز (23 ديسمبر 2012). "ردًا على: [ تراجع مع التصحيح ] يتسبب تعديل الوسائط في خلل في مساحة المستخدم (كان: ردًا على: لينكس 3.8-rc1)" . قائمة بريدية لنواة لينكس . تم الاطلاع بتاريخ 26 أغسطس 2014. إذا أدى تغيير ما إلى تعطل برامج المستخدم، فهذا خطأ في النواة. لا نلوم برامج المستخدم أبدًا.
  5. "الاختيار بين سهولة الحمل والابتكار" . LWN.net . 2011-03-02.
  6. "مقابلة: لينارت بوتيرينغ - سيلقي لينارت بوتيرينغ محاضرة بعنوان "Systemd: beyond init" في مؤتمر FOSDEM 2011" . fosdem.org. 2011. تاريخ الاطلاع: 16-06-2014 . في الواقع، أرى أن واجهة برمجة تطبيقات لينكس (Linux API) تحل محل واجهة برمجة تطبيقات POSIX، وأن لينكس هو محور تطوير البرمجيات الحرة. لذلك، أنصح المطورين بتجربة البرمجة مع التركيز على لينكس فقط، واكتشاف الحرية والفرص التي يوفرها. لذا، احصل على نسخة من كتاب " واجهة برمجة تطبيقات لينكس" (The Linux Programming Interface) ، وتجاهل كل ما يقوله عن توافق POSIX ، وابدأ بتطوير برامج لينكس الرائعة. ستشعر براحة كبيرة!
  7. مايكل كيريسك (31 يناير 2016). "كيفية تصميم واجهة برمجة تطبيقات لنواة لينكس" . تم الاطلاع عليه بتاريخ 4 فبراير 2016 .
  8. "تنظيم استدعاء النظام" .
  9. "إنشاء قائمة شاملة لاستدعاءات النظام؟" . LKML . 2014-02-27.
  10. "Flags as a system call API design pattern" . LWN.net . 2014-02-12.
  11. "حول استدعاءات النظام الظاهري وvDSO" . LWN.net . 2011-06-08.
  12. " [ PATCH, RFC ] random: إضافة استدعاء النظام getrandom(2)" . LKML . 2014-07-17.
  13. "memfd.c" . GitHub .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  14. "نظام NetBSD 7.0 سيحتوي أخيرًا على برامج تشغيل DRM/KMS" . فورونيكس . 19-03-2014.
  15. "واجهة برنامج تشغيل نواة لينكس" .
  16. "تحليل تغييرات واجهة التطبيق الثنائية في نواة لينكس" . مختبر أندريه بونومارينكو لواجهات التطبيق الثنائية. 15-03-2016.