소프트웨어 세계에서 "자유"라는 단어는 항상 오픈소스와 함께 등장한다. 그런데 한국에서 개발자로 살아가다 보면, 그 자유가 내 것이라는 느낌이 잘 들지 않는다.
그런데 꽤 프로그래밍을 해보면서 나는 이 지점에서 왜 그런지 몇가지 느낀 바가 있어 서술한다.

(Richard Matthew Stallman)
오픈소스의 자유는 누구의 자유인가
Richard Stallman이 정의한 소프트웨어의 4가지 자유, 즉 실행, 학습, 재배포, 수정배포는 하나의 암묵적 전제를 깔고 있다. 그 자유를 행사할 수 있는 기술적 역량과 언어적 접근성이 있다는 전제다.
영어 공식 문서, 영어 GitHub 이슈, 영어 Stack Overflow. 오픈소스 생태계의 1차 언어는 영어다. 비영어권 개발자에게 이 자유는 법적으로는 존재하지만 실질적으로는 계층화된 권리다.
로마 시대의 자유민을 떠올리면 정확하다. 법적으로는 자유인이지만 후원자(patronus) 없이는 사회적 이동이 불가능했다. 오픈소스의 자유도 구조가 같다. 기술적으로 열려있지만, 그 자유를 행사하려면 영어, 영미권 코딩 문화, GitHub 네트워크, 서구 소프트웨어 공학 용어 체계라는 후원자 역할을 하는 인프라가 필요하다.
그런면에서 오픈 소스 진영의 대표격이라고 할 수 있는 리눅스 또한 마찬가지다.
리눅스는 공짜가 아니다
리눅스의 금전 비용은 0원이다. 하지만 총소유비용(TCO)은 다르다.
한국 개발자가 리눅스를 실제로 운용하려면 영어 명령어 체계를 익혀야 하고, 드라이버 문제를 직접 해결해야 하고, 트러블슈팅을 영어 문서로 해야 한다. 반면 윈도우는 유료지만 한국어 지원, 드라이버 자동화, 커뮤니티 문서의 한국어화로 실질 비용이 낮다.
공짜 소프트웨어가 실질적으로 더 비싼 역설이 여기서 성립한다.
이 비용은 지역에 따라 비선형적으로 증가한다. 영미권 개발자에게 리눅스의 숨겨진 비용은 낮다. 비영어권 개발자에게 그 비용은 훨씬 높다. 오픈소스 이데올로기는 이 비용을 측정하지 않는다.
문제의 핵심은 영미권 실리콘 밸리의 메인 스트림 개발자는 인지하지 못하는 것들이 제 3의 외부 세계의 개발자는 항상 인지를 해야만 한다는 점이다.
용어 장벽은 생각보다 깊다
"Bootstrap", "Initialize", "Hydration", "Lazy loading". 이 용어들은 개념 자체가 영어 어감에 기반한다. 한국어로 번역하면 의미가 손실되거나 어색해진다. 부트스트래퍼, 이니셜라이저라는 말은 한국인에게 처음 들을 때 직관적으로 다가오지 않는다.
이건 단순 번역 문제가 아니다. 개념 자체가 특정 언어 문화권의 인지 구조 위에 설계됐다는 뜻이다. 소프트웨어 공학의 용어 체계는 그 자체로 진입 장벽이며, 영미권에서 멀어질수록 이 장벽은 높아진다.
그런 면에서 LLM은 이 용어의 장벽을 해체한다.
영미권 대학생 1학년은 이를 당연하게 받아들이지만, 제 3세계 개발자들은 이 용어가 낯설게만 느껴진다. 그리고 이것이 벽을 만든다
한국어로 코드를 짜면 이런 형태가 될것이다.
def 사용자_인증(사용자이름, 비밀번호):
if not 사용자이름 or not 비밀번호:
return 실패("입력값이 없습니다")
사용자 = 데이터베이스.찾기(사용자이름=사용자이름)
if not 사용자:
return 실패("사용자를 찾을 수 없습니다")
if not 비밀번호_확인(비밀번호, 사용자.해시된_비밀번호):
return 실패("비밀번호가 틀렸습니다")
토큰 = 접근토큰_생성(사용자.아이디)
return 성공(토큰)
class 장바구니:
def __init__(self):
self.담긴_상품들 = []
def 상품_추가(self, 상품, 수량=1):
기존_항목 = self._항목_찾기(상품.아이디)
if 기존_항목:
기존_항목.수량 += 수량
else:
self.담긴_상품들.append(장바구니_항목(상품, 수량))
def 총액_계산(self):
return sum(항목.상품.가격 * 항목.수량 for 항목 in self.담긴_상품들)
def _항목_찾기(self, 상품_아이디):
return next(
(항목 for 항목 in self.담긴_상품들 if 항목.상품.아이디 == 상품_아이디),
None
)읽히긴 한다. 논리 흐름도 따라간다. 그런데 이걸 GitHub에 올리는 순간 기여자가 0명이다. 코드 리뷰도 없고, 이슈도 없고, 스택 오버플로우 답변도 없다.
authenticate, shopping_cart, add_item은 전 세계 어느 개발자에게 물어봐도 통한다. 사용자_인증, 장바구니, 상품_추가는 한국어를 아는 사람에게만 통한다. 코드 자체의 품질과 무관하게, 언어가 협업 가능 범위를 결정한다.
LLM이 이 장벽을 해체하는 방식은 번역이 아니다. 한국어로 물어봐도 authenticate가 뭔지, bootstrap이 왜 그 이름인지, hydration이 왜 그 단어인지를 맥락과 함께 설명해준다. 영미권 1학년이 수업에서 당연하게 흡수하는 것을 비동기적으로 습득할 수 있게 된다.
실제 한국인이 영어로 된 첫 코드를 읽게 되었을때는 이보다 더 큰 충격이다.
한국어 어순에 맞게 프로그래밍 언어를 재작성하면 다음과 같다.
가져옴 자료묶음에서 자료틀
가져옴 typing에서 선택적
자료틀 상품:
아이디: 정수
이름: 글자열
가격: 실수
재고: 정수 = 0
자료틀 장바구니_항목:
상품: 상품
수량: 정수 = 1
묶음속성
소계_구하기(자신) -> 실수 정의:
자신.상품.가격 * 자신.수량 돌려줌
틀 장바구니_관리자:
초기화하기(자신) 정의:
자신._담긴_목록: 목록[장바구니_항목] = []
자신._할인율: 실수 = 0.0
담기(자신, 상품: 상품, 수량: 정수 = 1) -> 없음 정의:
이미_담긴_것 = 자신._기존_항목_탐색_하기(상품.아이디)
이미_담긴_것 있으면:
이미_담긴_것.수량 += 수량
돌아감
자신._담긴_목록.덧붙임(장바구니_항목(상품=상품, 수량=수량))
빼기(자신, 상품_아이디: 정수) -> 참거짓 정의:
찾은_항목 = 자신._기존_항목_탐색_하기(상품_아이디)
찾은_항목 없으면:
거짓 돌려줌
자신._담긴_목록.제거함(찾은_항목)
참 돌려줌
할인_적용하기(자신, 할인율: 실수) -> 없음 정의:
(0.0 <= 할인율 <= 1.0) 아님이면:
값오류("할인율은 0과 1 사이여야 합니다") 던짐
자신._할인율 = 할인율
최종금액_계산하기(자신) -> 실수 정의:
원래금액 = (항목.소계_구하기() 담긴_목록_각항목에_대해 항목).합산()
원래금액 * (1 - 자신._할인율) 돌려줌
_기존_항목_탐색_하기(자신, 상품_아이디: 정수) -> 선택적[장바구니_항목] 정의:
다음값(
(항목 담긴_목록_각항목에_대해 항목 항목.상품.아이디 == 상품_아이디 조건으로),
없음
) 돌려줌def add(self, item): 이 한 줄이 담기(자신, 상품, 수량) -> 없음 정의: 로 바뀌는 순간, 영미권 개발자는 "뭔가 함수 선언 같은데"까지는 가는데 어디서 이름이 끝나고 어디서 타입이 시작하는지 순간적으로 파악이 안 된다.
return value 가 값 돌려줌 으로 뒤집히는 것, if not x: 가 x 아님이면: 으로 조사가 붙는 것. 구조는 보이는데 읽는 방향이 계속 어긋난다. 이게 한국 개발자가 영어 키워드를 처음 배울 때 느끼는 감각의 역방향이다.
GitHub 종속은 오픈소스가 만든 아이러니
현재 채용 시장에서 "포트폴리오 = GitHub 계정"이라는 등식은 사실상 표준이다. 오픈소스 생태계에 참여하려면 GitHub에 존재해야 하고, GitHub는 Microsoft 소유다.
오픈소스 이념은 특정 기업으로부터의 독립을 주장하지만, 그 이념을 실현하는 인프라가 특정 기업에 종속되어 있다. 이것이 구조적 아이러니다.
AI 슬롭은 구조적 압력의 출력값이다
오픈소스 커뮤니티에 AI가 생성한 저품질 기여물(AI slop)이 쏟아지는 현상을 두고 개인의 윤리 문제로 보는 시각이 있다. 하지만 이 현상의 구조를 들여다보면 다르다.
기업이 채용 스펙트럼에 GitHub 기여와 오픈소스 활동을 포함시켰다. 진입 장벽이 높은 구조에서 커리어를 만들어야 하는 사람들이 AI를 진입 도구로 활용한다. 그 결과물이 슬롭으로 커뮤니티에 축적된다.
슬롭은 원인이 아니라 결과다. 오픈소스가 실질적으로 열린 공간이었다면 진입 비용이 낮은 사람들이 기여의 질을 높이는 방향으로 참여했을 것이다. 진입 장벽이 높기 때문에 진입 자체를 위한 수단으로 AI가 사용되고, 그 결과가 슬롭이다.
오픈소스가 '오픈'이 아닌 계층화된 진영이 되었기 때문에 슬롭이 생긴 것이지, 슬롭만이 오픈소스를 파괴하는 것이 아니다.
DDoS 공격에 비유하면 구조가 선명해진다. DDoS는 서버를 직접 파괴하지 않는다. 양으로 밀어붙이다 보면 기존에 숨어있던 취약점이 드러난다. 요청 폭주가 원인이지만 실제로 서버를 무너뜨리는 건 그 압력에 버티지 못하는 내부 구조다.
AI 슬롭도 같다. 슬롭의 양이 문제가 아니라, 그 양을 감당하지 못하는 오픈소스 커뮤니티의 구조적 취약점이 드러난 것이다. 진입 장벽이 낮아지자 기여의 질을 검증하는 메커니즘이 버티지 못했다. 슬롭은 공격자가 아니라 부하 테스트다. 그리고 오픈소스는 그 테스트에서 취약점을 노출했다. 즉 PR 시스템 자체가 가지는 문제점이라는 것이다. 이는 PR 시스템이 다르게 변형되어야한다는 반증이라고 나는 생각한다.
LLM 종속과 GitHub 종속, 무엇이 다른가
LLM에 대한 비판 중 하나는 기업 종속이다. 그렇다면 GitHub 종속과 무엇이 다른가.
진입 조건의 구조가 다르다.
GitHub 종속은 진입 조건이 누적적이다. 영어, 버전 관리 문화, 커뮤니티 예절, 용어 체계, 네트워크. 이 조건들은 순차적으로 충족해야 하며 하나가 빠지면 다음 단계가 막힌다.
LLM 종속은 진입 조건이 단층이다. 인터넷 연결과 구독료. 한국어로 물어봐도 되고, 모르는 개념을 직접 물어봐도 된다. 용어 장벽, 언어 장벽, 문화 장벽이 동시에 낮아진다.
그렇다면 LLM 종속이 GitHub 종속보다 무조건 우월한가. 그렇게 단순하지 않다.
한 가지를 분명히 해야 한다. 오픈소스 진영의 노고를 구조적 문제와 혼동하면 안 된다. 리눅스 커널을 유지하는 수천 명의 기여자들, 무보수로 라이브러리를 관리하는 메인테이너들, 밤새 버그 리포트를 읽는 사람들. 이들의 노동이 현재 소프트웨어 생태계의 기반이다. LLM이 학습한 코드의 상당 부분도 그 노동의 산물이다. 오픈소스의 구조적 계층화를 비판하는 것과, 그 안에서 일한 사람들의 기여를 폄하하는 것은 전혀 다른 이야기다.
구조의 문제는 선의를 가진 사람들도 만들어낼 수 있다. 오픈소스가 영미권 중심으로 계층화된 것은 누군가의 악의가 아니라 설계 범위의 한계였다. 자유 소프트웨어 운동은 소유권 문제를 해결하려 했고, 그 목표는 달성했다. 접근성의 불균등은 처음부터 의제가 아니었을 뿐이다.
LLM이 그 간극을 일부 메운다면, 그것은 오픈소스 진영이 쌓아온 것 위에서 가능한 일이다. 대립이 아니라 계층이다.
LLM은 역량을 외재화하는가
LLM에 대한 또 다른 비판은 역량의 외재화다. 스스로 코딩하지 않으면 역량이 내재화되지 않는다는 논리다.
소크라테스는 글쓰기가 사유를 외재화한다고 비판했다. 하지만 플라톤의 저술이 존재하는 건 누군가 그것을 기록했기 때문이다. 글쓰기는 기억 역량을 외재화했지만 동시에 논증 역량, 편집 역량, 비선형 독해 역량을 새로 내재화했다. 역량의 총량이 줄어든 게 아니라 역량의 형태가 바뀐 것이다.
유튜브 세대의 문해력 논쟁도 같은 구조다. 읽기 역량의 감소는 관찰이지만, 영상 편집 문법의 이해, 시각 정보 압축, 멀티트랙 서사 독해는 이전 세대에 없던 역량이다. 역량 이동이지 역량 손실이 아니다.
LLM 사용도 마찬가지다. 코드를 처음부터 짜는 역량의 일부가 외재화되지만, 동시에 시스템 설계 판단, 출력 검증, 요구사항 정밀화 역량이 내재화된다. 단순한 외재화 프레임은 이 절반을 누락한다.
여기서 GitHub 종속과 LLM 종속의 구조적 차이를 짚어야 한다. GitHub는 Microsoft 소유지만 그 기반인 Git은 탈중앙화된 프로토콜이다. Microsoft가 정책을 바꾸면 개발자는 로컬의 .git 폴더를 그대로 들고 GitLab이나 자체 서버로 이전할 수 있다. 지식 자본이 온전히 보존된다.
반면 LLM 종속은 블랙박스 인프라에 대한 인지적 하청에 가깝다. API 가격이 10배 오르거나 특정 국가의 접속이 차단되면, 외재화했던 추론 역량은 그대로 증발한다. 이 점에서 LLM의 자유는 로마 자유민보다 소작농의 자유에 가깝다. 구독료를 내는 동안만 풍요롭고, 수단인 모델 가중치를 소유하지 못한다.
하지만 이 논점은 한 가지를 전제로 성립한다. LLM이 항상 외부 서비스로만 존재한다는 전제다. 만약 LLM이 충분히 경량화되어 개인이 로컬에서 소유하고 파인튜닝할 수 있게 된다면, 그 모델은 일종의 자기 소유 역량이 된다. 할리데이비슨을 사건 혼다를 사건 오토바이의 본질인 주행 방향성은 대체로 동일하다. 튜닝과 라이딩 방식에 차이가 생기지만 어느 정도 공통화된 역량은 남는다. 모델이 바뀌어도 그 모델을 다루는 역량의 핵심은 이동 가능하다.
더 근본적인 질문은 인지 자원의 배분이다.
C++을 실제 현장에서 마주하면 C++98부터 모던 C++11까지 파편화된 코드가 섞여 있는 경우가 대부분이다. 국지적 성능 최적화를 위해 파고들면 전체 아키텍처 판단을 하기가 어려워진다. C++의 성능 자체를 부정하는 게 아니다. 국지적 최적화에 인지 자원을 집중하면 거시적 판단이 약화된다는 구조적 문제다.
사람의 인지 자원은 유한하다. 국지적 시각을 우선하면 거시적 시각이 약화되는 지점이 생긴다. LLM은 이 배분 구조를 바꾼다. 저수준 코드 작성의 비용이 낮아지면서 인지 자원이 아키텍처 판단, 시스템 설계, 다층적 명령을 하나의 목적으로 수렴시키는 쪽으로 이동한다. 이것이 단순한 역량의 외재화인가, 아니면 역량의 재배치인가.
솔직하게 말하면 LLM 시대에 알고리즘 실력과 코드 품질 판단 능력이 약화되는 건 사실이다. 하지만 그것으로 얻는 게 있다. 프로그래밍은 어느 레이어에 있느냐에 따라 양식이 달라진다. 저수준으로 갈수록 코드 작성과 최적화가 핵심이 되고, 고수준으로 갈수록 특정 라이브러리와 프레임워크를 조립하는 형태가 된다. LLM은 저수준의 비용을 낮추면서 고수준의 판단에 더 많은 자원을 투입할 수 있게 한다. 계층 이동의 비용이 낮아지는 것이다.
이것을 역량의 외재화라고 부를 수 있는가. 적어도 단순히 그렇게 볼 수는 없다.
결국 핵심은 자신이 어느 레이어에 존재하며 어느 레이어에 역량을 두느냐의 차이다.
프로그래밍을 글쓰기에 비유하면 구조가 선명해진다. 저수준 레이어에 있는 사람들은 사전에 쓰일 단어와 문장을 만드는 사람이다. 고수준 레이어에 있는 사람들은 그 사전에서 단어와 문장을 가져와 소설을 쓰는 사람이다. 어느 쪽이 더 중요한가의 문제가 아니다. 역할이 다르다.
물론 서비스가 안정화되고 최적화 단계에 진입하면 다시 저수준 레이어의 역량이 필요해진다. 하지만 대부분의 서비스는 그 단계에 도달하기 전에 사라진다. 그리고 설령 그 단계에 진입하더라도, 그때 다시 학습하면 된다는 사실을 왜 무시하는지 모르겠다. 역량은 고정된 자산이 아니라 필요에 따라 재배치할 수 있는 것이다.
코드를 리팩터링하듯이 역량도 리팩터링된다. 성숙한 프로그래밍이란 특정 방식의 고수가 아니라, 자신이 어느 시점에 어느 레이어에 있는지를 판단하고 그에 맞게 방식을 바꾸는 능력이다. LLM이 가져온 변화도 이 맥락에서 읽어야 한다. 저수준 비용이 낮아졌다는 것은 고수준 판단에 더 많은 자원을 투입할 수 있다는 뜻이고, 필요할 때 다시 저수준으로 내려가는 비용도 낮아졌다는 뜻이다. 레이어 간 이동의 유연성이 높아진 것이다.
인프라는 항상 유료였다
AWS 이전에는 서버 한 대를 세우는 비용이 개인에게 진입 불가 수준이었다. AWS는 그 진입 장벽을 시간당 과금으로 바꿨다. 이걸 기업 종속이라 비판할 수 있지만, 그 종속 이전에 존재하던 자본 장벽이 더 높았다는 사실은 바뀌지 않는다.
인프라는 항상 비용이 발생했고, 항상 지역별로 불균등했다. 특정 국가 지역을 벗어나면 인프라 비용이 급격히 치솟는다. LLM은 구독료가 존재하지만, 비영어권 개발자의 정보 접근 비용, 학습 비용, 트러블슈팅 비용을 합산하면 총비용이 오히려 낮아질 수 있다.
불균등한 암묵적 비용을 균등한 명시적 비용으로 치환하는 구조다.
자유의 형태가 바뀌고 있다
오픈소스 자유 소프트웨어 운동은 소프트웨어의 법적 자유를 쟁취하는 데는 성공했다. 하지만 그 자유를 행사하기 위한 사회적 조건의 평등화는 의제에 포함되지 않았다. 결과적으로 오픈소스는 소유권 없는 계층화를 만들었다. 코드는 아무도 소유하지 않지만, 그 코드를 실질적으로 활용할 수 있는 사람은 구조적으로 특정 계층이다.
LLM은 그 계층화를 부분적으로 해소한다. 진입 장벽을 낮추고, 언어 장벽을 줄이고, 숨겨진 비용을 명시적 비용으로 전환한다. 역량의 형태를 바꾸지만 역량 자체를 소멸시키지는 않는다.
트레이드오프는 존재한다. LLM의 자유는 구독을 유지하는 동안만 존재하며, 가격 결정권이 전적으로 외부에 있다. 독점이 강화될수록 이 구조는 취약해진다.
하지만 지금 이 시점에서, 울산의 프리랜서 개발자가 영어 문서를 뒤지지 않고 시스템 아키텍처를 논의할 수 있다면, 그것도 하나의 자유다. 법적 권리로서의 자유보다 실질적으로 행사 가능한 자유가 때로는 더 의미 있다.