واجهة التطبيق الثنائية

تصغير|300px|مقارنة بين واجهة برمجة التطبيقات و واجهة التطبيق الثنائية في داخل النواة و من النواة إلى مساحة اسم المستخدم.
[تصغير|300px|[نواة لينكس ومكتبة جنو لسي تحدد واجهة نواة لينكس. بعد التحويل البرمجي، تقدم الثنائيات واجهة تطبيق ثنائية؛ وإنه لمن المهم بالنسبة لبائعي البرامج المستقلين الحفاظ على واجهة التطبيق الثنائية هذه لفترة طويلة.]]

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

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

## الوصف
تغطي واجهة التطبيق الثنائية عدة تفاصيل مثل:

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

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

واجهات تطبيق ثنائية أخرى توحد التفاصيل وعلى سبيل المثال تغييرات الاسم في لغة سي++، ونشر تدابير الحالات الاستثنائية واصطلاح الاستدعاء بين المحولات البرمجية على نفس النظام الأساسي، والتي لا تتطلب توافقية متعددة المنصات.

## واجهات التطبيق الثنائية المضمنة
تحدد الواجهة الثنائية المضمنة (أو المدمجة) للتطبيق الاصطلاحات القياسية لصيغة الملفات وأنواع البيانات واستخدام السجل وتنظيم إطار المكدس ومعلمة الدالة التي تمر عبر برنامج مضمن للاستخدام مع نظام تشغيل مضمن.

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

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

واجهات التطبيق الثنائية المضمنة المستخدمة على نطاق واسع تشمل:

باور بي سي، واجهة التطبيق الثنائية المضمنة بنية إيه آر إم، وواجهة التطبيق الثنائية المضمنة لمجموعة تعليمات ميبس
## المراجع

## روابط خارجية

* Policies/Binary Compatibility Issues With C++ خلاصة وافية لقواعد التطوير الأساسية لعدم كسر التوافق الثنائي بين إصدارات المكتبة
* https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/LowLevelABI/000-Introduction/introduction.html دليل استدعاء وظيفة OS X ABI
* Debian ARM EABI port
* μClib: Motorola 8/16-bit embedded ABI
* AMD64 (x86-64) Application Binary Interface
* Application Binary Interface (ABI) for the ARM Architecture
* MIPS EABI documentation
* Sun Studio 10 Compilers and the AMD64 ABIملخص ومقارنة لبعض واجهات التطبيق الثنائية المشهورة.

تصنيف:تقنيات نظم التشغيل
تصنيف:واجهات برمجة التطبيقات