이름이 기술 부채가 될 때 — 「Perl 6」은 19년간, 검증되지 않은 주장을 실어 날랐다
「Perl 6」이라는 이름은, 붙인 2000년 시점에서는 옳았다. 당시 그것은 정말로 Perl 5의 후계로 구상되고 있었기 때문이다. 그러나 대상이 바뀌어도, 이름은 바뀌지 않는다. 이름은 붙인 순간의 주장을 동결하고, 그 주장이 거짓이 된 뒤에도 계속 실어 나른다. 삼자가 손해를 보는 구조와, 이름이 부채가 되는 조건의 이야기를 한다.
이번 회는, Perl을 모르는 사람도 읽을 수 있도록 쓴다. 다루는 것은 Perl 6의 이야기지만, 문제 자체는 언어에 고유하지 않기 때문이다.
이름은, 붙인 시점에서는 옳았다
우선 여기를 짚어 두고 싶다.
2000년 7월, Larry Wall이 「Perl 6」이라는 이름을 붙였을 때, 그 이름은 옳았다.
3화에서 쓴 대로, 발표 시점의 Perl 6은 정말로 Perl 5의 후계로 구상되고 있었다. 호환성을 전부 끊을 생각은 반드시 있었던 것이 아니고, 이행 도구로 다리를 놓는 안도 있었다. 「Perl의 다음 버전」이라는 이름은, 당시의 계획을 정확히 나타내고 있었다.
그리고, 대상 쪽이 바뀌었다.
- 설계가 진행될수록 호환성을 유지할 수 없게 되었다(4화)
- 15년이 걸렸다(8화)
- 그동안 Perl 5가 독자적으로 진화했다(2화)
이름은 바뀌지 않았다.
여기에, 이 연재의 열 번째 형이 있다.
이름은, 붙인 순간의 주장을 동결한다. 대상은 바뀌지만, 이름은 자동으로는 갱신되지 않는다.
이것이 「이름이 기술 부채가 된다」는 것의 정체다. 누군가가 틀린 이름을 붙인 것이 아니다. 옳았던 이름이, 옳지 않게 되었다.
그리고 부채와 마찬가지로, 방치하면 이자가 붙는다.
문제의 구조 — 삼자가 손해를 본다
「Perl 6」이라는 이름이 안고 있던 것은, 다음 둘이 양립하지 않는다는 것이었다.
- 사실: Perl 6은 Perl 5와 호환되지 않는 별개의 언어다
- 이름이 주장하는 것: Perl 6은 Perl 5의 다음 버전이다
여기서 세 가지 손실이 동시에 발생한다. 모두가 손해를 보는 것이, 이 구조의 특징이다.
1. Perl 5 쪽의 손실 — 「이미 끝난 언어」
버전 번호가 5에서 멈춰 있는 것처럼 보인다.
「6이 나왔는데 5를 쓰고 있나」「6으로 이행하지 못하는 레거시」라는 식으로 읽힌다.
실제로는 Perl 5는 매년 릴리스되고, 기능도 늘고 있었다(2화). 그러나 밖에서 보면, 15년간 버전이 오르지 않은 언어로 보였다.
이것은 실질적 피해다. 채택 판단, 구인, 학습 대상의 선택 — 어느 것이나 「그 언어는 살아 있는가」로 판단된다. 8화 마지막에 쓴 「가장 손해를 본 것은 Perl 5였을지도 모른다」는, 여기다.
2. Perl 6 쪽의 손실 — 「아직 완성되지 않은 Perl」
독립된 언어로 평가되지 않는다.
- 「Perl 6은 언제 나와?」라는 질문을 15년간 계속 받는다(2015년에 나온 뒤에도 받았다)
- grammar나 병행 모델 같은 독자성이, 평가의 대상이 되지 않는다. 「Perl의 새 버전」이라는 틀로 보이므로, 비교 대상이 Perl 5가 되어 버린다
- Perl을 싫어하는 사람이, 내용을 보지 않고 Perl 6도 제외한다
「Perl」이라는 말이, 양의 유산과 음의 유산을 둘 다 실어 온다. Perl 6은 양의 유산(역사, 커뮤니티, 문화)도 받고 있었으므로, 이것은 단순한 피해가 아니다. 그러나 배분은 고를 수 없었다.
3. 버전 번호의 봉쇄
Perl 5는 다음 메이저 버전으로 나아갈 수 없다. 「6」은 쓰이고 있기 때문이다.
이것이 가장 분명한 손실이다. 그리고 개명 직후에 Perl 7 구상이 나온 것이, 그것을 뒷받침한다.
2020년 6월, 당시의 릴리스 책임자 Sawyer X가 Perl 7을 발표했다.
내용은 「Perl 5.32의 문법에, 모던한 기본값을 처음부터 넣은 것」으로,
use strict 등을 기본 ON으로 한다는 제안이다.
즉 새 기능이 아니라 기본값의 변경. 그리고 그것을 가능하게 한 전제가, 개명으로 「6」이 비었다는 것이었다.
(덧붙이면 Perl 7은 2021년에 연기되어, 2026년 9월 시점에 릴리스되지 않았다. 현행은 Perl 5.44다. 여기는 틀리기 쉬우므로 정확히 적어 둔다.)
왜 19년이나 방치되었는가
문제는 2000년대부터 지적되고 있었다. 개명은 2019년이다. 왜 19년이 걸렸는가.
| 이유 | 내용 |
|---|---|
| 개명은 패배로 보인다 | 「Perl 6은 실패했으니 이름을 바꾼다」로 읽히는 것에 대한 경계 |
| 창시자가 붙인 이름이었다 | 이름은 Larry Wall이 준 것으로, 밖에서 바꿀 성질의 것이 아니라는 감각 |
| 19년 분량의 자산 | 문서 · URL · 저장소 · 모듈 이름이 전부 「perl6」을 포함한다 |
| 대안이 정해지지 않는다 | 이름 후보는 많이 나왔지만 합의에 이르지 못했다 |
| 완성 전에는 움직일 수 없다 | 미완성인 채로 개명하면, 도망친 것처럼 보인다 |
마지막 점이 결정적이었다. 2015년에 6.c가 나와 「완성된 언어」가 되었기에, 2019년의 개명을 「패배」가 아니라 「독립」으로 실행할 수 있었다.
8화를 그렇게 끝낸 것은, 그 때문이다.
미완성인 채로 이름을 바꾸면 「실패했으니 도망쳤다」고 읽힌다. 완성된 언어가 이름을 바꾸는 것은, 독립의 선언이 된다.
이름이 부채가 되는 조건
여기서 일반화한다. Perl 6의 사례가 가치를 갖는 것은, 부채의 액수를 잴 수 있기 때문이다. 19년간, 매번 설명이 필요했다, 는 형태로.
조건은 이렇게 쓸 수 있다.
이름이, 그 대상에 대해 검증되지 않은 주장을 담고 있을 때, 그 이름은 부채가 된다.
「Perl 6」이라는 이름은 「이것은 Perl 5의 다음 버전이다」라는 주장을 담고 있었다. 그 주장은 (도중부터) 사실이 아니게 되었지만, 이름이 매번 그것을 되풀이한다.
그래서 설명의 비용이 항상 발생한다. 한 번의 설명으로는 끝나지 않는다. 기사를 쓸 때마다, 콘퍼런스에서 이야기할 때마다, 새로운 사람이 올 때마다, 같은 설명을 한다.
같은 형태의 예
같은 구조는, 언어 밖에도 얼마든지 있다.
| 이름에 담은 것 | 언제 부채가 되는가 |
|---|---|
버전 번호(Foo 2) |
다음을 낼 수 없다. 혹은 「2 다음은 3일 터」라고 기대된다 |
구현 언어(RubyGems, node-*) |
구현을 바꿀 수 없다. 바꿔도 이름이 거짓말을 한다 |
소속 조직(AcmeDB) |
이관 · 분사 · 인수로 이름이 현실과 어긋난다 |
상대적인 위치(next-*, new-*, *2.0) |
언제까지나 next일 수는 없다 |
| 상정 용도(이미지용 이름의 도구가 동영상도 다룬다) | 용도가 넓어지면 이름이 좁아진다 |
공통된 것은, 이름이 「지금 그렇다」가 아니라 「앞으로도 그렇다」를 암묵적으로 약속하고 있다는 점이다.
그리고 8화에서 쓴 대로, 약속은 변경을 묶는다.
릴리스란 기능의 추가가 아니라, 바꾸지 않겠다는 약속의 시작이다.
이름도 같은 구조를 가지고 있다. 다만 이름의 경우, 그 약속은 명시적으로 선언된 것이 아니라, 읽는 쪽이 멋대로 읽어 내는 것이다. 그래서 약속한 기억이 없는데, 깬 것이 된다.
개명으로 해결되지 않은 것
공평을 위해 쓴다. 개명은 문제의 일부밖에 해결하지 않았다.
인지도는 오르지 않았다
오히려 「Perl 6」을 아는 사람이 「Raku」를 모르는, 하는 사태가 생겼다. 이름을 버릴 때, 그 이름에 붙어 있던 인지도 함께 버리게 된다.
검색이 분단되었다
2019년 이전의 자료는 전부 「Perl 6」 표기다. Raku로 검색해도, 그 이전의 양질의 기사에 닿을 수 없다.
이것은 의외로 무겁다. 19년 분량의 축적이, 새 이름에서는 보이지 않게 되었다. (다음 회에서 다루는 이행 계획서가 URL의 리다이렉트에 301을 고른 것은, 바로 이것을 최소화하기 위해서다.)
개명 그 자체가 뉴스가 되었다
「Perl 6이 Raku로 개명」이라는 헤드라인은, 「Perl 6은 실패했으니 개명했다」는 식으로도 읽혔다. 8화에서 「완성되었으니 개명할 수 있었다」고 썼지만, 그 맥락이 전해지지 않으면, 그저 패배 선언으로 보인다.
그래도 할 가치가 있었는가
답은 「달성된 것과, 달성되지 않은 것을 늘어놓고, 읽는 사람이 정한다」로 좋다. 이 연재의 집필 규칙 3조에, 그렇게 썼다.
다만 하나, 사실로서 말할 수 있는 것이 있다.
개명하지 않았다면, 손실은 멈추지 않았다. 19년 동안, 이 이름은 매일 이자를 낳고 있었다. Perl 5가 「끝난 언어」로 보이는 것도, Perl 6이 「미완성」으로 보이는 것도, 내버려 두어서 줄어드는 것이 아니었다.
개명은 「더 이상의 손실을 멈추기」 위한 조치다. 그때까지의 19년을 되찾는 것은 아니다. 그 점은 혼동하지 않는 편이 좋다.
다음 회는, 그 개명이 구체적으로 무엇을 하는 작업이었는지를 본다. 19년 쓴 이름을 바꿀 때, 사람은 무엇을 세는가.
다음 회(10화): Path to Raku.
공개된 이행 계획서를 읽는다. 파일 확장자, 환경 변수, .perl 메서드,
IRC 채널, 해시태그, 그리고 301 리다이렉트.
개명이란 「이름이 묻혀 있는 곳을 전부 세는 작업」이다.