Foundationপ্রথম নীতি থেকে
LEVEL 3 · Assembly Language

ABI

এবিআই

Application Binary Interface — hardware-এ কম্পাইল-হওয়া কোড কীভাবে interact করবে তার নিয়ম: register ব্যবহার, calling convention, data layout। hardware-এনফোর্সড না, সফটওয়্যার-চুক্তি।

also: Application Binary Interface

ISA বলে দেয় hardware কী করতে পারে (কতগুলো register, কী কী instruction)। ABI বলে দেয় compiled code কীভাবে তা ব্যবহার করবে — সম্পূর্ণ ভিন্ন, পৃথক ডকুমেন্ট, hardware-vendor না, OS/compiler-লেখকদের মধ্যে সম্মত।

একই hardware, ভিন্ন ABI চলতে পারে — x86-64-এ System V (Linux/macOS: প্রথম int arg rdi) আর Windows x64 (প্রথম int arg rcx) দুটোই বৈধ, একে অপরের সাথে অসামঞ্জস্যপূর্ণ। এই কারণেই cross-platform C library-তে প্রায়ই আলাদা calling-convention attribute লাগে।

ABI-র আওতায় শুধু calling convention না — struct-এর byte layout (padding, alignment), sizeof নির্দিষ্ট type-এর, name mangling (C++), exception-handling metadata — সবকিছু। দুইটা .o ফাইল ভিন্ন compiler দিয়ে কম্পাইল হয়েও লিংক করতে পারে শুধু যদি দুটোই একই ABI মানে।

Source-compatible হওয়া ABI-compatible হওয়ার গ্যারান্টি না। C++ ভাষায় এটা বিশেষভাবে সত্য — দুইটা compiler ভিন্ন version-এ একই source code থেকে ABI-অসামঞ্জস্যপূর্ণ binary বানাতে পারে (vtable layout, exception-handling ভিন্ন হতে পারে) — এই কারণেই libstdc++/libc++-এর মতো library-তে “ABI stability” আলাদাভাবে একটা explicit প্রতিশ্রুতি হিসেবে documented থাকে।

Hardware ABI ভঙ্গ করলে কোনো error দেয় না — শুধু ভুল register থেকে ভুল মান পড়া হয়, ফলাফল silent corruption অথবা crash, প্রায়ই মূল কারণ থেকে অনেক দূরে।