와인(소프트웨어)
1. 개요
[image]
Wine
[image]
공식 사이트
오픈소스 윈도우 API/ABI 호환 레이어.
쉽게 말해서 윈도우가 아닌 운영체제에서도 윈도우 기반 프로그램을 실행할 수 있게 해 준다.
macOS, 리눅스, 안드로이드 지원. 라이센스는 처음에는 MIT를 썼다가 Cedega가 와인을 이용하여 DirectX를 자체 구현하고 소스 코드를 비공개하자 LGPL로 변경했다.
1.1. 이름
Wine의 의미는 Wine Is Not Emulator.[2] 이니셜이지만 첫 글자만 대문자로 쓰도록 하고 있다. 직역하면 "Wine은 에뮬레이터가 아닙니다." 사실 초기에는 WINdows Emulator가 맞았지만, 나중에 위와 같이 바뀌었다.[3] 그래서 우분투 8.10부터는 지원 명칭이 Wine Microsoft Windows Compatibility Layer로 바뀌었다. Wine 측에서 투덜댄 모양. 하기사 WWE는 Wine의 뜻과 정면충돌하니. 변경된 명칭을 대충 직역해 보자면, “Wine 마이크로소프트 윈도우 호환성 계층(영역)”정도가 된다. 하여간 에뮬레이터란 단어는 절대 안 쓴다.
2. 특징
일반적인 에뮬레이터는 ISA의 명령어 전체를 번역하지만, Wine은 윈도우 프로그램의 API/ABI를 운영체제가 처리할 수 있도록 번역한다.
부분적으로 에뮬레이트하기 때문에, x86 또는 x86_64 아키텍처에서 동작하는 유닉스 기반 운영체제라면 구동이 가능하다. 윈도우 프로그램이 커널 모드가 아닌 사용자 모드에서 구동되므로, 하드웨어는 와인이 아닌 운영체제가 담당한다.
자유 소프트웨어이므로 소스 코드가 공개되어 있으며, 이를 직접 수정해서 성능 향상에 기여할 수 있다.
3. 기타
Wine의 일차적인 목표는 다음과 같다. 윈도 프로그램을 돌리기 위해서 윈도에서 제공하는 API/ABI를 똑같이 제공한다.
이 목표를 달성하기 위한 가장 쉬운 방법은 윈도의 바이너리 코드를 리버스 엔지니어링으로 필요한 코드를 취한 다음 필요에 맞게 변형하면 된다. 또 Windows 2000과 Windows NT 4.0은 이미 2004년에, Windows XP와 Windows Server 2003은 2020년에 '''소스코드의 일부가 유출'''된 상태이다.[4] 하지만 이런 것들을 가져다 쓰면 안 되는 게 저작권 분쟁을 피하기 위해서는 동일한 코드가 들어가면 안 된다는 것이다.[5] 그래서 Wine측에서는 윈도 API에 대해서 API 문서나 MS의 지원 페이지는 열심히 참고할 수 있고, 코드에 대해서 여러가지 실험을 해 볼수도 있지만, 코드를 까서 보는 것은 안되며, 지원 페이지 중에서도 API가 구현된 방식에 대해서 설명된 것은 보지 못하도록 규칙을 정하고 있다. 정확하게는 Wine을 직접 개발하는 프로그래머들이 절대로 윈도의 구성 요소를 역어셈블하지 않고 유출된 소스코드도 보지 않은 채 스스로 온갖 삽질을 하면서 독자적인 Wine 소스코드를 작성하면, 그 코드를 다른 프로그래머들이 혹시 Windows의 역어셈블한 코드나 유출된 코드와 비슷하지 않은지 검토해서 비슷하지 않으면 차기 버전으로 공개하는 식으로 프로젝트를 진행한다고 한다. 즉 Wine의 개발자들은 Wine 위에서 윈도용 소프트웨어가 '''동작'''하는 것은 윈도우 위에서 실행하는 것과 동일하도록 만들어야 하지만 Wine 자체의 '''구조'''를 윈도 내부와 다르게 만들어야 한다는, 어찌 보면 '''서로 지향점이 반대되는 두 가지 목표'''를 '''항상''' 한꺼번에 달성해야 하기에 굉장히 어려운 작업을 하고 있는 셈이다.
그렇다면, 어차피 API는 프로그램 제작자를 위해 깔끔하게 정리돼 있으니까, 각 파일에 대해서 마이크로소프트가 제공하는 공식 API 문서에 규격화된 대로 구현만 하면 될까? 그것도 여의치 않다.
- 윈도 프로그램을 돌리기 위해서는 윈도에서 제공하는 API를 그대로, 정말 있는 그대로, MS에서 잘못 만든 버그마저 똑같이 구현해야한다. 프로그램 개발자 입장에서 이런 버그 때문에 덧댄 부분이 의도치 않게 동작할 수도 있고, 생각없이 버그가 정상적인 결과인 줄 알고 버그를 활용했을 수도 있고, 다른 버그를 가리기 위한 어쩔 수 없는 수단으로 이 버그를 활용했을 수도 있다.
- 또 응용 프로그램 개발자들이 기본적인 윈도 API만을 써서 만드는 게 아니라, 하드웨어를 직접 조작하는 요령을 부린 프로그램들도 있다. 이러면 호환성은 떨어져도 성능 면에서 이득이기 때문이다.
- 윈도우도 매년 새로운 API와 기능이 추가되고 있다.
4. 버전별 역사
이런 어려움 때문에 개발기간이 적지 않게 길다. 그나마 다행인 건 갈수록 점차 개선돠고 있다는 점이다. 윈도우즈3.1 시절부터 개발을 시작해서 뭐 1~2년 하는 것도 아니고 15년만에 베타 버전이 종식됐다.[6] 그래도 제작자들이 끈기있는 개발을 하여 2주에 한 번씩 베타 버전을 만드는 원칙은 잘 지켜졌다.
2008년 중반에 첫 공식 버전을 만들었다. 제작자들 말로는 약 3000개의 프로그램을 지원한다고 하며, 월드 오브 워크래프트나 문명 4, 스타크래프트, 스팀[7] 등 상당수의 유명 외산 게임은 안정적으로 지원한다. 굳이 게임이 아니더라도 한글 2010이라든지, 게임을 하지 않아도 윈도를 버리지 못하게 하는 프로그램들도 많이 지원한다.
4.0 이후 DirectX 12를 부분적으로 지원하고 있으며, 4.6 이후 Vulkan(API)을 백앤드로 사용하기 시작하면서 멀티스레드 렌더링이 가능해졌고 성능이 향상되고 있다. 기존에 설치가 불가능했던 .NET Framework 4.7도 설치가 가능해졌다.
2020년 1월 22일(미국현지) 5.0 버전을 발표했다.# 그간 마이크로소프트에서 저작권 침해 등을 이유로 차단했던 이전과 다르게 오픈소스 친화적인 정책을 발판삼아 지원하기 시작한 덕분에 윈도우 10에서 제공하는 최신 API를 지원하기 시작했다.
또한 PE(포터블 실행환경: Portable Executable)라는 새 환경을 만들어 이전 버전에 사용했던 가짜 DDL 주입 방식보다 더 윈도우 실행환경처럼 보일 것이라 밝혔다. 마이크로소프트도 대신 이 와인을 이용하여 WSL에 사용했다고 밝혔다.
5. 리눅스 자체에 주는 영향
OS/2의 사례를 들면서 윈도와의 호환성이 오히려 독이 될 수도 있다는 반대 의견도 만만치 않다. 굳이 호환성이 뛰어나다면 리눅스용 프로그램을 만들 필요가 없게 되고, 그래서 리눅스 생태계가 말라죽을 수 있다는 것. 윈도와 리눅스가 특징이나 주 사용층이 워낙 다르기에 상황이 그렇게만 돌아가지는 않겠지만 두고봐야 알 수 있는 문제. 리눅스를 쓰는 이유가 단순히 리눅스용 어플리케이션을 사용하는 것은 아니기에 꼭 독이 된다고 볼수는 없다고 생각될수도 있다.
이를테면 Microsoft Office와 같은 케이스가 이에 해당한다고 할 수 있다. Wine의 최중요 지원 소프트웨어 중 하나이기 때문에 정말 빠르고 매끄럽고 위화감 없이 작동하는걸 볼 수 있는데 지금이야 오픈오피스 만으로는 살짝 부족한 오피스 성능을 메꿔서 리눅스를 사무실에서 쓸 수 있는 일등공신이라고 할 수 있지만 Wine의 이런 행보가 계속되면 데스크톱 리눅스의 점유율이 의미 있는 수준까지 올라간다고 해도 MS의 리눅스용 정식버전 오피스 출시는 느긋해질 수 밖에 없다. 거기다가 MS의 타 플랫폼 지원은 아직까지 꽤나 답답한 부분이 있다. 맥용 오피스는 2016 버전 이전까지는 너무 최적화가 안 돼 있어서 그냥 윈도용 오피스를 맥용 Wine 위에서 돌리는게 더 빠를 정도의 한심한 퍼포먼스를 보여준 적도 있다.
6. 호환성
appDB에는 wine과 응용프로그램을 호환시키기 위해 사용자들이 한 삽질이 기록되어 있다. 이를 나누어 플래티넘 - 골드 - 실버 - 브론즈 - 쓰레기(작동 안됨)으로 나누어서 각각 원활한 동작을 위해 무엇이 필요한지 '''영어로''' 설명이 작성되어 있으므로, 프로그램이 작동하지 않는다고 좌절하지 말고 검색해서 알아 보자.
그러나 국내의 모든 게임가드 등 보안 프로그램을 사용한 온라인 게임은 지원할 수 없으며, 최신 API를 사용하는 프로그램은 잘 동작하지 않는다.[8]
특히 오래된 버전의 경우 DirectX 지원이 원활하지 않은 편이다. 윈도우용 DirectX를 구해다 깔아도 되지만, 이는 라이센스 문제가 있다.
개발 버전을 사용하는 경우, 예전 버전에서 잘 돌아가던게 다음 버전에서 안 돌아가다가 그 다음 버전에서 해결되는 경우가 많다.
몇몇 경우는 게임 자체는 돌아가지만 패치를 위한 런쳐 등이 와인과 호환되지 않는 경우도 있다.
다만 대부분 게이머들이 윈도우즈10을 사용하는 2021년 현재는 도리어 고전 게임 실행을 위한 플랫폼이 되기도 한다. DOS시절 게임들은 DOSBOX로 돌린다지만 FMV가 주를 이루고 3D기술이 태동하던 (보통 윈도우즈 2000/XP 에서 하던 게임들)당시 게임들은 도리어 와인으로 돌리는 게 윈도우10에서 돌리는 것 보다 나은 경우가 종종 있다.
7. Wine에서 실행되는 프로그램들
잘 알려진 프로그램들은 WineHQ AppDB에서도 테스트 결과를 찾아볼 수 있으니 한번 훑어보자. 링크
8. 팁
8.1. 한글입력
시스템 내장입력기에서 한글 입력이 안되는 앱[9] 에서 한글 입력을 하려면 새나루 입력기를 터미널로 설치해야한다.[10] 이건 IEs4Linux(OS X)도 마찬가지.
예시
Username:localhost$wine install.exe
단 날개셋 입력기는 터미널이 아닌 GUI로 설치할수 있지만 모듈 등록이 안된다. 단 모듈을 제외한 입력패드랑 편집기는 설치가 되며 새나루 입력기와 마찬가지로 dll, ime파일은 수동으로 등록해줘야 한다.
8.2. WINEPREFIX
정품 윈도우 상이라고 하더라도 프로그램을 깔고 지우다 보면 그간 거쳐간 프로그램들이 남긴 수많은 찌꺼기들이 뒤얽혀서 한없이 느려지는 모습을 볼 수 있을 것이다. 또, 정상적인 프로그램들이 서로 충돌을 일으키며 동시 실행이 안 되거나 문제가 생겨버리는 경우도 봤을 것이다. 하물며 프로그램의 설치/실행/삭제가 깔끔하리라 보장할 수 없는 와인에서는 오죽하랴(...)
그래서 와인에는 와인의 환경을 서로 분리해서 실행시킬 수 있는 환경변수가 있는데, 이것이 바로 WINEPREFIX이다. 기본적으로 이 환경변수는 ~/.wine이며, 여러분의 리눅스에 와인이 설치되어 있다면 이 폴더에 들어가 보면 와인과 관련된 몇몇 파일들이 존재하는 것을 알 수 있을 것이다.
만약, 제대로 돌아갈 지 확신할 수 없는 프로그램을 설치하면서 기존의 프로그램에 영향을 미치고 싶지 않다면, 혹은 모든 프로그램이 각자의 깔끔한 환경 내에서 작동하도록 하고 싶다면 이 WINEPREFIX값을 변경시킴으로서 하나의 새로운 와인 환경을 만들어 새롭게 설치할 수 있다. 예를 들자면, ~/다운로드/installer.exe에 설치파일이 있다면 다음과 같이 실행시키는 것이다.
WINEPREFIX=~/.wine_test wine ~/다운로드/installer.exe
이렇게 하면 기존의 ~/.wine과는 별개로 ~/.wine_test라는 폴더에 새로운 와인 환경이 생성되며, installer.exe가 설치하는 프로그램은 ~/.wine_test/drive_c 내에 설치될 것이다.
이렇게 설치된 프로그램이 프로그램 메뉴에 등록될 때에는 자동으로 바로가기 내에 WINEPREFIX값이 설정되어 등록되므로 실행이 번거로워질까 걱정할 필요도 없고, 서로 다른 WINEPREFIX의 프로그램도 동시에 실행이 가능하므로 괜히 여러개 만들었다가 꼬이지 않을까 걱정할 필요도 없다. 이를테면, 스카이프[11] 는 ~/.wine_skype내에 설치되어 있고 스타크래프트2는 ~/.wine_starcraft2에 설치되어 있다고 하더라도, 프로그램 메뉴 내에서 스카이프와 스타크래프트2를 각각 바로 실행시켜서 친구와 대화하면서 게임플레이를 하는 데 아무런 지장이 없다는 말이다.
8.3. PlayOnLinux[12]
엔드유저를 위한 관리 소프트웨어로 다운로드/설치/환경변수 등록을 자동으로 해주는 프로그램이다.
겉보기엔 앱스토어등의 ESD같은 UI를 갖고있다. 소프트웨어별로 번거로운 설정을 할 필요 없이 적절하게 최적의 설정을 찾아 주고 잘 맞는 버전의 Wine을 설치해주며 친절하게 설치방법도 안내해준다. 저작권 문제가 없는 소프트웨어의 경우엔 서버에서 곧바로 다운로드해주기도 한다![13]
WinePrefix값을 등록시키는것이 귀찮다면 한번 설치해봐도 좋다. 환경값도 GUI로 편하게 편집할 수 있다.
내장 Bash터미널을 지원하고있어 GUI로 실행하면 제대로 설치되지 않거나 실행이 불가능한 앱과 새나루 입력기 등을 설치하기가 편해졌다.
8.4. 글꼴 문제
와인 내에 필요한 글꼴이 없으면 글자가 왕창 깨지는 경우가 발생한다. 이 경우는 Wine의 regedit 에서 HKEY_CURRENT_USER\\Software\\Wine\\Fonts\\Replacements 키를 만든 다음 "Batang"="Nanumgothic", "Dotum"="Nanumgothic", "Gulim"="Nanumgothic","MS Gothic"="Nanumgothic" 정도만 추가해주면 된다. 신버전의 경우 NotoSans CJK KR도 괜찮다.
실제 윈도우 설치의 C:\\Windows\\Fonts를 ~/.wine/drive_c/windows/Fonts에다가 덮어씌워도 된다
8.4.1. 가독성 문제
1.폰트매니저(font-manager) 튜닝
- 모니터 크기와 해상도로 DPI를 구해 폰트매니저 DPI를 조정
2.wine 레지스트리에서 2번 폰트렌더링 타입 사용
3.윈도우 굴림글꼴 제거. 나눔고딕 사용
- 기타 글꼴을 나눔고딕으로 레지스트리에서 폰트링크
4.MS오피스 옵션에서 클리어타입 사용 해제
9. 파생 버전
Wine의 변형 버전이 몇 가지 있다.
먼저 Transgaming이라는 회사에서 개발하는 세데가(Cedega). 윈도우즈용 게임을 지원하는 데 특화된 물건인데 Wine이 MIT 라이센스를 따르던 시절 태어나 개발되면서 Wine의 소스를 잔뜩 가져다 써놓고 와인에 아무런 기여도 하지 않아 비판의 대상이 되었다. 와인은 이 때문에 라이선스가 LGPL로 바뀌었다. 본래 상용이었으나 2009년 7.3버전을 끝으로 2011년 2월 28일에 결국 지원이 전면 중단되고, 소스는 전면 오픈소스로 공개되었다. 링크 소스 가져가 놓고는 기여하지 않은 게 부메랑이 되어 돌아온 셈이다. 나중에 Findev로 사명을 변경하고 Cider를 개발했다.
또 하나는 CodeWeavers라는 회사에서 개발하는 크로스오버(CrossOver) 시리즈. 이쪽은 macOS용과 리눅스용으로, 그리고 각각 스탠다드판과 프로판과 게임용으로 나뉜다. 이쪽은 세데가와 달리 Wine의 소스를 가져다 쓰는 대신 Wine 쪽 공헌과 함께 호스팅 지원을 착실하게 하고 있기 때문에 Wine과 좋은 관계를 유지하고 있다. 덕분에 Wine이 상당히 좋아져 CrossOver 대신 써도 된다. 이 돈독한 관계는 IGS와 케이브의 관계와 비교해도 손색이 없을 정도. 크로스오버도 마찬가지로 상용이며 가격은 12개월 업데이트 지원 라이센스 기준 59.95달러.
와인을 가지고 운영 체제를 만드는 리액트OS라는 게 있다. 이쪽은 아예 윈도우즈라는 운영체제 자체를 클론해 버리는 프로젝트로 진도가 상당히 더디다. 원래는 Wine과는 소스가 완전히 별개로 개발되고 있었지만 요즘은 Wine의 코드를 수혈했다. 본인들의 말에 따르면 많은 버그가 고쳐졌다고. 한때 베이퍼웨어가 될 뻔 하기도 했고 2013년 말 기준으로 아직 쓸만한 수준이 되려면 한참 멀었지만 최근 개발 속도에 탄력이 붙는 걸 보면 아주 희망을 버릴 수준은 아닌듯.
macOS에서는 Wineskin과 WineBottler가 존재한다. 이것도 역시 와인을 기반으로 만들어진 프로그램인데, 설치가 간편하게 제작되었다.
안드로이드에서는 Winulator라는 게 있다. 공식 홈페이지 다만 PC판 프로그램을 그대로 돌릴 순 없고, 실행파일을 컨버팅해서 SD카드 최상위 루트에 투척해야 쓸 수 있다. 그나마 실행이 보장된 프로그램은 시저 3와 스타크래프트 정도라고. 2017년 현재는 개발이 거의 중지된듯 보인다... 심지어 컨버트를 위한 도구마저 소실되어 있다. 사실상 사용 불가 상태.
이것 외에도 엘텍(Eltech)의 엑사기어(Exagear)라는 프론트엔드도 있었으며 베트남계인 Akira Yuki를 포함한 여러 유튜버가 이어받아 업데이트 하고있다.[14][15][16][17]
2018년 8월 22일, 밸브 코퍼레이션에서 Wine을 마개조한 Proton이라는 것을 내놓았다. Proton은 리눅스를 설치한 PC에서 윈도우 전용 게임을 실행하기 위한 프로젝트로, 최신 베타 버전의 스팀 리눅스 클라이언트와 통합되어 작동한다. 원본 Wine에 비해 DirectX 관련 성능[18] 이나 멀티스레드 처리 성능을 높이고 전체 화면 관련 호환성을 높이는 등 게임 실행과 관련된 부분의 개선에 집중한 것이 특징이다.
티맥스에서는 와인 소스코드 중 일부분을 TmaxOS 개발에 사용했다. 그러나 호환성은 와인에 비해 매우 낮은데, 이는 대부분의 호환 코드를 티맥스에서 재작성했기 때문으로 보인다.[19]
Android를 포함한 ARM Linux 용으로 Hangover가 있으며 Android용 포트도 있다.
10. 관련 문서
[1] macOS 전용으로 PlayOnMac이 있다.[2] 이런 식으로 약자의 원래 표현 안에 약자 자체가 다시 들어간 것(예를 들면 이 Wine의 정의에 다시 '''Wine''' Is Not Emulator라고 돼 있어서 Wine이 들어가 있음)을 재귀 약자라고 부른다. 해커들 사이에서는 ○○○ Is Not ●●● 식의 재귀 약자로 이름을 짓는 경우가 굉장히 흔하다.[3] 법적 분쟁을 피하기 위한 수사학적 말장난 이외에도, 이런 회귀적 네이밍 센스는 오픈소스 진영에서 흔히 써먹는 패턴이며, GNU가 GNU is Not Unix가 그 대표적인 예이다.[4] 마이크로소프트는 2001년 5월부터 OEM 파트너, 일부 국가의 정부, 일부 개발자들을 대상으로 자사 제품의 소스코드를 '''공유'''해 주는 Shared Source Initiative라는 프로그램을 운영 중이다. 따라서 MS 개발자가 아닌 사람들 중에도 MS 제품의 소스코드를 입수할 수 있는 사람들이 이미 꽤 많이 있는 상태이다. 그래서 이들 중에 일부가 소스코드를 맘대로 또는 실수로 유출시키는 일들이 벌어진 것이다.[5] 실제로 ReactOS 쪽에서 개발 중에 MS의 바이너리와 동일한 어셈블리 코드가 들어간 게 발견되는 바람에 털린 적이 있다. '''윈도우는 엄연히 돈 받고 파는 물건이다.'''[6] 좀 더 정확히 말하자면, 12년동안 알파(…)가 나왔고 3년동안 베타가 나왔다. 최초의 정식 버전(Wine 1.0)은 개발 시작 15주년 기념으로 릴리즈되었다.[7] 아직도 동작하지 않는 게임도 적지 않다. 개개의 게임은 지원이 불안정할 수 있지만 밸브 게임은 웬만하면 돌아간다. 게다가 2012년 11월 7일 리눅스용 스팀이 공개되었다.[8] 애초에 1.0 버전은 포토샵과 MS오피스 정도를 제대로 돌리는 게 목표였다.[9] 예를들면 IE라던지...[10] PlayOn시리즈는 내장 Bash 터미널[11] 2016년 4월 기준 설치가 가능은 하지만 번거로운 설정을 거쳐야 하고 약간 불안정하다. AppDB silver등급. 하지만 이제 스카이프는 리눅스를 정식으로 지원한다[12] macOS 전용으로 PlayOnMac이 있다.[13] 물론 용량이 매우 크거나 상용 소프트웨어의 경우엔 얄짤없다. MS 오피스도 목록에 올라와 있지만 당연히 환경만 구성해주고 설치는 알아서 해야한다.[14] 다만 x86 에뮬레이터 위에서 돌아가다보니 Direct3D 테스트시 3~40fps정도 나온다. 실제 가속은 8fps가 한계(...).[15] Game Thích라는 유튜버는 64비트 CPU에 Vulkan까지 지원하도록 수정했다. 심지어 전용테마, Wine Internet Explorer 패치도 있다.[16] 한글 표시 및 입력은 굴림, 바탕체를
c:\windows\fonts\
에 복사하고 위 문단에 언급된 날개셋을 설치하면 된다.[17] 구글링을 하면 한글 로케일판을 구할수도 있다.[18] 최신 버전의 DirectX API를 Vulkan API로 변환하여 작동한다. DXVK를 이용하는 모양[19] 사실 개발 과정에서는 자체 호환성 레이어 없이 Wine만으로 윈도우 프로그램을 지원했다. 하지만 그럼에도 오픈소스를 사용하지 않았다고 거짓말했다가 자체 개발한 윈도우 호환성 레이어로 대체한 것이다. 그런데, 이 레이어는 카카오톡을 제외하고는 다른 프로그램은 설치가 불가능하거나 설치가 되더라도 실행 자체가 불가능할 수 있다(...)