나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2025-02-03 01:51:34

호환성 레이어

1. 개요2. 에뮬레이터와의 차이3. 목록

1. 개요

互換性階層, compatibility layer

한 OS에서 구동되는 프로그램을 다른 OS에서 구동되도록 코드를 변환해주는 소프트웨어를 말한다.

2. 에뮬레이터와의 차이

넓은 의미에서 호환성 레이어도 에뮬레이터라고 불리나 엄밀히 따지면 다른게 에뮬레이터는 원본 하드웨어를 모방하도록 하드웨어와 CPU를 가상화 시켜 구현된 환경 안에서 프로그램을 구동하는 거라면 호환성 레이어는 CPU 명령어 변환 없이 프로그램의 '코드' 자체를 번역해주어 네이티브 하게 읽는 것에 가깝다.

따라서 에뮬레이터는 성능 손실이 크지만 더 많은 호환성을 자랑하고[1], 호환성 레이어는 성능 손실이 거의 없는 편이지만[2] 호환성이 더 낮다. 물론 이는 각 에뮬/호환성 레이어의 개발 수준에 따라 차이가 있을 수 있으니 보편적으로는 그렇단거지 절대적인 것은 아니다.

이해하기 쉽게 비유하자면, 원본 윈도우 OS는 일본인이고, 리눅스 기기는 한국인이라 치자. 윈도우용 프로그램은 말하자면 일본어로 된 원서이다. 당연히 이는 일본인(윈도우)가 아무런 문제 없이 읽을 수(실행할 수) 있다.

하지만 이를 일본어를 할 줄 모르는 한국인(리눅스 기기)의 입장에서는 전혀 읽을 수(실행할 수) 없다. 이때 등장하는 것이 바로 '호환성 레이어'인데, 여기서는 기계식 번역기로 비유할 수 있겠다. 물론 번역기라고는 해도 성능이 그리 좋은 번역기는 아니라서, 번역기 스스로 문장의 맥락을 파악하는게 아니다. 말하자면 적당히 의역을 할 줄 모르고 그저 문장 속 단어나 조사만 말그대로 치환/변환하는 극한의 직역을 하는 것이다. 하지만 한국어와 일본어는 기본적인 문장 구조가 비슷해서 이를 이해하는데는 크게 어렵진 않으며, 번역기도 저사양으로 돌아가다보니 사양을 크게 잡아먹지 않는다.

물론 100% 완벽한 번역을 담보하지는 못한다. 예를들어 일본인만 알아들을 수 있는 유머코드나 개그같은건 별도의 설명 없이 그대로 직역할 뿐이기에 한국인이 이해하지 못하며, 그러한 내용이 전반적으로 많거나 전체 내용을 이해하는데 필수적인 경우 한국인은 그 책의 내용을 온전히 다 이해하기 어렵다. (일부 프로그램은 실행이 되지 않거나, 실행되다가 특정 구간에서 오류가 나며 프로그램이 꺼지는 등)

여기서 에뮬레이터는 말하자면 일본어와 한국어를 모두 할 줄 아는것은 물론, 일본 한국 두 문화 전반에 대한 이해가 깊은 인간의 뇌를 가상화시켜 대신 읽게 해주는 것에 가깝다. 물론 전체 뇌 기능은 아니고, 번역에 필요한 최소한의 부분, 즉 언어를 담당하는 뇌의 기능만 가상화 시킨 것. 혹은 두 언어와 문화를 전문적으로 학습시킨 AI 번역기 정도로 비유할 수 있겠다. 그만큼 성능은 많이 소모되지만, 번역 성능 만큼은 단순 기계 번역에 비해 차원이 다르다. 직접 원문의 맥락을 파악하고 한국인이 확실하게 알아들을 수 있게 재가공해주며, 한국에 해당하거나 한국인이 이해할 수 있는 개그 코드로 적당히 의역하거나 아니면 원본 개그에 대한 설명을 각주로 달아준다.

같은 아키텍처 끼리의 호환성 레이어가 구현하기 쉬운 이유도 여기서 비롯된다. arm -> arm[3], x86 -> x86[4] 기기 끼리는 호환성 레이어를 만드는게 비교적 쉽다. 비유하자면 arm -> arm 은 같은 한자어권이고, x86 -> x86은 같은 영어권이라, 설령 단어와 조사만 그대로 치환하는 직역이라 하더라도 기본적인 문장구조가 비슷하기 때문에 일반적으로 알아듣기 쉬우며, 어느정도 같은 문화권 끼리인 만큼 상대 문화권에 대한 이해가 기본적으로 있기 때문이다.

예를들어 일본어 문장을 그저 기계적으로 단어, 조사만 한국어로 치환한다 해보자.
この本はとても面白くて、あっという間に読んでしまった。
이의책은너무재미있고순식간에읽기해버렸다.
보다시피 문장구조가 비슷하기 때문에 완벽한 번역은 아니더라도 어느정도 이해는 가능하다.

그러나 만약 x86 -> arm 이나 arm -> x86 으로 넘어간다면 얘기가 달라진다. 예를들어 영어 문장을 그대로 한국어로 직역해본다고 치자.
The book was very interesting and I read it in no time.
이 책 ~었다 매우 흥미로운 그리고 난 읽다 이것 안 없는 시간.
문장구조 자체가 다르기 때문에 이런식으로 매우 부자연스러운 결과가 나올 수 밖에 없고, 책 내용을 전체적으로 이해한다는 것은 불가능에 가깝다. 그렇기 때문에 다른 아키텍처 끼리는 호환성 레이어를 만드는 것이 매우 어렵거나 사실상 불가능에 가까우며, 이쪽은 반드시 에뮬레이터를 통하는 수 밖에 없다.

이 때문에 Windows on ARM에서 본래 윈도우용 x86 프로그램을 구동할때는 호환성 레이어가 아닌 에뮬레이션 방식을 사용한다. 그런데 이쪽은 아직 초기 개발 단계라서 에뮬레이터 임에도 호환성 마저 크게 좋지 못하다.

3. 목록


[1] 즉 호환성 레이어와 비교하자면 돌아가는 프로그램이 더 많다.[2] 네이티브로 돌리는 것에 비해선 완전 0는 아니지만 에뮬레이터랑 비교하자면 사실상 네이티브인 수준.[3] 닌텐도 스위치 -> 안드로이드 기기 호환성 레이어인 Skyline 등.[4] 윈도우 OS -> 리눅스 OS 호환성 레이어인 와인 등.