Feeds:
댓글

Archive for 10월 5th, 2008

마이크로소프트는 죽었다

원문 http://www.paulgraham.com/microsoft.html 폴 그래햄

2007 4월

며칠 전에 나는 문득 마이크로소프트가 죽었다는 것을 깨달았다. 나는 어떤 젊은 벤쳐 창업자에게 구글이 야후랑 어떻게 다른지 이야기하는 중이었다. 나는 야후가 처음부터 마이크로소프트에 대한 두려움 때문에 왜곡되었다고 말했다. 그게 야후가 자신을 기술 회사가 아닌 “미디어 회사”로 자리 매김한 이유다. 그리고선 그의 얼굴을 들여다 봤는데 이해하지 못했다는 것을 알았다. 그건 마치 내가 80년대 중반에 여자애들이 얼마나 배리 매닐로우를 좋아했는지 이야기한 것 같았다. 배리 누구?

마이크로소프트? 그는 아무것도 말하지 않았지만, 그가 아무도 그들을 무서워하지 않는다는 것을 확신한다고 말할 수 있다.

마이크로소프트는 80년대 말부터 시작해서 거의 20년간 소프트웨어 세계에 그림자를 드리우고 있다. 나는 그들 전에는 IBM이 그랬다고 기억한다. 나는 이 그림자를 대부분 무시했다. 나는 마이크로소프트 소프트웨어를 사용한 적이 없고 단지 간접적으로 영향을 받았다 — 예를 들면 봇넷에서 보내는 스팸같은 것들. 그래서 신경 쓰지 않았기 때문에 그림자가 사라진 것을 눈치채지 못했다.

하지만 이젠 없다. 나는 느낄 수 있다. 누구도 더 이상 마이크로소프트를 겁내하지 않는다. 그들이 아직 많은 돈을 벌고 있지만–돈이라면 IBM도 벌고 있다. 하지만 위협적이지는 않다.

언제 마이크로소프트가 죽었을까? 그리고 무엇때문에? 나는 그들이 적어도 2001년까지는 위협적이었다는 것을 안다. 왜냐하면 내가 그들이 겉보기보다는 덜 위협적이라는 내용의 에세이를 그때 쯤 썼기 때문이다. 나는 2005년쯤에 그들이 죽었다고 추측한다. 우리가 Y Combinator를 시작했을 때 우리는 우리가 투자한 벤쳐기업들의 경쟁자로서 마이크로소프트에 대해 걱정하지 않았다. 사실 우리는 투자자에게 보여주기 위해 벤쳐기업들을 모아서 데모를 하는 날에도 그들을 초청한 적이 없다. 우리는 야후나 구글 그리고 다른 인터넷 회사들은 초청했지만 마이크로소프트를 초청하려고 신경쓴 적은 없다. 저쪽의 누구도 우리에게 이메일을 보낸 적도 없다. 그들은 다른세계에 있다.

뭐가 그들을 죽였을까? 2000년대 중반에 동시에 일어난 4가지 것이라고 생각한다.

가장 명백한 것은 구글이다. 마을에 대장은 한명만 있을 수 있고 명백히 구글이 대장이다. 현재로선 구글이 좋은 의미에서건 나쁜 의미에서건 가장 위험한 회사이다. 마이크로소프트는 기껏해야 뒤쳐져서 쩔룩거리며 따라오고 있다.

언제 구글이 선두에 나섰을까? 그 시기를 2004년 8월 그들의 상장때로 미뤄 잡는 경향이 있을 것이지만 그때에는그들이 싸움의 규칙을 정하고 있던 것은 아니다. 나는 그들이 2005년에 선두자리를 차지했다고 말하고 싶다. Gmail이 그들이 한계를 넘게한 것 중 하나였다. Gmail은 그들이 검색보다 더 많은 것을 할 수 있다는 것을 보여줬다.

Gmail은 또한 웹 기반 소프트웨어가 나중에 “Ajax”라고 불린 기술의 장점을 활용하다면 얼마큼 할 수 있는지를 보여줬다. 그리고 그것이 마이크로소프트의 2번째 사망원인이다: 모든 사람이 데스크탑은 끝났다는 것을 알게 되었다. 이제 응용프로그램이 웹상에서 살아야한다는 것은 불가피해 보인다 — 이메일 뿐만 아니라 포토샵에 이르기까지 모든 것이. 심지어 마이크로소프트도 이제는 그걸 안다.

얄궂게도 마이크로소프트는 자기도 모르는 사이에 Ajax를 만드는데 협조했다. Ajax에 있는 x는 XMLHttpRequest 객체에서 온 것인데, 그것은 브라우저가 페이지를 표시하는 동안 뒤에서 서버와 통신하는 것을 가능하게 해준다. (원래는 서버와 통신하는 유일한 방법은 새로운 페이지를 요구하는 것이었다.) XMLHttpRequest는 90년대 말에 마이크로소프트가 Outlook에 필요해서 만들었다. 그들이 알아채지 못한 것은 이것이 수 많은 다른 사람들에게도 유용할 것이라는 사실이었다 — 사실 웹 응용프로그램이 데스크탑 것처럼 작동하게 만들고 싶어하는 누구에게라도.

Ajax의 또 다른 중요한 구성요소는 자바스크립트인데 이것은 브라우저 안에서 실행되는 프로그램 언어이다. 마이크로소프트는 자바스크립트의 위협을 보고선 할수 있는 한 오랬동안 이것을 망가트리려 노력했다. [1] 하지만 결국은 마치 나무가 철조망을 넘어서서 자라는 것처럼 익스플로러의 잘못된 구현을 극복하는 자바스크립트 라이브러리를 만듦으로써 오픈 소스 진영이 이겼다.

마이크로소프트의 세번째 사망원인은 초고속 인터넷이다. 이젠 누구라도 신경만 쓴다면 고속 인터넷에 접속할 수 있다. 서버로 가는 통로가 커질 수록 데스크탑은 불필요해진다.

관에 마지막 못을 박은 것은 다른 무엇보다도 애플이었다. 애플은 OS X 덕분에 기술 업계에서는 매우 드물게 죽었다가 살아났다. [2] 그들의 승리는 너무나 완전해서 이제 나는 윈도가 돌아가는 컴퓨터를 지나치게 되면 놀란다. 우리가 Y Combinator에서 투자하는 거의 모든 사람들이 애플 노트북을 사용한다. 벤쳐 학교에 있는 청중들도 마찬가지였다. 이제 모든 컴퓨터 전문가들은 맥이나 리눅스를 사용한다. 마치 맥이 90년대에 그랬던 것처럼 윈도는 이제 할머니용이다. 그래서 이제 데스크탑이 더 이상 문제가 되지 않을 뿐더러 어찌되었건 아무도 마이크로소프트 제품을 사용하는 컴퓨터에 대해서 신경쓰지 않는다.

물론 애플은 음악 분야에서도 마이크로소프트가 도망가게 만들었고 TV와 전화 분야에서도 그러는 중이다.

나는 마이크로소프트가 죽어서 기쁘다. 그들은 네로나 코모도스 같았다 — 물려받은 권력이 당신을 사악하게 만드는 것과 똑같이. 왜냐하면 마이크로소프트 독점은 마이크로소프트로부터 시작하지 않았다는 것을 기억하라. 그들은 그것을 IBM으로부터 얻었다. 소프트웨어 업계는 1950년대부터 대략 2005년까지 독점에 의해 위협받아 왔다. 실질적으로 그것의 존립자체가. “Web 2.0″이 그토록 행복감의 분위기를 갖고 있는 이유 중의 하나는 의식적이건 아니건 간에 이 독점의 시대가 마침내 끝날 것이라는 느낌 때문이다.

물론 한사람의 해커로서 나는 망가진 것을 어떻게 고칠 것인지 생각하지 않을 수 없다. 마이크로소프트가 되돌아올 어떤 방법이 있을까? 원칙적으로는 그렇다. 어떻게하면 될지 알려면 두가지를 상상해 보라: (a) 마이크로소프트가 현재 손에 쥐고 있는 현금의 양과 (b) 래리와 세르게이가 10년 전에 구글에 대한 아이디어를 백만달러에 팔려고 노력하면서 검색 엔진을 여러판 만들었지만 모두에게서 거절 당했다는 점을.

놀라운 점은, 뛰어난 해커들 — 위험할 정도로 뛰어난 해커들 — 은 마이크로소프트 같은 부자회사의 입장에서 보면 매우 싸게 고용 가능하다는 것이다. 그들은 더 이상 똑똑한 사람들을 고용할 수 없지만 단위가 다르게 많이 주고 원하는 만큼 사들일 수 있다. 그래서 그들이 만약 다시 경쟁에 끼어들고 싶다면, 이렇게 하면 할 수 있다:

  1. 모든 좋은 “Web 2.0″ 벤쳐 회사들을 사들인다. Facebook에 치뤄야 했어야하는 값보다 적은 비용으로 그들 대부분을 살 수 있다.
  2. 사들인  회사 모두를 실리콘 밸리에 있는 건물에 넣고, 레드몬드와의 어떤 접촉에서도 보호할 수 있도록 납으로  된 보호막을 친다.

나는 이렇게 제안해도 무리없다고 느낀다, 왜냐하면 그들이 절대로 이렇게 안할것이기 때문이다. 마이크로소프트의 가장 큰 약점은 그들이 얼마나 실망스러운지 아직 깨닫지 못했다는 것이다. 그들은 아직 내부에서 소프트웨어를 작성할 수 있다고 생각한다. 아마도 데스크탑 세계 기준으로는 그럴 수 있을 지도 모른다. 하지만 그 세계는 몇년 전에 끝났다.

나는 이 에세이에 대한 반응이 어떨지 이미 안다. 독자들의 절반은 마이크로소프트는 아직도 엄청난 이익을 내고 있는 회사라고 말할 것이고 내가 조그만 “Web 2.0″ 거품 속에 있는 몇명의 사람들을 근거로 결론을 내리는 것에 대해 좀 더 조심해야 할 것이라고 할 것이다. 그리고 나머지 절반, 젊은 쪽 절반은 이건 이미 오래된 뉴스라고 불평할 것이다.

마이크로소프트는 죽었다: 유서도 읽어보세요.

주석

[1] 소프트웨어가 호환되지 않게 만드는 데는 의식적 노력이 필요하지 않다. 당신이 해야할 일은 단지 버그를 고치는데 너무 열심히 일하지 않는 것이다 — 만약 큰 회사라면 다반사로 일어난다. 상황은 “문학 이론가”의 글쓰기와 비슷하다. 그들 대부분은 불분명하게 하려고 노력하는 것은 아니다; 그들은 단지 명확하게 하려는 노력을 하지 않을 뿐. 돈이 되지 않기 때문에.

[2] 부분적으로는 기술 회사들 중에서는 드문 방법으로 존 스컬리에게 스티브 잡스가 쫓겨났기 때문이다. 만약 애플 이사회가 그런 큰 실수를 하지 않았다면 되살아날 필요도 없었을 것이다.

Read Full Post »

첫 Haskell 프로그램

프로그램 언어를 배우는데 젤 좋은 방법은 어떤 프로그램을 짜보는 거라는 평소의 생각에 따라 haskell로 smi 화일의 싱크를 조절하는 프로그램을 짜 보았다.

module Main where

import System.Environment
import Text.Regex.Posix

split :: String -> [String]
split line =
  let (_, _, _, result) = line =~ "(.*<SYNC (START|Start)=)([0-9]+)(>.*)" :: (String, String, String, [String]) in
  result

shiftTimeLine :: Int -> String -> String
shiftTimeLine time line =
  case split line of
    [] -> line
    [a,_,x,b] -> a ++ show ((read x) + time) ++ b

shiftTime :: [String] -> Int -> [String]
shiftTime ls time =
  map (shiftTimeLine time) ls

minuteFrom :: String -> Int
minuteFrom "" = 0
minuteFrom str = read $ take (length str - 1) str

signFrom "+" = 1
signFrom "" = 1
signFrom "-" = -1

fracFrom "" = 0
fracFrom str = read $ take 3 $ drop 1 str

parseTime :: String -> Int
parseTime time =
  let (_, _, _, result) = time =~ "([-+]?)([0-9]+:)?([0-9]+)(\\.[0-9]+)?" :: (String, String, String, [String])
      [signStr, minuteStr, secStr, fracStr] = result
      sign = signFrom signStr
      minute = minuteFrom minuteStr
      sec = read secStr :: Int
      frac = fracFrom fracStr in
  sign * ((minute * 60 + sec) * 1000 + frac)

main = do
  args <- getArgs
  case args of
    [path, time] -> do
      file <- readFile path
      writeFile (path ++ ".smi") $ unlines $ shiftTime (lines file) (parseTime time)
      return ()
    _ -> putStrLn "usage: sami filename [+|-]time"
컴파일하려면
$ ghc --make sami.hs
실행은
$ ./sami some.smi 3:00
(자막을 현재 싱크에서 3분후에 보여준다)
$ ./sami someother.smi -20.5
(자막을 현재 싱크에서 20.5초 빠르게 보여준다)
새로운 싱크의 자막은 현재 자막 이름에 .smi 붙어서 생긴다. 위의 예에서라면 some.smi.smi 이런식.

Read Full Post »

팔로우

모든 새 글을 수신함으로 전달 받으세요.