오늘 아침에도 pip install로 패키지를 설치했습니다. FastAPI, SQLAlchemy, Pydantic, pytest. 무료입니다. 한 푼도 내지 않았습니다.
점심엔 VS Code를 켰습니다. 무료입니다. 그 위에서 Git을 썼습니다. 무료입니다. 코드를 GitHub에 올렸습니다. (이건 유료인가요? 사실 기업이 무상으로 제공하는 거긴 합니다만.) 저녁엔 Linux 서버에 Docker 컨테이너를 띄웠습니다. 모두 무료입니다.
저는 이것들 중 어느 것에도 기여한 적이 없습니다.
13년 동안 개발자로 일하면서 이 생각을 외면해왔습니다. 바빠서, 기여할 실력이 없어서, 언젠가는 하겠다는 막연한 생각으로. 그 “언젠가"는 한 번도 오지 않았습니다.
오픈소스가 무너질 때 #
2021년 12월, Log4Shell 취약점이 공개됐습니다. Apache Log4j라는 Java 로깅 라이브러리의 심각한 보안 결함이었습니다. 전 세계 수백만 개의 서버가 위험에 노출됐습니다.
이 라이브러리를 유지하는 핵심 메인테이너는 소수의 자원봉사자였습니다. 대규모 기업들이 수익 창출에 사용하는 코드를, 무보수로 여가 시간에 관리하던 사람들이었습니다. 취약점이 공개된 후 그들은 크리스마스 연휴도 반납하고 패치 작업에 매달렸습니다.
그때 많은 사람들이 처음으로 자신들이 쓰는 소프트웨어 뒤에 누군가 있다는 것을 깨달았습니다.
이 패턴은 Log4j만의 이야기가 아닙니다. 인터넷 인프라의 상당 부분이 소수의 헌신적인 자원봉사자들에 의해 유지됩니다. 그들은 번아웃에 시달리고, 무례한 이슈 리포트에 지치고, 아무도 감사하지 않는 일을 계속합니다.
무임승차의 합리화 #
저는 이 상황을 여러 방식으로 합리화해왔습니다.
“내 실력이 부족해서”: 오픈소스 기여가 코드 제출만 있다고 생각했습니다. 하지만 문서 개선, 번역, 버그 리포트, 질문에 답변하기도 기여입니다. 초보자도 할 수 있는 기여가 있습니다.
“나 하나 안 해도 누군가 하겠지”: 이것이 공유지의 비극입니다. 모두가 같은 생각을 하면 아무도 하지 않습니다.
“회사에서 쓰는 거니까 회사가 기여해야 하는 거 아닌가”: 물론 회사도 기여해야 합니다. 하지만 그것이 개인의 책임을 면제하지는 않습니다.
“기여하면 법적 문제가 생길 수 있어”: 이건 거의 근거 없는 걱정입니다. 대부분의 오픈소스 프로젝트는 기여자 동의서(CLA)나 라이선스로 이 문제를 해결합니다.
솔직히 말하면, 모두 핑계였습니다.
기여하지 않는 것의 실질적 결과 #
개인의 도덕적 죄책감을 넘어서, 이것은 실질적인 결과를 만들어냅니다.
메인테이너 번아웃: 많은 주요 오픈소스 프로젝트의 메인테이너들이 번아웃을 공개적으로 선언합니다. Babel의 메인테이너, curl의 Daniel Stenberg, 많은 npm 패키지 관리자들. 그들이 프로젝트를 포기하면 수천만 명의 개발자가 영향을 받습니다.
보안 취약점 방치: 메인테이너가 적을수록 보안 감사도 적어집니다. 우리가 무료로 쓰는 코드 중 검토받지 않은 취약점이 얼마나 있을까요?
생태계 기형화: 인기 있는 프레임워크는 기여자가 넘치고, 중요하지만 덜 유명한 라이브러리는 방치됩니다. 하지만 그 덜 유명한 라이브러리에 인기 프레임워크가 의존하는 경우가 많습니다.
기여한다는 것의 의미 재정의 #
이 글을 쓰면서 “기여"의 범위를 다시 생각했습니다.
코드 기여 없이도 할 수 있는 것들:
-
Star 누르기: GitHub에서 사용하는 프로젝트에 ⭐ 누르기. 개발자에게 프로젝트가 사용되고 있다는 것을 알려줍니다.
-
버그 리포트: 문제를 발견하면 이슈를 등록합니다. 재현 가능한 코드와 환경 정보를 포함하면 더 좋습니다. “안 돼요"가 아니라 “이런 환경에서 이렇게 하면 이런 오류가 납니다"처럼.
-
문서 오타 수정 PR: 가장 낮은 진입 장벽의 기여입니다. 문서 읽다가 오타 발견하면 바로 수정 PR 날릴 수 있습니다.
-
사용 사례 공유: 블로그 포스팅, 튜토리얼 작성. 이 글처럼요. 생태계의 지식을 늘리는 것도 기여입니다.
-
금전적 후원: GitHub Sponsors, Open Collective, Patreon. 월 $1도 메인테이너에게는 의미가 있습니다. 자신이 매일 쓰는 도구에 커피 한 잔 값을 내는 것이 이상한 일인가요?
-
커뮤니티 지원: Stack Overflow, GitHub Discussions에서 같은 문제를 겪는 사람에게 답변하기.
행동으로 옮기기 #
이 글을 쓰면서 스스로에게 다짐했습니다.
지금 당장 사용 중인 프로젝트 목록을 만들어봤습니다. FastAPI, Pydantic, SQLAlchemy, pytest, Black, isort, Flutter, VS Code… 20개가 넘습니다.
오늘 할 것: 이 프로젝트들에 Star를 누르고, GitHub Sponsors를 지원하는 프로젝트들에 월 후원 설정하기. 금액은 작아도 됩니다.
이번 달 할 것: 사용 중에 발견한 문서의 부정확한 부분 PR 올리기.
올해 할 것: 실제로 사용하는 라이브러리의 작은 기능이나 버그 수정에 기여하기.
공짜는 없다 #
오픈소스가 무료라는 말은 금전적 가격이 없다는 것이지, 비용이 없다는 게 아닙니다. 누군가의 시간, 에너지, 열정이 그 자리를 채웁니다.
우리가 일주일에 40시간 오픈소스 위에서 일하는 동안, 그것을 만든 사람들은 주말과 저녁을 써서 무보수로 유지합니다. 우리가 그 소프트웨어로 급여를 받는 동안.
이것이 지속 가능한 모델인지 물어봐야 합니다.
저는 지금까지 무임승차를 했습니다. 앞으로는 조금씩이라도 갚아나가려 합니다. 늦었지만, 하지 않는 것보다는 낫습니다.
당신이 사용하는 오픈소스 프로젝트에, 오늘 Star 하나 눌러보시겠어요?