# Application binary interface
Application binary interface (ABI)("(Türkçesi: Uygulama İkili Arayüzü") bilgisayar bilimlerinde, ikili (binary) program modülü arasındaki arayüzü tanımlar. Genellikle bu modüllerden biri bir kütüphane veya işletim sistemi bileşeni, diğeri ise kullanıcı tarafından çalıştırılan bir programdır. ABI, kaynak kod seviyesinde tanımlanan Application Programming Interface (API) ile karşılaştırıldığında, daha düşük seviyede, donanım ve derleyiciye bağımlı bir arayüzdür. API, kaynak kodu seviyesinde erişimi tanımlarken, ABI derlenmiş kod seviyesinde erişimi tanımlar.


## Temel özellikler.
İşlemci komut seti: Hangi işlemci komutlarının ve uzantılarının kullanılabileceğini belirler.
Veri tiplerinin boyutu, yerleşimi ve hizalaması: Temel veri tiplerinin bellekte nasıl saklanacağını ve erişileceğini tanımlar.
Fonksiyon çağırma kuralları (calling convention): Fonksiyonlara parametrelerin nasıl aktarılacağı, dönüş değerlerinin nasıl alınacağı, hangi yazmaçların kullanılacağı, yığının (stack) nasıl organize edileceği ve fonksiyon çağrısından sonra yığının temizlenmesinden kimin sorumlu olacağı gibi detayları içerir
İsim karmaşası (name mangling): Özellikle C++ gibi dillerde, fonksiyon ve değişken isimlerinin derleyici tarafından nasıl değiştirileceğini belirler.
İstisna aktarımı (exception propagation): Hataların ve istisnaların nasıl ele alınacağını tanımlar.
Sistem çağrıları: Uygulamaların işletim sistemine nasıl sistem çağrısı yapacağını ve hangi sistem çağrı numaralarının kullanılacağını belirler.
İkili dosya formatları: Nesne dosyalarının, program kütüphanelerinin ve çalıştırılabilir dosyaların formatını tanımlar (örneğin ELF)


## ABI ve taşınabilirlik.
Bir ABI, belirli bir donanım mimarisi ve işletim sistemi kombinasyonu için tanımlanır. Bu nedenle, farklı mimariler (örneğin x86, ARM) veya işletim sistemleri arasında ortak bir ABI oluşturmak genellikle mümkün değildir. Ancak, Java Virtual Machine gibi sanal makineler, farklı platformlar arasında taşınabilirliği sağlamak için kendi ABI'lerini tanımlarlar.


## ABI'nin yazılım geliştirmedeki rolü.
İkili Uyumluluk (Binary Compatibility): ABI uyumu korunduğu sürece, yazılım bileşenlerinin farklı sürümleri arasında yeniden derleme gerekmeksizin çalışabilirlik sağlanır.
Çoklu Dil ve Derleyici Desteği: Farklı programlama dilleri veya derleyicilerle yazılmış kodların birlikte çalışabilmesi için ABI uyumu gereklidir.
Platforma Özel Derleme: Derleyici ve diğer geliştirme araçları, hedef platformun ABI'sine uygun kod üretirler.


## API ile ABI arasındaki temel farklar.
API, kaynak kod seviyesinde bir arayüzdür ve genellikle bir yazılım bileşeninin diğer bir bileşenle nasıl iletişim kuracağını tanımlar. API, fonksiyon isimleri, parametreler, veri tipleri ve dönen değerler gibi bilgileri içerir ve donanım ya da derleyiciye bağımlı değildir. Yazılım geliştiricileri API’yi kullanarak kodlarını yazar ve derlerler.
ABI ise derlenmiş kod seviyesinde bir arayüzdür. Bir programın veya kütüphanenin, başka bir program veya işletim sistemiyle ikili (binary) düzeyde nasıl iletişim kuracağını belirler. ABI, veri tiplerinin bellekte nasıl saklanacağı, fonksiyonlara parametrelerin nasıl aktarılacağı, dönüş değerlerinin nasıl alınacağı ve sistem çağrılarının nasıl yapılacağı gibi donanım ve derleyiciye bağımlı teknik detayları kapsar. ABI uyumu, farklı yazılım bileşenlerinin yeniden derlenmeden birlikte çalışabilmesini sağlar.