개인 프로젝트인 코드 에디터 Boo를 잠시 멈추고 프로그래밍 언어를 만들기 시작한 이유, 그리고 사람들의 감정을 움직이는 소프트웨어를 만들고자 하는 마음에 대한 이야기.
오늘 아침에 일어났다. 커피를 내리고, 가족들은 다시 잠에 들었고, 나는 자유로운 오후를 얻게 됐다.
글이나 한 번 써볼까 생각했다. 아마 이 글은 지울 수도 있다. 하지만 지금 당신이 이 글을 읽고 있다면, 결국 올리긴 했다는 뜻이다.
요즘 사람들은 왜 내가 Boo를 잠시 멈추고 프로그래밍 언어를 만들고 있냐고 묻는다. 내 감정을 한 번 적어보는 것도 좋겠다 싶었다.
Boo는 오로지 나 자신을 위해 만든 코드 에디터다. 애초에 대중적인 에디터를 만들겠다는 의도는 전혀 없었다. 물론 사람들이 써준다면 재밌겠지만, 그게 목표는 아니었다. 올해 들어서야 비로소 일상적인 작업에 실제로 쓸 수 있을 만큼은 기능적으로 돌아가기 시작했다. 사람-키보드 상호작용에 대한 새로운 내비게이션 방식을 도입했고, LSP 시스템을 더 빠르고 OS에 부담이 덜 가는 방식으로 대체했다. 그런데도 대체 왜 오픈 소스로 공개하지 않느냐는 질문을 계속 받는다.
일단, 차근차근 얘기해 보자.
내 마음을 움직이는 건 Boo가 성공할지, 실패할지 하는 생각이 아니다. Boo의 최종 사용자는 나 자신이다. 아직은 뭔가 부족하다고 느낀다. 그리고 나는 소프트웨어는 우리에게 영감을 줄 수 있어야 한다고 생각한다. 여가 시간에 Rio Terminal과 Boo를 함께 만들고 있는데 — 둘 다 Rust로 작성되었고, 공통점도 굉장히 많다 — 이게 내 즐거움을 좀 갉아먹는다. 어느 순간부터 너무 자동화된 일처럼 느껴지기 시작하기 때문이다. 둘 다 아키텍처도 비슷하고, 사용하는 언어도 같고, 릴리스 프로세스도 비슷하고, 기타 등등 전반적인 구조가 거의 닮아 있다.
어릴 적부터 나는 레고 블록 가지고 노는 걸 좋아했다. 축구를 하거나 비디오 게임을 하는 것 말고는 거의 대부분의 시간을 레고를 가지고 보냈던 것 같다. 레고가 재밌는 이유는, 오늘은 성을 만들고, 내일은 배를 만들 수 있다는 점이다. 꼭 똑같은 조각과 색을 쓸 필요도 없다. 심지어 레고 세트에 없는 것들도 가져올 수 있다. 예를 들어 나무 막대기 같은 걸 섞어 쓸 수도 있다.
프로그래밍이 반복적으로 느껴지기 시작하면, 사람들로 하여금 “와” 하는 감탄을 끌어내는 무언가를 만들 확률은 꽤 떨어진다. 물론 이게 절대적인 법칙은 아니다. 다만, 영감을 받았을 때 비로소 영감을 주는 소프트웨어를 만들 수 있다고 믿는다.
나는 늘 젤다의 전설: 브레스 오브 더 와일드를 예로 든다. 이 게임은 정말 기가 막히게 잘 만들어져서, 게임을 딱히 좋아하지도 않는데 이 게임 하나를 하려고 콘솔을 산 사람들을 여럿 알고 있다. 그리고는 게임을 다 깨고 나서, 콘솔까지 포함해 전부 다 팔아버렸다. 내가 말하고 싶은 건 이런 것이다. 사람들이 한 번 써보면, 평생 기억에 남을 무언가를 만들기 위해 시간을 들이는 것.
Boo는 비즈니스가 아니다. 이걸로 돈을 벌 필요도, 벌고 싶은 마음도 없다. 마감 기한도 없고, 그렇다고 또 다른 VS Code를 만들고 싶지도 않다. 억지로 뭔가를 만들어내고 싶지 않다.
그렇다면, 레고를 아예 그만둘 필요는 없지 않은가? 그냥 한쪽에 잘 세워 두었다가, 영감이 다시 찾아오면 그때 다시 이어서 만들면 된다. 그래서 나는 Boo를 잠시 멈춰 두었고, 지금은 나만의 프로그래밍 언어를 만들고 있다. 언젠가는 그 언어로 Boo를 다시 작성하는 게 내 목표다.
“와! 일 진짜 많겠다.” 맞다. 하지만 이건 내 취미 프로젝트다. 나는 늘 프로그래밍 언어를 좋아했고, 요즘은 바이너리와 컴파일러에 대해 더 많이 배우면서 엄청 즐기고 있다. 그래서 굳이 사람들이 말하는 ‘성공하는 레시피’를 따라야 한다고 느끼지 않는다. 내 머리가 돌아가는 방식이 그렇고, 나는 그대로 따라가 보려 한다.
그나저나, 이 글은 Boo로 작성했다.