오픈 소스가 커리어와 정체성을 만들어준 대가로, 경계의 붕괴와 과도한 기대, 그리고 조울증으로 인한 위기를 어떻게 겪었는지에 대한 회고.
나는 영적인 각성을 겪고 있다고 생각했다. 사실은 정신과적 응급상황이었다.
그 일이 시작된 곳은 스웨덴의 한 테크 컨퍼런스였다. 나는 며칠째 잠을 자지 못했다. 나는 파이썬 생태계에서 가장 다작으로 꼽히는 오픈 소스 개발자 중 한 명이었고, 지구에서 가장 많이 다운로드되는 HTTP 라이브러리를 유지보수하고 있었으며, 전 세계 컨퍼런스에서 키노트를 하고 있었다. 그러면서도 집에서 6천 마일 떨어진 호텔 방에서 제정신을 잃어가고 있었다.
내 주변의 누구도 알지 못했다. 조증은 생산성처럼 보였다. 늘 그렇다.
이 글은 내가 10년 동안 쓰기를 피해온 이야기다. 내 인생을 바꿔놓은, 내가 만든 라이브러리 Requests의 기원 이야기가 아니다. 그건 이미 여러 번 말했다. 이건 그 대가에 대한 이야기다.
오픈 소스는 내게 커리어만 준 게 아니었다. 아무 정체성도 없던 내게 정체성을 줬다.
나는 대학을 중퇴한 사람이었고, 그 전 해에는 맥도날드에서 최전선에서 일하고 있었다. 교육 시스템은 나를 포기했다. 내 GPA는 1.14였다. 직업적 정당성을 얻기 위한 표준 경로는 닫혀 있었고, 새로운 문을 어떻게 열지도 몰랐다. 나는 용돈 수준의 돈을 벌려고 프리랜스 일을 입찰하며, 무슨 일이든 일어나기만을 바라고 있었다.
오픈 소스가 바로 그 “일어난 일”이었다.
Requests가 성공했을 때, 그건 단지 인기 있는 라이브러리가 아니었다. 내가 존재한다는 증거였고, 내가 해낼 수 있다는 증거였고, 내가 할 수 있는 일이 세상에서 가치가 있다는 증거였다. 다운로드 수는 점수판이었고, 나는 내가 한 번이라도 참가할 수 있게 허락된 유일한 게임에서 이기고 있었다. GitHub의 별 하나하나는 누군가가 이렇게 말하는 것이었다: 너는 중요하다, 네가 만든 것도 중요하다, 우리는 너를 본다.
어떤 시스템도 자신을 보지 않았던 아이에게, 그건 전부였다. 나는 그 단어를 가볍게 쓰지 않는다. 그건 전부였다. 오픈 소스 기여를 통해 정체성이 형성되는 일은 사람들이 생각하는 것보다 훨씬 흔하다. 자격증명 중심의 경로에 맞지 않았던 우리에게, 커뮤니티의 인정은 우리가 스스로를 유능한 사람으로 보게 만드는 주요한 거울이 됐다. 이것은 선물이다. 그 거울이 유일한 거울일 때에만 함정이 된다.
오픈 소스는 내게 Heroku를 줬다. Heroku는 내게 월급과 건강보험, 나를 진지하게 대하는 동료들, 그리고 인터넷 인프라의 최전열을 볼 수 있는 자리까지 줬다. 그리고 내가 여전히 소프트웨어 디자인에서 가장 중요한 아이디어 중 하나라고 믿는 "for humans" 철학을 옹호할 수 있는 플랫폼도 줬다.
오픈 소스는 내게 삶을 줬다. 아무것도 없는 상태에서, 기술과 관대함, 그리고 어느 학교를 나왔는지와 상관없이 좋은 일을 보상해주는 커뮤니티를 통해 만들어낸, 진짜 삶.
이후의 이야기는 배은망덕이 아니다. 회계다.
실제로는 이렇게 굴러갔다. 좋은 걸 만든다. 사람들이 쓴다. 사람들이 의존한다. 사람들이 이슈를 올리고, 기능을 요청하고, 버그를 신고한다. 커뮤니티가 커진다. 책임이 커진다. 기대가 커진다. 그리고 네 정체성을 준 그 대상이 곧 사람들이 의존하는 대상이기 때문에, “프로젝트를 유지보수하는 것”과 “자기 자신을 유지보수하는 것”을 분리할 수 없게 된다.
나는 여기에 경계를 세우지 못했다. 경계가 필요하다는 걸 몰랐기 때문이다. 보이지 않던 아이가 이제는 보이게 되었고, 그 가시성은 산소처럼 느껴졌다. 사용자가 늘수록 검증이 늘었다. 컨퍼런스가 늘수록 내가 중요하다는 증거가 늘었다. 프로젝트가 늘수록 세상이 나를 볼 수 있는 표면적이 늘었다. 나는 모든 것에 “예”라고 했다. “아니오”라고 말하는 건 내 삶을 구해준 문을 닫는 것처럼 느껴졌기 때문이다.
from dataclasses import dataclass
@dataclass
class MaintainerLoop:
"""The cycle that builds careers and breaks people."""
identity: str
project_success: float = 0.0
community_expectations: float = 0.0
self_worth: float = 0.0
def cycle(self):
# Success raises expectations.
self.community_expectations = self.project_success * 1.5
# Self-worth tracks community response.
self.self_worth = self.project_success
# When identity IS the project,
# every expectation becomes personal.
# Every criticism lands on the self,
# not just the code.
# There's no circuit breaker here.
# That's the design flaw.
pass
압박은 대체로 내가 스스로 만든 것이었다. 그 점은 솔직하게 말하고 싶다. Heroku에서 누가 내 오픈 소스 일을 두고 채찍을 휘두른 적은 없다. 커뮤니티가 나를 위협한 것도 아니다. 압박은, 내가 내 자아감을 프로젝트의 성공에 용접해버렸기 때문에 생겨났다. 프로젝트를 위협하는 것은 나를 위협하는 것이었다. 무례한 이슈 코멘트는 단지 코드에 대한 피드백이 아니었다. 내가 어렵게 파낸 그 공간에 존재할 자격이 있는지 누군가가 의문을 제기하는 일이었다.
그리고 이 모든 것의 밑바닥에는, 진단받지 못한 채로, 조울증이 있었다.
이 부분은 직접적으로 말해야 한다. 오픈 소스와 내 정신건강 위기 사이의 연결이야말로 내가 10년 동안 쓰기를 피했던 것이기 때문이다.
나는 임상적 세부사항은 다른 곳에서 이미 쓴 적이 있다. 내가 쓰지 않았던 건 연료에 관한 이야기다. 조증 삽화는 아무 데서나 튀어나온 게 아니다. 진단받지 못한 기분장애를 가진 젊은 사람이 최대 강도로 달리면서, 밤에 네 시간만 자고, 격주로 시간대를 넘나들고, 모든 기회에 “예”라고 말하고, “다작 오픈 소스 개발자”라는 역할을—누구에게나 지속 불가능하고, 내 뇌 화학을 가진 사람에게는 진짜로 위험한 속도로—수행한 결과였다. 외부 스트레스 요인과 조증 삽화의 관계는 조울증 연구에서 잘 문서화되어 있다. 스트레스가 조울증을 ‘원인’으로 만들지는 않지만, 조울증이 있는 사람에게서는 삽화를 촉발할 수 있다. 수면 붕괴는 특히 위험하며, 오픈 소스 메인테이너의 라이프스타일(시간대를 넘나드는 컨퍼런스, 심야 코딩 세션, 항상 켜져 있는 커뮤니티 참여 기대)은 사실상 수면 붕괴 기계다.
나는 자살 충동이 있지는 않았다. 하지만 조증 삽화는 사람들이 충분히 이야기하지 않는 방식으로 위험하다. 며칠 동안 잠을 자지 않는다. 판단력이 녹아내린다. 안정적인 정신이라면 결코 내리지 않을 결정을 내린다. 관계를 태우고, 돈을 태우고, 신뢰를 태운다. 자신과 세상에 대해 사실이 아닌 것들을 믿고, 그 믿음을 절대적 확신으로 밀어붙인다. 그리고 매 삽화는 이전보다 더 나빴고, 내가 내게 가하던 압박과 정확히 같은 속도로 악화됐다.
내 첫 번째 심각한 조증 붕괴는 스웨덴 그 컨퍼런스에서 왔다. 나는 일주일 내내 깨어 있었다. 나는 내가 깨달았다고 생각했다. 나는 정신병적 상태였다.
두 번째는 나를 12일 동안 병원에 머물게 했다. 나는 내가 신이라고 믿었다. 그리고 루시퍼. 그리고 예수. 그리고 시리우스 항성계에서 온 초지구적 존재. 정신병은 완전했다. 현실로 돌아왔을 때, 나는 나 자신도, 내 주변의 폐허도 알아보지 못했다.
Requests를 만들어낸 것과 같은 강도가 내 인생에서 최악의 경험들을 위한 조건도 만들어냈다. 엔진은 같았다. 출력만 두 개였을 뿐이다: 아름다운 소프트웨어와 산산이 부서진 정신. 오픈 소스 커뮤니티에서 아무도 이런 이야기를 하지 않는 이유는, 살아남은 사람들은 조용해지고, 살아남지 못한 사람들은 에세이를 쓸 수 없기 때문이다.
나는 이 침묵이 지쳤다. 오픈 소스 문화는 강도를 찬양한다. 밤샘 해킹 세션, 다작 기여자, 프로젝트 50개를 유지보수하며 1년에 컨퍼런스 10곳에서 키노트하는 사람을 찬양한다. 하지만 찬양하지 않는 것, 적극적으로 외면하는 것은, 그 강도가 ‘다르게 배선된’ 사람들에게 무엇을 하는가이다. 그리고 우리 중 많은 이들이 다르게 배선돼 있다. 애초에 우리가 여기 있는 이유가 그거다.
나는 20대를 한 기업에 팔았다. Heroku는 좋은 고용주였고, 나는 그곳에서 보낸 시간에 감사한다. 하지만 솔직한 진실은 이렇다. 나는 오픈 소스 덕분에 그곳에 갔고, 그곳에 있는 동안에도 오픈 소스를 유지보수했으며, 두 가지가 너무 얽혀서 어디서 일이 끝나고 어디서 자원봉사가 시작되는지 구분할 수 없게 됐다. 한 인간으로서 가장 생산적이었던 시기, 에너지는 가장 많고 의무는 가장 적었던 시기를, 나는 무료로 유지보수하던 프로젝트 생태계와 그 무료 노동의 혜택을 본 회사에 바쳤다. 불평이 아니다. 조건을 완전히 이해하지 못한 채 내가 맺어버린 거래에 대한 묘사다.
나는 너무 많이 여행했다. 2010년대의 컨퍼런스 문화는 가차 없었고, 나는 그 한복판에 있었다. 키노트를 했고, 발표를 했고, 참석했고, 네트워킹했다. 셀 수 없을 만큼 많은 호텔 방과 공항 라운지의 내부를 봤다. 그땐 성공처럼 느껴졌다. 하지만 돌이켜보면, 기분장애가 있고 경계가 없던 젊은 사람이, 자극과 검증을 꾸준히 공급받으며 상태를 더 악화시키고 있었던 것이다. 시간대 변경은 곧 수면 붕괴였다. 모든 컨퍼런스는 공연이었다. 모든 애프터파티는 쉬지 않을 기회였다.
나는 나 자신을 너무 많이 내어줬다. 단지 코드만이 아니었다. 나 자신을. 내 시간, 내 에너지, 내 정서적 대역폭, 내 정체성을. 나는 나를 공공 자원으로 만들어놓고, 대중이 내 자원에 권리가 있다고 느끼는 것을 보고 놀랐다. 이것이 오픈 소스가 제안하는 거래다. 모든 사람에게 나쁜 거래는 아니지만, 내 특정한 정신건강 프로필과, 외부 검증으로 자기 가치를 끌어올리려는 내 특정한 성향을 고려하면, 내게는 특히 나쁜 거래였다.
나는 거의 정신을 잃을 뻔했다. 문자 그대로. 여러 번. 그리고 내가 몸담았던 문화는, 잃을 가능성을 높이는 바로 그 행동들을 보상했다. 경조증적 생산성은 주변 누구에게도 경고 신호가 아니었다. 기능이었다. “Kenneth는 코드를 엄청 많이 내놓는다.” 그래. 그럴 만한 이유가 있다. 그건 규율이 아니다.
가장 쓰기 어려운 부분은 이것이다. 오픈 소스가 없었다면 내가 어떤 사람이 됐을지 모르겠다. 이 말은 양면을 가진다. 나는 아무도 아니었을 수도 있다. 나는 더 행복했을 수도 있다. 내 내면을 공공 공연으로 만들 필요가 없는 다른 문을 통해 안정적인 커리어로 들어갔을 수도 있다. 삶에는 대조군이 없다. 주어진 삶을 살고, 거기서 배우려고 할 뿐이다.
나는 정체성을 프로젝트와 분리했어야 했다. Requests는 라이브러리다. 나는 사람이다. 둘을 혼동한 것이 대부분의 피해의 근본 원인이었다. 프로젝트가 곧 ‘너’가 되면, 모든 이슈는 개인적이 되고, 모든 비판은 실존적이 되고, 모든 성공은 정확히 잘못된 방식으로 중독적이 된다. 나는 무언가를 만들고, 공개하고, 그리고 집에 돌아가서 ‘무언가를 만든 사람이기도 한 사람’으로 살았어야 했다. ‘그 무언가 그 자체인 사람’이 아니라.
나는 진단을 더 일찍 받았으면 좋았을 것이다. 진단이 모든 걸 치유하는 마법 지팡이라서가 아니다. 그건 정보일 뿐이다. 하지만 나는 붕괴가 오기 전까지 그 정보를 갖고 있지 못했다. 다루고 있는 것이 어떤 형태인지 알면 세상을 통과하는 방식이 달라진다. 나는 앞이 보이지 않는 채로 세상을 통과하고 있었다.
나는 더 많이 “아니오”라고 말했어야 했다. 컨퍼런스에도, 새 프로젝트에도, 커뮤니티에서 내 표면적이 꾸준히 확장되는 것에도. 그것들이 나빠서가 아니라, 매번의 “예”가 이미 감당할 수 있는 부하를 넘어선 시스템에 압력을 더하는 또 하나의 약속이었기 때문이다.
나는 내 재정적 안전을 커뮤니티의 호의에 묶지 않았어야 했다. 그건 삶의 기반으로는 취약하다. 특히 삽화 동안 호의를 빠르게 잠식해버릴 수 있는 상태가 있다면 더욱 그렇다.
이것들은 자책이 아니다. 사건으로부터 10년 뒤에 쓰는, 포스트모템의 엔지니어링 노트다.
이 글을 읽고 스스로를 알아보는 사람에게 직접 말하고 싶다.
오픈 소스 프로젝트를 유지보수하고 있는데 생산성이 파도처럼 몰려오는 걸 느끼거나, 좋은 시기에는 잠을 거의 자지 않거나, 최고의 작업이 고양되고 전기가 흐르는 듯한 상태에서 나온다면, 제발 그걸 주의 깊게 봐라. 그게 그저 몰입(flow)일 수도 있다. 다른 무언가일 수도 있다. 나는 차이를 몰랐고, 내가 배웠을 때는 이미 붕괴가 지나간 뒤였다.
당신을 훌륭한 오픈 소스 기여자로 만드는 것들(과집중, 강도, 패턴 인식, 머릿속에 전체 시스템을 유지하는 능력)은, 어떤 정신의학적 상태를 더 그럴듯하게 만들고 또 더 발견하기 어렵게 만드는 것들과 상당히 겹친다. 커뮤니티는 당신이 그걸 만들어내는 데 무엇이 드는지 묻지 않은 채 결과물을 찬양할 것이다. 악의가 아니다. 사람보다 코드를 최적화하는 시스템일 뿐이다.
정체성을 프로젝트와 분리하라. 배포를 하지 않을 때도 당신을 봐주는 사람들을 찾아라. “요즘 невероят하게 생산적이에요”가 때로는 증상이지 성공담이 아니라는 걸 이해하는 의사를 만나라. 커뮤니티의 승인 없이는 현실감을 느낄 수 없는 삶이 아니라, 그것과 무관하게 서 있는 삶을 만들어라.
내가 23살이었고, 코드가 너무 아름답게 흘러나와서 3일 연속 밤을 새우고 있을 때 누군가가 이런 말을 해줬으면 좋았을 것이다. 코드는 아름다웠다. 나는 위험했다.
시간은 모든 것을 치유한다. 진부한 말인 건, 사실이기 때문이다.
테크 업계의 모든 것은 계절적이다. 내가 2013년에 경험한 유명세는, 2026년에 내가 경험하는 고요함과는 다른 기후다. 둘 다 날씨다. 어느 것도 영원하지 않다. 내가 저지른 실수는 그 유명세의 계절이 내 삶의 전체 기후를 정의하는 것처럼 다룬 것이고, 계절이 바뀔 때 대비가 되어 있지 않았다는 것이다.
나는 앞서 내가 자라서 벗어난 가치들과 남은 가치들에 대해 쓴 적이 있다. 그 에세이는 이 글의 동반작이다. 그 글이 내가 어디에 도착했는지에 관한 글이라면, 이 글은 그 착륙에 무엇이 들었는지에 관한 글이다.
테크는 라이프스타일이 아니라 기술(craft)이 됐다. 나는 여전히 코드를 쓴다. 나는 여전히 코드와 의식 사이의 재귀 루프에 대해 생각한다. 나는 여전히 프로그래머가 소프트웨어를 출시할 때 어떤 종류의 마음을 형성하고 있는지 생각할 책임이 있다고 믿는다. 하지만 무게중심은 옮겨갔다. 이제 코드는 삶을 위해 봉사하지, 그 반대가 아니다.
나는 아들이 있다. 나는 나보다 먼저 징후를 보는 아내가 있다. 다운로드 수나 커뮤니티의 승인에 기대지 않는 무언가에 나를 붙들어두는 신앙 실천이 있다. 나는 진단과 치료 계획이 있고, 엔진이 너무 뜨겁게 돌아갈 때를 알아차릴 만큼의 자기 이해가 있다.
내가 다시 그걸 할지 모르겠다. 내가 할 수 있는 말 중 가장 진실한 말이다. 코워킹 스페이스에 있던 그 아이에게는 더 나은 선택지가 없었고, 열린 길은 비범했다. 하지만 그 대가를 알게 된 지금—정신건강 위기들, 커뮤니티의 균열, 강도에 팔아버린 세월, 한 사람의 블로그 포스트로도 빼앗길 수 있는 무언가 위에 세운 정체성—나는 모르겠다. 정말로 모르겠다.
내가 아는 건 그것이 일어났다는 사실이다. 그것은 내게 모든 것을 줬고, 나를 거의 부숴버릴 뻔했고, 이제 그것은 내 현재의 중심이 아니라 내 역사 일부가 됐다. 나는 그것이 준 것에 감사한다. 그것이 가져간 것에 대해 솔직하다. 그리고 그에 대해 감사나 원망을 ‘연기’하는 일은 끝냈다.
내가 사는 집은 내가 배포하는 코드보다 더 중요하다. 10년 전의 나는 이런 말을 쓰지 않았을 것이다. 지금 내가 쓸 수 있는 말 중 가장 진실한 말이다.
이 에세이는 The Lego Bricks Era의 더 어두운 동반작이다. 여기서 언급된 정신건강 위기의 임상적 세부사항은 MentalHealthError를 보라.