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.

perlrakunamingmigrationgovernanceprogramming-languages

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.

  1. Raise a problem as an issue
  2. 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 perl6 executable stays as a symlink
  • $*PERL / the Perl class become aliases for $*RAKU / Raku for 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.

  1. The language specification (the .perl method, $*PERL, the Perl class)
  2. The runtime environment (environment variables, executable names, install paths)
  3. The filesystem (extensions)
  4. The network (domains, redirects)
  5. The community (IRC, hashtags, organisation names, conference names)
  6. 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.

← Back to The Lineage of Perl and Raku