win32 단상

약간의 win32 수준의 시스템 프로그래밍 경험을 가지고 있다. Unix 환경에서 동작하도록 만들어진 DB엔진을 Windows 환경으로 이식(porting)하면서 얻게 된 경험이다.

그 덕분에 유명한 Jeffrey Richter의 Advanced Windows를 읽은 적이 있는데(더 유명한 Petzold의 Programming Windows도 읽었던 것 같은데 -_-a) , 지금 돌이켜보면 MS도 무던히 Unix의 표준인 POSIX를 베끼려 애를 썼구나 하는 생각이 든다. 이름만 다소 길 따름이지, POSIX에서 요구하는 기능이나 interface를 제공하려고 노력한 흔적이 보이는 것이다. 비슷한 이름의 Advanced Programming in Unix Environment(학생시절에는 고명하신 선배님의 명명에 따라 EUPA라고 불렀던 ‘그’ 책)과 비교를 해보면 비록 자세한 내용과 형식은 다르지만 말하고자 하는 바는 비슷하다. 운영체계를 잘 이용해서 시스템 프로그램이 제대로 동작하게 만드는 방법을 프로그래머들에게 알려주는 그런 것 말이다.

근데 아쉬운 점이 있었다. POSIX에서 열거해놓은 도구를 구현해놓지 않은 게 더러 있었다. 근데 시스템 라이브러리에 그런 한두 가지만 빠져 있어도 이식해야하는 입장에서는 답답한 노릇이 아닐 수 없는 게다. 예를 들면, semaphore가 없어서 다른 locking primitive로 semaphore를 비슷하게(라도) 만들어야 한다거나, socket API의 return value의 convention이 Unix의 그것과 미묘하게 달라서 예외 처리에 시간을 상당히 잡아먹는다는가 하는 것 말이다. 물론 내가 시스템 프로그래머로서 경험도 일천한 시절에 받았던 인상이니까 Windows 옹호자가 이 글을 본다면 적당히 감안해서 읽어주길 바란다.

닷넷이 시장의 주류가 된 지 오랜 이 마당에 win32 이야기를 한다는 게 다소 시의성이 떨어지는 바 없지 않으나, Unix 세상에서 시스템 프로그래밍을 하자면 아직도 POSIX를 빼놓을 수 없으니 그에 걸맞는 상대가 win32일 수 밖에 없겠다.

개발자 입장에서는 제대로 갖춰진 플랫폼이 아무래도 편할 수 밖에 없다. 내가 Windows를 거부하고 Unix 개발자를 고집하는 이유가 여기에 있다. 직업으로서가 아닌 취미로서의 프로그래밍 차원에서, 가끔은 윈도우즈 프로그래밍도 해보고 싶으나 소시적에 아르바이트 차원에서 Visual Studio를 이용해서 C++과 Basic으로 간단한 애플리케이션을 작성해본 경험만으로 다시 도전해보기에는 너무 많이 바뀐터라 엄두가 나질 않는다고나 할까… Unix가 Linux 덕분에 세상에 이름을 알렸다고는 하나, 사용자 PC는 아직도 Windows 판이니 Unix 개발자로서 절실히 한계를 느끼고 있다. ‘필요한 프로그램은 스스로 만들어 사용한다’는 해커 정신을 충실히 실천하지 못하고 있는 게 안타까울 따름이다.(사실 내게 필요한 프로그램은 어지간한 건 이미 누군가에 의해 다 만들어져 있다. 다만 잘 만들어져 있는 프로그램을 조금 고쳐서 커스터마이즈하고 싶을 뿐이다.)