|
| 1 | +# The Path to Raku |
| 2 | + |
| 3 | +This document describes the steps to be taken to effectuate a rename of |
| 4 | +`Perl 6` to `Raku`, as described in issue #81. It does not pretend to be |
| 5 | +complete in scope or in time. To change a name of a project that has been |
| 6 | +running for 19+ years will take time, a lot of effort and a lot of |
| 7 | +cooperation. It will affect people in foreseen and unforeseen ways. |
| 8 | + |
| 9 | +## Language changes |
| 10 | + |
| 11 | +### `.perl` |
| 12 | + |
| 13 | +The `.perl` method should be deprecated in 6.f, and removed in 6.g. It |
| 14 | +should be replaced by a `.raku` method, which will be specified in 6.e |
| 15 | +(Rakudo can provide for it as soon as implemented). This could be |
| 16 | +implemented by a global search/replace of `.perl` to `.raku` (both in |
| 17 | +method names and in calls) in `src/core`, `src/Perl6` and `lib`. A new |
| 18 | +`Mu.perl` method should be added that will later come to issue a |
| 19 | +DEPRECATED message, and then delegate to `.raku`. |
| 20 | + |
| 21 | +To retain compatibility with modules that declare a method `perl`, the |
| 22 | +default `raku` method should check if the type in question has a |
| 23 | +non-default `perl` method (that is, not the one from `Mu`) and, if so, |
| 24 | +call it. Once `.perl` is deprecated, it should issue the deprecation |
| 25 | +warning also. |
| 26 | + |
| 27 | +Renaming to `.code` currently clashes with `CallFrame.code`, visually clashes |
| 28 | +with the `.codes` method, and it being a generic name, probably also clashes |
| 29 | +with modules and other code that exists in the wild. |
| 30 | + |
| 31 | +### `$*PERL` and `Perl` |
| 32 | + |
| 33 | +`$*RAKU` and the `Raku` class will be the replacement of `$*PERL` and the |
| 34 | +`Perl` class, which initially will just be aliases. At a language boundary |
| 35 | +switch, they will become actual type declarations. |
| 36 | + |
| 37 | +### `PERL6LIB` |
| 38 | + |
| 39 | +A `RAKULIB` environment variable will be introduced into a Rakudo release, |
| 40 | +and specified as part of 6.e. If found in the environment, it will be used in |
| 41 | +favor of `PERL6LIB`. From 6.f, use of `PERL6LIB` will issue a deprecation |
| 42 | +warning. |
| 43 | + |
| 44 | +### `PERL6_HOME` |
| 45 | + |
| 46 | +This was only very recently introduced, and is likely not in wide use yet. |
| 47 | +We could consider immediately replacing it with `RAKU_HOME` in an upcoming |
| 48 | +Rakudo release, perhaps with a short-term fallback/warning - or error - if |
| 49 | +it's missing, but `PERL6_HOME` is found. |
| 50 | + |
| 51 | +### Pragmas |
| 52 | + |
| 53 | +The `use isms <Perl5>` should **NOT** be changed to `use isms <Perl>`. |
| 54 | +Similarly `use Foo:from<Perl5>` and the `:lang` parameter to `EVAL` should |
| 55 | +not be changed as to allow more flexibility should the Perl 5 community |
| 56 | +decide on a name change as well. |
| 57 | + |
| 58 | +### Versioning |
| 59 | + |
| 60 | +Because the next language release (6.e) may not coincide with |
| 61 | +the rename, no changes to versioning of the language need to be done. The |
| 62 | +next release *will* however be a Raku release, but should be otherwise |
| 63 | +completely compatible with previous releases. |
| 64 | + |
| 65 | +A new *language* version would be the opportunity to make the name change |
| 66 | +more widely known with associated marketing efforts. But this will *not* |
| 67 | +be with the next (monthlyish) release. |
| 68 | + |
| 69 | +Given we are no longer forced to have "6" in the version, there are now |
| 70 | +more options to do language versioning properly, and this aspect will |
| 71 | +need to be discussed separately at a later time. |
| 72 | + |
| 73 | +### NQP |
| 74 | + |
| 75 | +The acronym for NQP is Not Quite Perl. It stays that way, so no changes |
| 76 | +to documentation are needed. Generally, the MoarVM / NQP construct should |
| 77 | +not matter a lot for the average user. |
| 78 | + |
| 79 | +## Documentation changes |
| 80 | + |
| 81 | +Wherever `Perl 6` is mentioned in the documentation, this should be changed |
| 82 | +to `Raku`. A mention of `Perl 6` in the glossary should remain, and maybe |
| 83 | +in the documentation of the `.perl` (to be renamed to `.raku`) method. |
| 84 | + |
| 85 | +A mention to `Perl 6` should only occur when a redirect from `docs.perl6.org` |
| 86 | +has been detected / or a special URL to redirect to has been followed (e.g. |
| 87 | +https://documentation.raku-lang.org/?from=perl6). |
| 88 | + |
| 89 | +## Website changes |
| 90 | + |
| 91 | +Websites that have `perl6` in their name, should redirect to their |
| 92 | +equivalent with a 301 (Moved Permanently). Some way should be devised that |
| 93 | +if someone is redirected, that a small explanation of the name change is |
| 94 | +offered and that the visitor is indeed at the place they were planning to |
| 95 | +be. |
| 96 | + |
| 97 | +## IRC Channels |
| 98 | + |
| 99 | +The IRC channels used by Perl 6 users on freenode (#perl6\*) will need to |
| 100 | +be renamed or closed / opened with the new name (#raku\*). New joins should |
| 101 | +be forwarded to the new channels. |
| 102 | + |
| 103 | +Colabti.org will need to be asked to log these channels, so that we can have |
| 104 | +backlog again. Unfortunately, it appears to be too difficult to migrate #perl6 |
| 105 | +logs, so the same approach that was done when the #perl6-dev channel was |
| 106 | +created, will need to be followed. So searching the logs will need to be |
| 107 | +done on the old names. |
| 108 | + |
| 109 | +Further down the road, it would probably be a wise idea to make IRC channel |
| 110 | +logging one of the infrastructure tasks. |
| 111 | + |
| 112 | +## External references |
| 113 | + |
| 114 | +Many places on the Internet refer to `Perl 6`. These references will need |
| 115 | +to be changed to `Raku`, with a small explanation of the name change. This |
| 116 | +should be a coordinated effort to avoid duplicity of work, and to make sure |
| 117 | +that the explanation of the name change is consistent. |
| 118 | + |
| 119 | +Many sites, such as Reddit and StackOverflow, use implicit / explicit `perl6` |
| 120 | +tags. These will need to be changed or have a `raku` tag added, possibly |
| 121 | +with cooperation of the administrators. It should be prevented that "Perl 6" |
| 122 | +all of a sudden becomes hard to find on these sites. |
| 123 | + |
| 124 | +Sites such as PerlMonks appear to be really `Perl` (aka `Perl 5`) focused, |
| 125 | +and could possible make that clear in their description, or change their |
| 126 | +description to specifically include `Raku`. It would look like the |
| 127 | +`/r/perl` Reddit description can be changed to indicate that only `Perl 5` |
| 128 | +questions are on topic there. |
| 129 | + |
| 130 | +## Technical changes |
| 131 | + |
| 132 | +All technical changes should make sure that all existing scripts continue |
| 133 | +to work without change in the foreseeable future. Additional DEPRECATED |
| 134 | +messages will be introduced at point of a 6.e language change. |
| 135 | + |
| 136 | +### Executables |
| 137 | + |
| 138 | +As some packagers have already done, the executable should be called `rakudo`, |
| 139 | +since `rakudo` is the name of the implementation. `raku` and `perl6` should |
| 140 | +be symlinks. If at all technically possible, running a script using the |
| 141 | +`perl6` as the executor should provide a DEPRECATED warning at some point. |
| 142 | + |
| 143 | +### Extensions |
| 144 | + |
| 145 | +The extension `.raku` for scripts, `.rakumod` for modules, and `.rakudoc` |
| 146 | +for documentation (POD6) to become the defacto standards for files containing |
| 147 | +`Raku` code or documentation. The old `.pm`, `.pm6` and `.pod6` extensions |
| 148 | +will continue to be supported for 6.e. In 6.f, the `.pm`, `.pm6` and `.pod6` |
| 149 | +extensions could be marked as DEPRECATED, causing a message to be generated |
| 150 | +when possible. |
| 151 | + |
| 152 | +For testing, the extensions `.rakutest` and `.t` should be used, while the |
| 153 | +extension `.t6` will continue to be supported for 6.e, with deprecation |
| 154 | +messages appearing from 6.f onward. |
| 155 | + |
| 156 | +Tools and editors should support both `.rakutest` and `.t` extensions. `.t` |
| 157 | +extension is shared by other languages, so editors that can interpret |
| 158 | +shebangs or have other heuristics should use these means to |
| 159 | +disambiguate raku `.t` files from test files written in other |
| 160 | +languages. Editors and tools that are raku-oriented (like Comma, zef, |
| 161 | +etc.) should assume that `.t` files without a shebang are Raku test |
| 162 | +files. |
| 163 | + |
| 164 | +On Windows, installers should add a `.raku` association alongside the `.p6` |
| 165 | +association for the time being. Around the time of 6.f, a `.p6` association |
| 166 | +could be deselected by default, and perhaps dropped entirely by 6.g. |
| 167 | + |
| 168 | +Here are some examples of filenames with new extensions: |
| 169 | +* `Set.rakumod` |
| 170 | +* `HyperSeq.rakumod` |
| 171 | +* `ThreadPoolScheduler.rakumod` |
| 172 | +* `ForClass.rakumod` |
| 173 | +* `ForClass.rakudoc` |
| 174 | +* `01-basic.rakutest` |
| 175 | + |
| 176 | +Shorter extensions were considered but no good candidates were |
| 177 | +found. For example, `.rk*` cannot be used because of their unfortunate |
| 178 | +similarity to Racket language file extensions (which uses `.rkt`) and |
| 179 | +other direct conflicts with various formats. |
| 180 | + |
| 181 | +There won't be any additional changes to extensions in the near |
| 182 | +future. That is, no alternatives (like shorter variants) will be |
| 183 | +supported, and the extensions mentioned in this document are final. |
| 184 | + |
| 185 | +### Testing |
| 186 | + |
| 187 | +Roast continues to be the specification of the language. Only the name |
| 188 | +of the language it specifies, changes. Internal references to `Perl 6` |
| 189 | +will need to be changed. |
| 190 | + |
| 191 | +## Mascot |
| 192 | + |
| 193 | +Camelia will remain the mascot. The only thing that should change there |
| 194 | +is that it is the mascot of `Raku` rather than `Perl 6`. The fact that the |
| 195 | +wings contain a "P" and a "6" is obscure enough to not be an issue, and could |
| 196 | +be seen as a lasting tribute (easter egg) to the origin of "Raku". |
| 197 | + |
| 198 | +## Marketing changes |
| 199 | + |
| 200 | +Renaming `Perl 6` to `Raku` is an event that should be used to get maximum |
| 201 | +marketing result. This will need `Raku` marketing materials. Announcement |
| 202 | +should be coordinated, e.g. by a blog post on `opensource.com` or similar |
| 203 | +outlets, followed up by links on the various social media outlets, such as |
| 204 | +Twitter, Facebook, Hacker News, Reddit, etc. |
| 205 | + |
| 206 | +Specific attention should be given for the announcement of Raku in non-latin |
| 207 | +script countries (such as India, Japan, China, Taiwan) by making sure any |
| 208 | +announcements are also translated into appropriate languages for these regions. |
| 209 | +Raku, with its more than excellent Unicode support, should be able to make a |
| 210 | +big splash for developers in those regions. |
| 211 | + |
| 212 | +## Social Media |
| 213 | + |
| 214 | +Users who want to blog about `Raku` are suggested to always at least mention |
| 215 | +`Raku Programming Language` in their blog post or in the boilerplate of their |
| 216 | +blogging engine (exactly that string, for better TIOBE rating). Mentioning of |
| 217 | +`Perl 6` in such blog posts should only be done if the blog post is actually |
| 218 | +about the renaming process or historical matters. |
| 219 | + |
| 220 | +When using social media that use hash-tags, users are suggested to use the |
| 221 | +`#rakulang` hash-tag, and **not** use the `#perl6` hash-tag, unless the |
| 222 | +post is actually about the renaming process or historical matters. |
| 223 | + |
| 224 | +Of course, the same applies to more official social media usage by the core |
| 225 | +development team. |
| 226 | + |
| 227 | +## Ecosystem changes |
| 228 | + |
| 229 | +From the standpoint of users, there should not be any change: `zef` should |
| 230 | +continue to do what it does. The information about what is in the ecosystem, |
| 231 | +is not related to the "perl 6" name at the moment, so does not need any |
| 232 | +change either. |
| 233 | + |
| 234 | +On PAUSE, Perl 6 distributions are automatically uploaded to a "Perl6" |
| 235 | +subdirectory, but this is completely transparent to both the author as well |
| 236 | +as anything else that needs to look at that as long as a file `META6.json` |
| 237 | +exists in the distribution. So for the foreseeable future, no changes will |
| 238 | +be needed there. |
| 239 | + |
| 240 | +Should PAUSE decide to no longer support `Raku` modules in its system, then |
| 241 | +alternatives will need to be found and/or implemented. |
| 242 | + |
| 243 | +## Effects on modules in ecosystem |
| 244 | + |
| 245 | +A guide for existing module developers will be provided, which will offer |
| 246 | +suggestions of what to do about the rename. If we can generate PRs that's |
| 247 | +perhaps also helpful, though we might want that to be opt-in: authors with |
| 248 | +a load of modules might be unpleasantly surprised to wake up one morning |
| 249 | +to an inbox full of PRs. |
| 250 | + |
| 251 | +Such a guide should help authors with modules that either mention "perl6" |
| 252 | +or "p6" in their repo name, or mention "Perl 6" in their documentation. |
| 253 | + |
| 254 | +A proposed draft of such a guide is included at the end of this document. |
| 255 | + |
| 256 | +## Effects on running sub-projects |
| 257 | + |
| 258 | +Projects, such as Comma and Cro do not need any notifications, but other |
| 259 | +sub-projects may need to get advance notice. An inventory of these |
| 260 | +sub-projects will need to be made, and their maintainers be notified |
| 261 | +individually, rather than through social media. This is both to stress |
| 262 | +the urgency for a change, and to be able to present a "clean slate" to the |
| 263 | +general public when announcements about the name change *are* made through |
| 264 | +social media. |
| 265 | + |
| 266 | +## Effects on books |
| 267 | + |
| 268 | +Currently printed copies of books will probably need a sticker like "Covers |
| 269 | +the new exciting Raku programming language". |
| 270 | + |
| 271 | +Perl 6 books that have been open sourced, can be adapted by the community or |
| 272 | +the original author: a "Migration Guide for Book Authors" should help authors |
| 273 | +with this. Since ebook sales currently outperform printed books by an order |
| 274 | +of magnitude, preparing another version of an ebook should be a relatively |
| 275 | +small effort, which can actually be distributed among many individuals using |
| 276 | +modern source control techniques. |
| 277 | + |
| 278 | +## Effects on the Perl community |
| 279 | + |
| 280 | +There is a (small) part of the Perl community that welcome the rename, as they |
| 281 | +don't want anything to do with the language and are glad to disassociate it |
| 282 | +from the Perl name. There are community members with an active interest in |
| 283 | +both Perl 5 and Raku, and some of those who only do one or the other still |
| 284 | +feel there is much to be learned from, and shared with, each other, especially |
| 285 | +given the many shared design values of the languages. |
| 286 | + |
| 287 | +The name change of `Perl 6` to `Raku` is also intended to have a healing |
| 288 | +effect on a community that has been effectively split for many years. |
| 289 | +It is the hope of the Raku core development team that future events will |
| 290 | +continue to cater for both `Perl` as well as `Raku` presentations. |
| 291 | + |
| 292 | +## Effects on user groups |
| 293 | + |
| 294 | +Each Perl user group (Perl Monger group) will have to decide for themselves |
| 295 | +what they want to do with this new situation. More active groups in the |
| 296 | +past years, have started using the services of online meeting organizers |
| 297 | +such as MeetUp. To indicate the changed situation, it may be a good idea |
| 298 | +to change the names of such groups, e.g. from "Foo Perl Mongers Meeting" to |
| 299 | +"Foo Perl Family Meetup" or "Foo Perl Community Meetup". Should a user |
| 300 | +group decide to only focus on `Perl 5` or `Raku` only, then they are of |
| 301 | +course open to not change their name, or to change it to something like |
| 302 | +"Foo Raku Meetup". This could coincide with the official announcement, |
| 303 | +and maybe special events to celebrate the name change. |
| 304 | + |
| 305 | +## Effects on events |
| 306 | + |
| 307 | +Event organizers are, as always, completely free in the naming of their events. |
| 308 | +If an event would like to cater for both `Perl` and `Raku` attendees, then |
| 309 | +this should be reflected in the name of the event. An event with just `Raku` |
| 310 | +in its name, would appear to cater only for attendees interested in `Raku`. |
| 311 | +An event with just `Perl` in its name, would appear to cater for attendees |
| 312 | +interested in `Perl 5` only. Suggestions for naming events are (where "Foo" |
| 313 | +is a place / country name): |
| 314 | + |
| 315 | + The Foo Perl Community Workshop |
| 316 | + The Foo Perl Family Workshop |
| 317 | + The Foo Perl and Friends Workshop |
| 318 | + The Foo Perl and Raku Conference |
| 319 | + The Foo Raku and Friends Workshop |
| 320 | + |
| 321 | +etc. etc. |
| 322 | + |
| 323 | +## Relationship with The Perl Foundation |
| 324 | + |
| 325 | +No changes should be necessary with regards to the relationship with The |
| 326 | +Perl Foundation. But this is mostly up to The Perl Foundation. A suggestion |
| 327 | +would be to make the website of The Perl Foundation more general: a Perl |
| 328 | +Family. With equal attention for Perl, Raku, RPerl and CPerl, and emphasis |
| 329 | +on continued development on all projects. |
| 330 | + |
| 331 | +Should The Perl Foundation decide to not want to have anything to do with |
| 332 | +`Raku`, only then should an alternate organisational support be discussed. |
| 333 | + |
| 334 | +However, since "Yet Another Society" is doing business as "The Perl |
| 335 | +Foundation", maybe it is an idea to create another "doing business as" |
| 336 | +called "The Raku Foundation". Which would make it clear that "The Perl |
| 337 | +Foundation" is for Perl 5 only, whereas "The Raku Foundation" would be for |
| 338 | +Raku only. While both are part of the Perl Mindset in the "Yet Another |
| 339 | +Society". |
| 340 | + |
| 341 | +## Draft guide for module developers |
| 342 | + |
| 343 | +The Raku team are grateful to all those who have developed modules for the |
| 344 | +language. We recognize that most contributors are doing so on a volunteer |
| 345 | +basis, and that this work is often done in one's (lack of) free time. |
| 346 | + |
| 347 | +This guide provides some suggestions on how module authors can handle the |
| 348 | +Perl 6 to Raku renaming. While there is a suggested timeline here, it is |
| 349 | +to be interpreted as "at your convenience", rather than an expectation to |
| 350 | +do these things quickly. |
| 351 | + |
| 352 | +### In the period immediately after the rename is agreed... |
| 353 | + |
| 354 | +You might consider: |
| 355 | + |
| 356 | +* Mentioning Raku in your module's README or other documentation. It's up to |
| 357 | + you if you wish to have something like "Raku (formerly Perl 6)", to stay |
| 358 | + findable for such searches for some time, or to simply adopt the Raku name |
| 359 | + right away. |
| 360 | +* Renaming the GitHub repository if it contains `p6` or `perl6` (remember to |
| 361 | + update the `sources` entry in `META6.json` if doing this). |
| 362 | + |
| 363 | +In this interest of your module continuing to work with existing Rakudo |
| 364 | +installations, please *do not*, at this point: |
| 365 | + |
| 366 | +* Change module file extensions away from `.pm6` |
| 367 | +* Rely on `.raku`, `Raku`, `$*RAKU`, and similar |
| 368 | + |
| 369 | +### Around the release of 6.e... |
| 370 | + |
| 371 | +This is expected to happen in 2020. At this point, you might consider: |
| 372 | + |
| 373 | +* Changing module file extensions (remembering to update `META6.json`) |
| 374 | +* Switching to use `.raku`, `Raku`, `$*RAKU`, and similar in the module's |
| 375 | + code (most modules will not be doing this anyway) |
| 376 | +* Dropping remaining mentions of Perl 6 in the documentation, unless it is |
| 377 | + there for historical interest |
0 commit comments