돌핀 (에뮬레이터)

기원 (2003-2007)

돌핀은 2003년 9월 첫 출시되었으며 출시자는 프로그래머 Henrik Rydgard (ector)와 F|RES이며 당시 상용 게임을 기동하고 구동할 수 있던 실험적인 닌텐도 게임큐브 에뮬레이터였다. 오디오는 에뮬레이트되지 않았으며 성능 문제가 있었다. 수많은 게임들이 시작 시 충돌되거나 겨우 동작할 수 있었으며 평균 속도는 2~20 프레임 레이트(FPS)였다. 이름은 게임큐브의 개발 코드명을 가리킨다.
돌핀은 공식적으로 2004년 일시 개발이 중단되었으며, 이 때 개발자가 출시한 이 에뮬레이터의 마지막 버전이 1.01이었다. 개발자들은 2005년에 이 프로젝트를 부활시키로 마음먹었다.

오픈 소스, Wii 에뮬레이션, 2.0 릴리스 (2008-2010)

돌핀은 2008년 7월 13일 오픈 소스 프로젝트가 되었으며 당시 개발자들은 소스 코드를 GNU 일반 공중 사용 허가서 하에 구글 디벨로퍼스의 SVN 저장소에 공개하였다. 이 시점에서 에뮬레이터는 기초적인 Wii 에뮬레이션, 제한된 리눅스 호환성, 그리고 wxWidgets를 이용한 새로운 GUI를 구현하였다. 오픈 소스화할 때 다양한 개발자들이 유혹되어 이 에뮬레이터의 개발은 그 뒤로 계속되고 있으며 정기적인 SVN 빌드 릴리스가 출시되고 있다. 버전 번호(예: 1.03)가 아닌 리비전 번호(예: RXXXX)와 함께 프리뷰 빌드와 비공식 SVN 빌드들이 출시되었다. 이전 버전처럼 연속적인 빌드 간 차이는 일반적으로 미미하다.
돌핀의 Wii 에뮬레이션은 2009년 2월 공식 Wii 시스템 메뉴 v1.0을 구동시키면서 중대한 단계에 들어섰다. 머지 않아 거의 모든 버전의 Wii 시스템 소프트웨어의 부팅이 가능하게 되었다.
2009년 4월, 게임큐브와 Wii처럼 대부분의 사용 게임들이 사소한 문제와 오류와 함께 완전히 플레이가 가능했으며, 수많은 게임들이 실질적으로 문제 없이 동작하였다. 이 에뮬레이터에 대한 개선으로 말미암아 사용자들이 최초로 풀 스피드로 게임을 즐길 수 있게 되었고 오디오가 극적으로 개선되었으며 그래픽 기능의 경우 일부 사소한 문제점을 제외하고 상당히 일정함을 유지했다.
2009년 10월 말, 새로운 기능들이 에뮬레이터에 추가되었는데, 이를테면 에뮬레이터의 성능 개선뿐 아니라 에뮬레이터의 안정정 향상에 기여하는 자동 프레임 무시가 그것이다. 또, 에뮬레이터의 넷플레이 기능이 개선되어 게임이 Wii 리모컨을 필요로 하지 않는 한 사용자들이 멀티플레이어 게임큐브 및 Wii 게임들을 온라인으로 친구들과 플레이할 수 있게 되었다. GUI가 재작업되어 더 사용자 친화적으로 바뀌었다. DirectX 플러그인 또한 추가 작업이 이루어졌다.
2010년 4월 12일, 돌핀 2.0이 출시되었다.

3.0, 3.5 릴리스 (2010-2012)

2010년 11월 말, 개발자들은 깨지는 등의 소리 문제 대부분을 해결하였고 더 많은 게임에 대한 호환성을 추가하였으며 전반적인 에뮬레이션 속도와 정확도를 향상시켰다.
2011년 6월, 버전 3.0이 출시되었다. 이상한 사용자 인터페이스 동작, 충돌, 그래픽 글리치, 기타 문제들이 수정되었다. 이 릴리스는 "대부분의 게임이 완벽하게 또는 사소한 문제와 함께 동작한다"고 명시하고 있다. 구성 창을 재설계하였고 LLE 사운드 엔진이 상당히 개선되었으며 새로운 번역, Wii 리모컨 스피커 지원 추가, EFB 포맷 변경 에뮬레이션, 그래픽스 디버거, 오디오 덤핑 등이 추가되었다. 3.0 릴리스에서는 플러그인 인터페이스가 제거되었는데 그 이유는 이 아키텍처가 돌핀의 다른 부분들과 보다 더 양호하게 통합될 수 있기 때문이다. 또, 개발자들은 Direct3D 11 비디오 백엔드와 XAudio2 오디오 백엔드를 추가하였다.
2012년 12월 25일, 버전 3.5가 출시되었으며, 게임큐브 브로드밴드 어댑터와 마이크의 에뮬레이션을 추가하였다. FreeBSD 포팅, DSP 펌웨어의 자유로운 교체, WBFS 파일 포맷을 도입하였다.

안드로이드의 포팅과 4.0 릴리스 (2013)

2013년 4월 6일, 에뮬레이터 팀은 구글의 안드로이드 모바일 운영 체제를 위한 최초 빌드를 출시하였다. 2013년 9월 기준으로, 안드로이드 4.3 젤리빈의 도입과 더불어 구글이 2013년 7월 이후로 공식적으로 지원하는 OpenGL ES 3.0을 지원하는 하드웨어에서 겨우 구동된다. 평균 1 FPS으로 게임이 동작한다. 개발자는 삼성 갤럭시 S4가 더 빠른 속도로 게임을 즐길 수 있는 최초의 전화들 가운데 하나라고 언급하였으나 여전히 상당한 성능적 제한이 있다.
2013년 9월 22일, 버전 4.0이 출시되었으며 macOS와 리눅스 빌드에 대해 OpenGL 렌더링 및 OpenAL 오디오의 백엔드 개선, 더 나은 컨트롤러 지원, 네트워크 강화, 성능 트윅이 추가되었다. 그러나 일부 심각한 버그가 이 릴리스에 포함되면서 버그픽스 릴리스 4.0.1과 4.0.2가 출시되었다.

레거시 기술의 개발 중단, 정확도 향상, 그리고 5.0 릴리스 (2013-2016)

2013년 10월 12일 (4.0-155), Direct3D 9 지원이 프로젝트에서 제거되었으며 Direct3D 11 및 OpenGL이 비디오 백엔드로 남게 되었다. 돌핀 팀은 D3D9가 태생적으로 결함이 있으며 이 문제를 해결하는 것은 시간 낭비이고 개발 속도를 떨어트린다고 언급하였다.
2014년 5월 19일, 돌핀 팀은 마이크로소프트 윈도우와 리눅스의 32비트 지원을 중단하였다고 발표하였다. 돌핀 팀은 32비트 빌드를 유지보수하는 것이 점차 어려워지고 있으며 32비트 릴리스는 단순히 64비트 쪽에 비해 더 낮은 체험을 제공하였다고 언급하였다. 게다가 사용자 대부분이 이미 64비트 CPU를 사용하고 있으며 32비트 빌드 사용자 대부분은 64비트 호환이 되지만 32비트를 실수로 사용하고 있었다. 이러한 요인들이 복합적으로 작용하면서 32비트 지원이 불필요하게 되었다. 32비트 안드로이드 빌드들은 비슷한 문제로 고통을 받았으나, ARMv7 지원은 ARM 아키텍처 JIT가 준비되고 장치를 구매할 수 있을 때까지 한 해 더 유지되었다.
2014년 동안 정확도에 상당한 진전이 있었는데, 디스크 로딩 에뮬레이션, 게임큐브 컨트롤러의 네이티브 지원, 완벽에 가까운 오디오 에뮬레이션, 초창기 이후로 존재했던 문제들에 대한 버그 수정이 그것이다. 메모리 관리 장치(MMU) 개선을 통해 수많은 게임들이 처음으로 부팅 및 정상 동작을 가능하게 했다. 안드로이드 장치 지원 또한 미더웠다. 2014년 12월, 돌핀은 엔비디아 테그라 프로세서를 사용하는 기기 등 대부분의 성능이 좋은 장치들에서 구동할 수 있으며 그 외의 경우는 약간의 어려움이 있다.
비주얼보이어드밴스 게임보이 어드밴스 에뮬레이터 개발자들과 조율하면서 게임큐브와 게임보이 어드밴스 타이틀의 연동 지원이 2015년 3월 도래하였다.
2015년 5월 25일, 돌핀 프로젝트는 다른 FOSS 프로젝트들과의 라이선스 호환성을 개선하기 위해 코드 교환 공유가 가능하도록 GNU 일반 공중 사용 허가서 전용 코드 베이스를 GPLv2 이상으로 리라이선스를 성공했다고 발표하였다.
2015년 8월 돌핀 개발자들은 오디오에 대한 추가 개선사항을 발표하였으며 2015년 12월 돌핀 프로젝트는 TR Wii 리모컨의 일부 오디오 문제를 수정하였다. 2개월 뒤 2016년 2월, DirectX 백엔드는 개발 수개월 후에 유지보수되었다.
2016년 6월 24일, 버전 5.0이 출시되었으며 다양한 픽스와 추가 기능이 포함되었다.

5.0 이후 개발 (진행 중)

벌칸 기반 그래픽스 렌더러의 개발이 2016년 6월 시작되었다. 1개월 뒤 개발자는 "이제 기능이 완전하고 클린업/버그 수정/성능 작업을 할 때가 왔다"고 발표하였다. 해당 렌더러의 개발은 수개월 간 별도 브랜치에서 완료되었으며 이 코드는 2016년 10월에 최종 병합되었다.
2016년 9월, 돌핀의 개발자들은 이 에뮬레이터가 모든 공식 게임큐브 타이틀을 부팅할 수 있다고 발표하였다. 부팅을 지원할 마지막 타이틀 Star Wars: The Clone Wars는 특히 에뮬레이트하기가 어려웠는데 게임이 메모리 관리 장치를 사용하고 있었기 때문이다. 또, Triforce 에뮬레이션을 제거했다고 발표했는데 이는 Triforce 에뮬레이션의 코드를 유지보수하지 않기 때문이다.
Clone Wars 마일스톤 이후 6개월 째 되던 돌핀은 Wii 숍 채널과의 호환성에 도달하는 다른 마일스톤을 세웠다.
2개의 실험적인 기능들이 성숙하진 않았으나 2017년 5월 제거되었다: DirectX 12 렌더러(벌칸 백엔드로 적절하게 대체될 수 있기 때문), 대체 CPU 에뮬레이터 JIT IL.
같은 해에 그래픽 성능 관련 문제에 대해 작업하던 중, 돌핀 개발자들은 셰이더 컴파일 스터터링으로 알려진 장기간의 문제에 대한 솔루션을 구현하였다. 이 스터터링은 그래픽 드라이버가 새로운 환경이나 오브젝트에 필요한 셰이더를 컴파일하는 것을 에뮬레이터가 대기함으로써 발생한다. 이 솔루션은 이른바 Ubershaders이며 2015년 이후로 개발 중이다. 현재 문제는 인터프리터를 통해 Wii와 게임큐브의 렌더링 파이프라인을 에뮬레이트하는 것으로서, 특별한 셰이더가 컴파일되어 이후의 프레임에 사용될 수 있을 때까지 호스트 시스템의 그래픽 프로세스 자체에서 구동하는 것이다.

기능

돌핀의 기능에는 지역 관계 없이 게임을 시작할 수 있는 기능, TAS(tool-assisted speedrun) 기록, 액션 리플레이 및 게코 코드 치트를 포함한다. 돌핀은 USB 어댑터를 통해 실제 게임큐브 컨트롤러를, 또 블루투스를 통해 Wii 리모컨을 지원한다. 모션플러스 어댑터, Nunchuk, 클래식 컨트롤러, 기타, 드럼, 턴테이블과 같은 확장도 지원한다.
돌핀은 확장 기기가 있든 없든 오리지널 게임큐브 컨트롤러와 Wii 리모컨의 기능을 PC 컨트롤러에 매핑할 수 있다.
두 종류의 네트워크 플레이가 돌핀에 의해 지원된다: 에뮬레이트된 로컬 멀티플레이어, 닌텐도 와이파이 커넥션. 전자의 경우 돌핀 사용자들 간에서만 동작한다. 기본적으로 온라인 옵션이 없는 게임에 적용된다. 후자의 경우 다른 돌핀 사용자들 및 실제 Wii 사용자들과의 WFC 지원 Wii 게임을 위한 온라인 게임플레이이다.
게임 진행은 가상 게임큐브 메모리 카드, 에뮬레이트된 Wii 플래시 메모리, 세이브 스테이트에 저장할 수 있다. 돌핀은 메모리 카드 관리자를 갖추고 있어서 세이브 파일을 게임큐브 메모리 카드로 전송할 수 있게 한다.
비주얼보이어드밴스 게임보이 어드밴스 에뮬레이터와 결합하여 돌핀은 게임큐브와 게임보이 어드밴스 타이틀 연동을 지원한다.