WIPI

Wireless Internet Platform for Interoperability

소개

WIPI는 과거 무선 환경에서 널리 사용되던 플랫폼으로, 과거 통신사마다 자체 플랫폼이 달라서 생기는 호환성 문제를 해결하기 위해 만든 플랫폼이다. 과거에는 SKT, KTF, LGT 세 통신사의 플랫폼이 각각 달랐으며, CP (Content Provider)들은 세 통신사 중 제일 이용률이 큰 SKT 기반 컨텐츠를 우선적으로 개발하였으며, 타 통신사용 컨텐츠는 포팅 후 출시하거나 아예 출시하지 않았다. 이를 해결하기 위해 정부와 통신사가 함께 발표한 것이 WIPI이다.

단점

하지만 의도와는 다르게, 각 통신사마다 여전히 각자의 WIPI 구현을 사용했다. 통신사 환경마다, 그리고 모바일 기기마다 생기는 버그가 각각 달랐으며 통신사마다 API가 조금씩 다른 경우도 있었다. 이는 CP들의 생산성을 낮추는 이유가 되었다.

현황

현재는 거의 사용되지 않는다. 과거에는 한국 내 출시 기기에는 무조건 WIPI가 탑재되어 있어야 한다는 법안이 있었으나, 이 법안이 오히려 한국 무선 인터넷 환경의 갈라파고스화를 심화시킨다는 여론이 점차 커지면서 폐지 수순을 밟게 된다. 통신사들은 2014년부터 신규 컨텐츠 출시를 하지 않았고, 2019년부터 점차 WIPI 서비스 제공을 종료하였다. 현재는 WIPI로 출시된 대부분의 컨텐츠들을 경험해볼 수 있는 방법이 전무하다. 단, CP가 WIPI 컨텐츠를 Android나 iOS 용으로 포팅한 경우는 제외한다.

구조

WIPI는 다음과 같은 구조를 가지고 있다.

  1. Hardware
  2. OS
  3. WIPI HAL
  4. WIPI Runtime
  5. WAM (WIPI Application Manager)

당시 모바일 기기에 주로 사용되던 OS는 REX OS로, Qualcomm의 MSM 칩셋과 함께 번들되던 OS이다. 단, KTF의 경우 따로 Qualcomm과 계약을 맺어 Qualcomm Brew를 REX OS와 병행하여 사용하였다. 이후 KTF는 REX OS에서만 작동하던 KTF-WIPI를 Brew에 포팅하여 WOB(WipiOnBrew)를 선보였다.


여담

KTF

KTF는 WIPI 컨텐츠 바이너리를 바로 메모리상에 올린 다음 (ROM으로 취급), ROM 영역의 0x01 코드를 실행한다. (ARM Thumb mode이므로 function offset이 홀수임) 호출된 함수는 결과로 한 offset를 돌려주는데, 이는 WIPI 바이너리 interface의 주소이다. 리턴된 Interface List 중 ExeInterface를 찾아 그 interface의 함수를 호출하면 바이너리가 initialize되고, 우리가 적당한 WIPI Interfaces를 전달해 주면 바이너리는 실행할 준비를 마친다.

LGT

LGT의 경우도 비슷하나, LGT는 모바일 기기의 OS마다 바이너리 파일의 형식이 달랐다. REX OS의 경우 binary.mod라는 파일인데, 이 파일 또한 KTF의 경우와 비슷하게 raw binary file이다. 파일 헤더는 ELF를 가리키나, 실제로는 올바른 ELF 포맷이 아니다. Windows Mobile에서 구동되는 WIPI의 경우, binary.dll 형식을 가지고 있다. WinCE 형식의 dll 파일이므로 문제 없이 load된다. 반면 Android LGT WIPI의 경우, 파일은 REX OS와 동일하게 binary.mod 파일을 가지고 있으나 게임 코드가 실제로는 lib 폴더의 libbinary.so (android library)에 의해 실행된다.

SKT

SKT의 경우는 아직 오리무중이다.