ARM과 x86은 대표적인 아키텍처이다. 짧게 아키텍처라고도 많이 불리는 이들은 엄밀히 말하면 ISA(명령어 집합 아키텍처, 명령어셋 아키텍처, Instruction Set Architecture)에 속하는 개념으로, 그 종류로는 MIPS, RISC-V, AMD 등 여럿이 있다.
CPU는 선택된 ISA에 맞춰 개발되며 대표적으로 Apple Silicon 칩은 ARM을 기반으로 하고, Intel 칩은 x86 아키텍처를 기반으로 만들어진다.
최근의 양상으로 보면, MacOS를 쓰는 Apple 노트북들은 CPU 칩을 M1 시리즈로 채택하고, Windows를 기본 OS로 하여 판매되는 노트북은 x86을 채택하는 CPU를 쓰는 경우가 많기에, MacOS면 ARM, Windows면 x86으로 연상할 수도 있지만, OS와 아키텍처는 상관관계가 있어보이더라도 구별해야 하는 개념이다. 같은 Windows더라도 x86용 Windows, ARM용 Windows가 따로 있듯, OS는 아키텍처 별로 지원된다.
어플리케이션도 어떤 바이너리 파일과 라이브러리를 사용하느냐에 따라 아키텍처의 영향을 받을 수 있어 이 때문에 우리가 컴퓨터에 다운로드해 실행하는 어플리케이션들은 각각의 명령어 집합 아키텍처에 맞게 실행되도록 개발된다. 즉, ARM에서 구동될 수 있는 ARM용 어플리케이션과 x86 아키텍처로 실행될 수 있는 x86용 어플리케이션으로 따로 개발된다. 어떤 프로그램을 다운로드 받을 때 ARM과 x86, 혹은 필요 시 OS에 따라서도 나뉘어져 있는 파일들 중 PC에 맞게 선택해 다운로드 받는 이유이다.
이런 흐름으로 보면 x86 아키텍처를 기반으로 하는 PC에서 잘 실행되던 프로그램이 ARM 기반 PC에서는 동작하지 않는 게 당연한 일로 여겨지지만, 간혹가다 개발을 하다보면 호환될 것으로 기대해 실행한 프로그램들이 이러한 이유로 호환되지 않아 예기치 못하게 애를 먹는 경우가 종종 있었다. 이를 대비해서 사용하는 게 바로 크로스 컴파일이기도 하고, 이 둘을 매개하여 정상 동작을 도와주는 프로그램들 역시 있다. 간단한 학교 팀플 과제를 할 때도 CMake를 써서 서로 다른 아키텍처를 기반으로 하는 팀원들의 컴퓨터들에서 모두 동작하는 프로그램이 되도록 컴파일 옵션을 맞추는 작업 역시 간소화된 크로스 컴파일 적용 작업이라고 볼 수 있다.
이를 도와주는 프로그램으로 대표적으로, ARM 아키텍처 위에서 x86용 어플리케이션이 실행될 수 있도록 만들어 주는 에뮬레이터 프로그램인 rosetta와, 그 역으로 x86 아키텍처 위에서 ARM 용 어플리케이션이 실행될 수 있게 해주는 프로그램인 Houdini가 있다. 이들을 설치한 뒤 활성화하여 사용하면 어플리케이션을 다른 아키텍처 위에서도 동작할 수 있게 호환성을 맞춰 사용할 수 있게 된다.
아래는 Mac에서 Rosetta를 이용해 터미널을 실행시키는 방법이다.
- iTerm 혹은 terminal 열기
- Applications 혹은 Applications/Utilities로 이동
1
cd Applications - iTerm.app 혹은 Terminal 있는 디렉토리 찾아 이동
1
open . - iTerm.app 혹은 Terminal 우클릭 후 ‘정보 가져오기’ 클릭
- ‘rosetta를 사용하여 열기’ 활성화