유니버설 바이너리

유니버설 바이너리(Universal binary)는 애플 용어로, 파워피씨나 X86 (인텔) 기반의 매킨토시 컴퓨터에서 에뮬레이션 과정 없이 그대로 실행되는 실행 파일이나 응용 프로그램을 가리킨다.

기존의 파워피씨 아키텍처를 인텔 프로세서 기반의 시스템으로의 쉽게 변환하는 수단으로 2005년 WWDC에서 처음 선보였으며, 2006년에 출시를 시작하였다.

유니버설 바이너리는 보통, 파워피씨와 X86 버전으로 컴파일된 응용 프로그램을 포함하고 있다. 운영 체제는 헤더를 통해 유니버설 바이너리를 찾아내고 사용 중인 아키텍처에 따라 적절한 섹션을 실행한다. 응용 프로그램이 어떠한 지원 아키텍처에서도 실행할 수 있게 도와 주며 어떠한 성능 저하도 일어나지 않는다.

WWDC 2020에서 Apple Silicon으로의 이전을 위해 X86과 ARM 버전을 포함하는 유니버설 2가 발표되었다.

동기 
분리된 두 플랫폼에 모두 사용할 수 있는 프로그램을 만드는 데는 기본적으로 두 가지 대책이 있다. 첫째는 (편리한 방법은 아니지만) x86 시스템을 위한 바이너리와 PowerPC를 위한 바이너리를 제공하는 것이다. 그러나 이것은 두 플랫폼 사이의 차이를 모르는 사용자에게 매우 불편하다는 단점이 있다. 다른 대안은 에뮬레이터에 의존하는 것이다. 실행 속도가 느리지만 유니버설 바이너리나 특별히 두 플랫폼 모두 호환되게 컴파일된 바이너리 파일이 나오기 전까지는 유일한 대안에 속했다.(로제타 참고)

유니버설 바이너리는 각각의 플랫폼을 위한 코드가 분리되어 들어있으므로 한 플랫폼만 지원하는 바이너리 파일보다는 보통 더 많은 공간을 차지한다. 보통은 간단히 두 바이너리 파일을 합친 것보다는 작은데, 이것은 실행이 목적이 아닌 자원들은 두 아키텍처에 의해 공유되기 때문이다.  실행하는 플랫폼에 맞는 바이너리만 적재되므로 추가적인 램 공간 또한 차지하지 않는다.

역사 
과거에 애플은 1990년대 중반 68k 프로세서를 파워PC로 변화시키는 동안 비슷한 기법을 사용하였다. 이 듀얼 플랫폼 실행 파일들은 파일 크기가 컸기 때문에 팻 바이너리(뚱뚱한 이진 파일)라고 불렀다.

OS X의 전작인 넥스트스텝은 팻 바이너리를 지원함으로써 하나의 응용 프로그램 번들이 여러 아키텍처에서 실행될 수 있었다. 여기에는 모토로라의 m68k, 인텔의 x86, 썬 마이크로시스템스의 SPARC, 휴렛 패커드의 PA-RISC를 포함한다. 이 유니버설 바이너리의 기반이 되는 바이너리 포맷인 Mach-O 아카이브는 넥스트스텝의 팻 바이너리에 사용된 포맷과 동일하다.

애플의 엑스코드 2.1은 해당 판의 신기능으로서 이러한 파일들을 만드는 것을 지원한다.

애플의 엑스코드 2.4는 더 나아가 유니버설 바이너리의 개념을 취하였고, 4개의 아키텍처의 바이너리(32비트와 64비트의 인텔 및 파워PC)를 만들 수 있게 한다. 그러므로 하나의 실행 파일이 OS X 기기의 모든 CPU 기능을 사용할 수 있게 한다.

유니버설 2 

2020년 6월 22일, 애플은 2020년 말 macOS 빅서를 기점으로 인텔 x86-64 기반 프로세서를 ARM64 기반 애플 실리콘으로 2년 간 전환을 진행한다고 발표하였다. 이 전환을 지원하기 위해 새로운 유니버설 2 바이너리가 도입되어 애플리케이션들이 x86-64 기반 프로세서나 ARM64 기반 프로세서에서 실행할 수 있게 되었다.

같이 보기 
 애플-인텔 아키텍처
 애플 인텔 변화
 패트 바이너리

각주

외부 링크 
 애플의 "유니버설 응용 프로그램" 페이지, 현재의 유니버설 응용 프로그램 목록
 애플 개발자 변화 리소스 센터
 애플 유니버설 바이너리 프로그래밍 가이드라인

MacOS