Path to Raku — What Do You Count When You Change a Name You Have Used for Nineteen Years?
In August 2019, Elizabeth Mattijsen opened an issue titled "'Perl' in the name 'Perl 6' is confusing and irritating." In October, Larry Wall approved the rename. And the published migration document, Path-to-Raku.md, turned a rename from a declaration into a checklist: file extensions, environment variables, IRC, hashtags, 301 redirects — and the name that turned out to be embedded in the language specification itself.
Last time: the conditions under which a name becomes debt. This time, the work of repaying it.
The material here is, fortunately, entirely public. The issue, the discussion, the migration document — all readable on GitHub. Having primary sources for “changing a name used for nineteen years” is quite rare.
The problem-solving Repository
The Perl 6 community kept a dedicated repository for discussing large questions
about the language and the community: perl6/problem-solving (now Raku/problem-solving).
It works in two stages.
- Raise a problem as an issue
- Once consensus forms, write the solution as a document under
solutions/and open a PR
Separating problem from solution is the point of the mechanism. Agree on what the problem is, then argue about how to solve it.
I think this is a governance pattern worth borrowing. Technical discussions often break down because people fight over solutions with no agreement on the problem. “I oppose your proposal” might mean “I don’t think there’s a problem at all” or “there is, but that’s the wrong fix” — and the two go unseparated.
Issue #81
In August 2019, Elizabeth Mattijsen (lizmat) opened an issue titled:
“Perl” in the name “Perl 6” is confusing and irritating
What was raised as the problem was not the name itself, but the word “Perl” within it.
That was a precise framing. As last time argued, the debt was not generated by the digit “6” alone but by the claim that “Perl” + “6” together carry: the next version of Perl 5.
The issue produced a large discussion, for and against. And eventually consensus formed around separating the names.
Among several candidates, Raku was chosen. As part 1 described, the name comes from the compiler, Rakudo (駱駝道 / 楽土). Taking part of a name already in use for over a decade gives more continuity than coining something entirely new.
Larry Wall’s Approval
In October 2019, Larry Wall approved the rename PR.
In doing so he cited the parable about not putting new wine into old wineskins.
I am in favor of this change, because it reflects an ancient wisdom…
New wine needs a new wineskin — a new language needs a new name.
What matters here is that the founder himself acknowledged that this is not a continuation of Perl 5. Two of the nineteen-year stalling reasons from last time — “a rename looks like defeat” and “the founder chose the name” — were dissolved simultaneously by that one approval.
Path-to-Raku.md — the Migration Plan
After consensus, concrete migration steps were written as
solutions/language/Path-to-Raku.md.
The value of that document is that it turned the rename from a declaration into an executable checklist.
It does not stop at “we have decided to change the name.” It enumerates where the name is embedded, and decides when each thing happens.
It Was Staged
| Stage | Contents |
|---|---|
| Immediately after agreement | Documentation wording, repository renames, IRC channels, 301 redirects for domains |
| Around 6.e | Change file extensions, adopt the new naming conventions |
| 6.f | Deprecation warnings for old extensions and environment variables |
| 6.g | Remove the deprecated items |
Not a single switchover — staged against the language’s own version boundaries.
This applies part 8’s “a release is a promise.”
Breaking changes go at the seams of the promise.
Warn in 6.f, remove in 6.g. A user whose code says use v6.e;
can predict when what will happen to them.
It is the judgement of a community that has personally spent fifteen years paying for breaking compatibility.
Where the Name Was Embedded
Re-sorting the document’s list by layer:
Inside the language specification
| Item | Old | New |
|---|---|---|
| Method | .perl |
.raku |
| Dynamic variable | $*PERL |
$*RAKU |
| Class | Perl |
Raku |
This is the most surprising part. .perl is the method that turns a value into
a string which, evaluated, reproduces it (Ruby’s inspect, Python’s repr).
The language’s name was embedded in the grammar as a method name. So the rename reached into the language specification.
The filesystem
| Kind | Old | New |
|---|---|---|
| Script | .p6 / .pl6 |
.raku |
| Module | .pm6 |
.rakumod |
| Documentation | .pod6 |
.rakudoc |
| Test | .t6 |
.rakutest |
The runtime environment
| Item | Old | New |
|---|---|---|
| Library path | PERL6LIB |
RAKULIB |
| Install location | PERL6_HOME |
RAKUDO_HOME |
| Executable | perl6 |
rakudo (raku / perl6 as symlinks) |
Network and community
| Item | Change |
|---|---|
| Domains | perl6.org → raku.org, docs.perl6.org → docs.raku.org (301 redirects) |
| GitHub org | perl6/ → Raku/ |
| IRC | #perl6* → #raku* |
| Hashtag | #perl6 → #rakulang |
| Modules | Authors encouraged to update repo names, READMEs, META6.json |
They Chose 301
A small but practically important decision: the old domains redirect with 301 Moved Permanently.
Choosing 301 (permanent) over 302 (temporary) is an attempt to carry nineteen years of inbound link equity across to the new domain.
Last time I wrote that search got fragmented. It could not be fully prevented — but the attempt to prevent it is visible right here. Documentation URLs redirect to equivalent new URLs, with pages explaining why things moved.
Nothing Breaks Overnight
Compatibility measures are spelled out too.
- The
perl6executable stays as a symlink $*PERL/ thePerlclass become aliases for$*RAKU/Rakufor the time being- Extension changes land with 6.e, warnings in 6.f, removal in 6.g
Not “everything changes today.”
What Renaming Actually Is
Now the generalisation — this series’ eleventh pattern.
A rename is not the work of changing a name. It is the work of counting every place the name is embedded.
The value of Path-to-Raku.md is precisely that enumeration. Counted up, the name was embedded in six layers.
- The language specification (the
.perlmethod,$*PERL, thePerlclass) - The runtime environment (environment variables, executable names, install paths)
- The filesystem (extensions)
- The network (domains, redirects)
- The community (IRC, hashtags, organisation names, conference names)
- The ecosystem (module names,
META6.json, READMEs, books, past articles)
And the sixth is not under your control. Other people’s repositories, other people’s blogs, printed books. The work of renaming does not end at the boundary of what you can change.
The Procedure Is Reusable
This is not specific to renames. As a procedure for any large breaking change, enumerate → classify by layer → stage it → set compatibility deadlines transfers directly.
Put the other way: staging without enumerating first fails. You start “with the easy parts,” and later discover the name was inside the language specification all along.
The Organisation’s Name Moved Too
The rename did not stop at the language.
| Item | Change |
|---|---|
| The Perl Foundation | Adopted the alias The Perl and Raku Foundation (TPRF) (formal registration reportedly in summer 2022) |
| Conference | The Perl Conference → The Perl and Raku Conference |
| Governance | A Raku Steering Council was established (first election in 2020; voting closed 20 September) |
Both the foundation and the conference chose conjunction over separation. “Separate languages, same family” is the official post-rename relationship.
And establishing the Raku Steering Council was a change on a par with the rename itself. Decision-making that had been attached to Larry Wall as BDFL moved to an elected council.
What is interesting is that the same thing happened on the Perl 5 side at the same time. A Perl Steering Council was formed, moving from the pumpking model — a single individual as release manager — to a collective one.
Between 2019 and 2021, both languages moved from a founder or an individual to a council.
Whether the rename caused this, or the same generational shift simply reached both, is not something to assert. But the same shape of change happened on both sides — that is fact.
Next (part 11): Promoting regular expressions to a language feature. From here on, Raku as a language. Grammars — the thing Raku has that other languages don’t.