맥OS 구경해 보려고 맥북을 샀었다. 물론 원래 생각했던대로 몇번 테스트해보고 XP 깔아서 잘 쓰고 있다.
애플과 MS는 둘다 PC용 OS를 만드는 (흔치않은) 기업이다. 그런데 이 두 회사의 OS에는 큰 차이가 하나 있다. 이 글의 주제인 하위 호완성이다.
맥은 OS 버전이 올라가면서 하위 호완성을 보장하지 않는다. 사실 잘 안써봐서 어느정도인지 모르지만, 버전이 0.1 이 올라가면서 하위버전OS 에서 돌던 프로그램이 더이상 안돌아 가는 경우도 있다는 글을 읽은적도 있다. 심지어는 OS 에서 사용하는 CPU 도 바꿔 버리기도 한다.
MS 는 하위호완성을 극도로 중요시 한다. 심지어는 하위 OS 에서 잘 돌던 프로그램의 버그로 인해서 새 OS 에서 잘 안돌게 되니까, OS 에서 해당 프로그램을 인식해서 강제로 버그를 우회(?)해서 돌게 했다는 글도 읽은적이 있다.
얼마나 하위호완성이 잘되냐면, WINDOWS 1.0 용 프로그램이 아직도 실행이 된다고 한다. (WINDOWS VISTA 에서 XP 용 프로그램이 UAC 정책으로 제대로 실행이 안되는 경우가 많아지자 아예 WINDOWS 7 은 VIRTUAL PC 를 이용해서 프로그램을 실행시킬 수 있게까지 해줬다...)
MS 의 하위 호완성에 대한 집착은 WINDOWS CE 에서도 나타났다. CE 용 프로그램을 만들때 조금만 신경쓰면 소스의 99% 를 WIN32 API 와 호완되도록 프로그램을 짤 수있다. 그래서 나도 일단 윈도우용으로 프로그램을 개발하면서 나중에 CE에서도 돌아갈 수 있도록 포팅하는 식으로 개발을 하고는 했었다.
아이팟 터치에 IOS 4.X 를 깔았다. 원래는 3.X 를 썼는데, 4.X 만 지원하는 앱들이 점점 많아지면서 어쩔 수 없이 4를 깔게 되었다. 만약 PC 용 프로그램을 WINDOWS XP 에서는 안돌아 가고 WINDOWS VISTA/7 만 지원하는 프로그램을 내놓는다면? ... 글쎄 그 프로그램은 시장해서 성공하기 힘들꺼다. 하지만 애플이 만드는 OS 시장에서는 이런게 먹혀들고 있다.
사용자들은 당연히 하위 호완성을 개발사에 요구한다. 몇십만원이나 주고 산 프로그램이 새로 산 PC에 설치할 수 없다면 당연히 신경질이 난다. 하지만 개발사 입장에서는 하위호완성을 유지하는것은 매우 고통스러운 작업이다. QA팀이 테스트해야할 항목은 상수적으로 늘어나게 되고, 개발자도 고통스럽다. WIN32 API 를 보면, 똑같은 기능을 하는 API가 얼마나 많은지 모른다. 전부 하위 호완성을 위해서 API를 정리하지 못했기 때문이다.
하위 호완성을 위해서 남겨둔 레거시 코드는 OS와 프로그램을 무겁게 만든다. 난 처음에 맥OS 와 아이팟을 썼을때 그 속도에 깜짝 놀랬었다. MS 에는 바보만 있고, 애플 프로그래머들이 천재였기 때문일까? 그럴리가 없다. 난 그 원인이 OS 개발 정책의 차이에 있다고 본다.