ABI 란?
ABI 를 이해하기 가장 좋은 예는 API 와 비교하는 것이다.
Stackoverflow 에서 잘 설명된 답변을 찾아볼 수 있었다.
API (Application Programming Interface)
API는 코드 레벨에서 다른 소프트웨어와 통신하는 인터페이스를 정의한다.
ABI (Application Binary Interface)
ABI는 특정 아키텍처에서 두 개 이상의 소프트웨어 간 하위 수준 이진 인터페이스를 정의한다.
- Application과 상호 작용
- Application이 커널과 상호 작용
- Application이 Library와 상호 작용
즉, ABI는 API와 특정 CPU 아키텍처의 기계 언어를 정의한다.
또 API는 런타임 호환성을 보장하지 않지만 ABI는 기계 언어(Machine lau) 또는 런타임 형식을 정의하기 때문에 이를 보장한다.
CPU 아키텍처?
Xcode > Build Setting > Architectures 아래 그림과 같은 설정을 많이 접해보았지만 어떻게 쓰이는지 다음 기회에 알아보도록 하겠다.
이 포스트에서는 아키텍처 설명은 깊게 다루지 않습니다. 자세한 설명은 여기에서 확인할 수 있습니다.
[아키텍처 별 애플기기 모델]
런타임 호환성???
API 는 런타임 호환성을 보장하지 않고 ABI 는 런타임 호환성을 보장해준다고 한다.
런타임 호환성이란... 무엇일까..?
여기에서 그 내용을 확인할 수 있었다.
Binary framework & runtime compatibility enables the distribution of frameworks in a binary form that works across multiple Swift versions. Binary frameworks include both a Swift module file, which communicates source-level information of the framework's API, and a shared library, which provides the compiled implementation that is loaded at runtime. Thus, there are two necessary goals for binary framework compatibility:
예를 들면)
라이브러리를 사용하다보면 Swift 버전이 맞지 않아서 라이브러리 업데이트를 기다려야 하는 경우가 많았다.
런타임 호환성이란 Swift 버전과 상관없이 라이브러리를 사용할 수 있다는 의미로 생각해도 될 것 같다.
API가 런타임 호환성을 보장하지 않는 이유를 생각해보자.
다시 API 정의를 상기시켜보면 API는 코드 레벨에서 다른 소프트웨어와 통신하는 인터페이스를 정의한다.
코드 레벨에서 인터페이스를 정의하기 때문에 Swift 버전에 영향을 받을 수 밖에 없다.
이제 다른 주제로 넘어가서 ABI Stability 를 살펴보자.
ABI Stability?
ABI 안정성이 왜 필요한가?
왼쪽 그림은 안정성이 있지만 오른쪽은 안정성이 없다고 말할 수 있다.
클라이언트가 사용할려는 Draw 1.2 draw_polygon() 함수가 삭제되면서 Draw2.0 과의 호환성을 유지할 수 없기 때문이다.
즉, 사용할려는 클라이언 입장에서 라이브러리의 버전 호환성을 지원해줘야 하는 것이 Stability 라고 말할 수 있다.
더 자세히 알고 싶다면 ABI Stability Manifesto 를 참조하길 바란다.
참조:
https://github.com/apple/swift/blob/master/docs/ABIStabilityManifesto.md
http://kyejusung.com/2015/10/armv7s-armv7-arm64%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90/
https://codeday.me/ko/qa/20190306/4138.html
https://github.com/apple/swift/blob/master/docs/ABIStabilityManifesto.md
https://medium.com/swiftify/swift-5-and-abi-stability-the-best-time-to-migrate-d4029d5342e9