소프트웨어는 녹이 슨다
이상한 얘기이지만 소프트웨어는 가만 냅두면 녹이 슨다. 소프트웨어 개발자가 이런 얘기를 하다니 정말 전문성이 떨어지는 느낌이다. 하지만 소프트웨어가 냅두면 녹이 슨다고 하면 오히려 소프트웨어 개발자들이야 말로 강하게 동감할 것이다.
소프트웨어는 언제나 망가져 있다. 수사적 표현이 아니라, 기술적으로 그러하다. 소프트웨어는 다양한 방법으로 망가질 수 있는데 이는 매우 당연한 것이다. 왜냐하면 소프트웨어는 완전히 망가져 있는 상태에서 약간 덜 망가진 상태로 수리되면서 태어나기
때문이다. 좀더 정확히 말하면, 원래 자연 상태에서는 소프트웨어라는 것이 있지도 않으며 이것이 내가 ‘완전히 망가진 상태’라고 하는 것이다. 이것이 자연의 디폴트 상태라고 보면 모든 소프트웨어가 언제나 상당히 망가져 있다는 주장은 크게 이상할 것도 없는 얘기다.
언젠가 ‘가만히 냅뒀는데 왜 서버가 죽어요?’라는 질문도 들었다. 나는 ‘가만히 냅두니까 죽은 겁니다’라고 대답해 주었다. 스스로 코드를 변경시키는 소프트웨어는 거의 없다. 대부분의 코드는 사람이 직접 짜는 것이다. 소프트웨어는 대량 복제되지만 코드는 대량 생산되지는 않는다. 소프트웨어는 변하지 않아도 그걸 쓰는 사람들은 변한다.
내 소프트웨어는 변하지 않았어도 다른 사람들이 만든 소프트웨어는 자꾸 바뀐다. 소프트웨어 세계는 상호운용성이 중요하므로 가만히 있으면 소프트웨어는 고장난다. 자고 일어날 때마다 한국어 억양이 계속 바뀐다고 생각해보라. 한 달이 지났더니 나만 서울말을 하고 다른 사람들은 모두 평양말을 한다. 두 달 지났더니 연변말을 한다. 일 년이 지났더니 일본어 같이 되었다. 나만 서울말을 한다. 소프트웨어 세상은 그런 식이다. 다만 서울말이 일본어가 된다고 더 좋아질 것도 없는 반면 소프트웨어 세상의 말, 프로그램 인터페이스는 조금씩 좋아진다. 그걸 잘 따라가면 적은 말로도 많은 것을 더 정확히 할 수 있게 된다.
소프트웨어가 바뀌지 않아도, 소프트웨어의 어디가 망가져 있는지에 대한 정보 역시 업데이트된다. 시간이 지나면 알려진 결함이 쌓인다. 그때그때 얼른 고쳐주지 않으면 마치 사람이 나이가 들며 병이 드는 것마냥 소프트웨어가 버그가 많아져 쓸 수 없게 되는 것을 볼 수 있다.
홀연히 사라졌던 whytheluckystiff는 이렇게 말한 바 있다: 프로그래밍은 죄다 부질없는 짓이다. 당신의 작품이 1년 뒤 더 우월한 것에 의해 대체되는 것을 보게 된다. 좀더 지나면 아예 돌아가지도 않는다.
나는 이렇게 생각한다. 소프트웨어가 프로그래밍해서 스스로의 코드를 개선할 수 있게 되기 전까지는, 소프트웨어는 누군가가 돌보지 않으면 금세 시들게 된다. 그렇다면 내가 만든 소프트웨어에게 긴 생명을 주고 싶다면 어떻게 해야 할까? 나 말고도 다른 누군가가 고칠 수 있게 해야 한다. 내 소프트웨어가 가치가 있다면 다른 누군가도 쓸 것이다. 내 소프트웨어가 가치가 있다면 망가졌을 때 다른 사람도 고치고 싶어할 것이다. 다른 사람이 고치고 싶어할 때 고칠 수 있게 허락해야 한다. 그렇게 소프트웨어는 약간 더 좋아지고 조금 더 시간을 번다.