MS 모바일의 삽질의 역사

2001년인가 2002년인가 Windows XP랑 DirectX 8이 나왔을때 한국에서 MS의 뭔 세미나가 있었다. 아마 장소가 건대였을거다.
MS 본사 직원 몇명이 발표를 했고 동시통역이 있었다. 별로 의미있는 얘긴 없었던걸로 기억한다. XP의 fast user switching 짱짱 좋으니 꼭 쓰세요~ 라는 얘기만 줄창 했던거 같다.

그리고 난 먼저 귀가했고 나중에 동료한테 재밌는 얘기 없었냐고 물어봤다.
누군가가 Windows CE에서 DirectX지원 될 계획이 있냐고 물어보더란다. 발표하던 양키 아저씨가 너무 어이가 없어하더라고.

‘허허 임베디드 장비에서 DirectX가 되길 바라다니.바보 아냐?’ 그렇게 생각했다.

아이폰 나오기 전까지 난 WinCE기반 PDA를 4대 정도 사용했다. 물론 DirectX지원 안됐다. 후반에 나온 제품들은 wifi로 인터넷이 가능은 했지만 정말 가능만 했고 웹브라우징도 제대로 할 수 없을만큼 불안정했다.

[아이폰이 나왔다.]
Open GL ES가 돌아간다. 웹브라우징은 물론 ftp도 되고 정상적인 소켓 어플리케이션이 돌아간다. 놀랐다.

[Windows Phone 6이 나왔다]
6.5에서 DirectX는 되었던가? WinCE라 기대도 안했다. PDA시절의 아픈 기억을 갖고 있으니 아무 기대도 안하고 패스.

[Windows Phone 7이 나왔다]
커널은 여전히 NT가 아니다. DirectX지원은 모르겠고 된다해도 내부에서나 쓰지 바깥에서 프로그래머가 컨트롤할수 없다. C/C++로 프로그래밍을 할 수 없다. 뭔 미친 소리야? 그래서 패스했다. 내 게임을 포팅하고 싶었는데 그냥 아웃이네.

[Windows Phone 8이 나왔다]
NT커널에 C/C++로 개발 가능. DirectX 지원.
이거다~ 했는데 써보니 똥이네. 다 반쪽이다. C/C++이라고 하지만 표준 C 라이브러리조차 대부분 사용할 수 없다. win32 API도 대부분 사용할 수 없다. DirectX지원이라고 하지만 이것도 반쪽이다. GDI지원이 안된다. 이건 이해할 수 있다. 그래 GDI기반의 텍스트 입력 코드는 다 내가 새로 짜지 뭐. 텍스트 출력은 DirectWrite + D2D로 어떻게든 만들었는데 입력을 처리할 수 없다. XALM로 에디트박스를 만들어서 거기서 텍스트를 긁어와야 하는데 이런 시발. C++로는 XAML을 못써. C#으로만 가능. XALM쪽은 C#으로 짜고 C++쪽은 dll로 만들어서 interop하래. 장난해?

[Windows Phone 8.1이 나왔다]
C++에서 XALM사용 가능. 그런데 백그라운드 기능등 API 작동이 PC와 다른 것들이 있다. 지원 안되는 API도 있고. 그래고 8보단 낫다. 하지만 winsock등 게임을 포팅하려면 꼭 필요한것들이 여전히 막혀있다. 존…나 똥같은 WinRT의 StreamSocket으로 구현하래. 이걸 C++로 쓰려면 정말 설사똥같다. 늬들 이걸로 정말 만들긴 해봤어? 게다가 DirectX 버전이 11인데 당시 100%의 Windows Phone하드웨어가 Feature Level 9.x까지만 지원했다. 이게 무슨 뜻이냐면 코드는 DX11 API로 짜지만 하드웨어 디펜던트한 쉐이더를 비롯한 상당히 많은 코드들은 DX9사양에 맞춰서 짜야한다. 즉 코드를 두벌 짜야한다. 게다가 Clip Plane같은건 DX9에서 API로 처리하든가, DX11에선 쉐이더로 처리해야되는데 DX Feature Level 9에선 쉐이더로 처리 못한다. 그런데 API는 DX11이니 API가지고도 처리 못한다. 장난해? 진짜 이거 직접 써보긴 해봤어?

그래도 꿋꿋이 이런걸 만들긴 했었다.

[Windows 10(Windows 10 Moblie) th1이 나왔다]
드뎌 상당히 많은 win32 API가 풀렸다. SetCurrentDirectory()같은것도 가능. 대부분의 C/C++라이브러리도 사용 가능. WinRT API는 UWP라는이름으로 바뀌었고 PC와 모바일 99% 호환. winsock도 지원한다. 하지만 아직 IOCP를 지원하지 않는다. 네트워크라이브러리를 그대로는 포팅할 수 없다.

[Windows 10(Windows 10 Moblie) th2가 나왔다]
드뎌 IOCP사용가능. 이제는 PC용 코드들을 거의 포팅할 수 있는 수준이 됐다. 그런데 시장이 없다. 생태계가 완전히 죽었다.
쓰는 사람이 아무도 없는데 앱을 뭐하러 만들어.
게임 포팅은 뭐하러 해. 윈폰 쓰는 사람이 없고 게임할만한 성능 좋은 윈폰 하드웨어도 없는데.
이젠 거의 코드 수정없이 이렇게 두 플랫폼을 서포트할 수 있다. 물론 DX Feature Level 11을 지원하는 윈폰은 극소수이고 그나마 이젠 나오는 제품도 없다.

생각해보니 이 모든 일들의 전조가 언제 시작되었는가, 아니 언제 눈치챌수 있었는가 하면 그때 그 시절이었다. 2002년 WinCE에서 DirectX지원이 되느냐는 질문 – 그리고 어이없어하던 MS직원.
MS에서 윈폰 개발을 언제부터 시작했는지 모르겠지만 WinCE를 모바일 OS로 채택했던게 악수였고, 모바일에서 PC만큼의 개발환경을 지원할 필요가 없다고 생각했던게 악수였다.
2002년도에 MS답변은 이러했어야했다.

‘WinCE말고 우리는 NT를 기반으로 한 모바일 OS를 개발하고 있다. 이것은 PC의 API를 모두 지원하며 DirectX도 지원한다.’

이랬으면 지금 아이폰의 위치는 윈폰이 차지하고 있겠지.
결국 나같은 얼리 어답터 MS빠만 바보되고 말야. ㅅㅂ ….


MS 모바일의 삽질의 역사”에 대한 답글 2개

  1. 개공감요ㅠ.
    근데 윈모 5.0 에서 dx 개발 가능했던걸로 기억합니다. 추후 삼성 옴니아(윈모6~6.5)에서 그래픽 드라이버 버전 잘못 탑재로 dx 가속이 안되었던 일도 기억나네요.

    좋아요

    1. 찾아보니 5.0때부터 DX지원은 했네요. PC의 그것과 똑같진 않았지만. 실질적으론 DDRAW와 DSHOW정도 사용 가능했던것 같네요. D3D는 어차피 지원되는 하등웨어가 거의 없었고

      좋아요

답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중