Other articles in this series:

Freenode IRC operators perform mass seizure of channels for mentioning Liberachat

Timeline:

  • On 2021-05-22, the events described in my previous article, “Freenode IRC operators now engaging in routine abuses of power” transpired.

  • On 2021-05-23, Andrew Lee attempted to retroactively authorize the channel seizure described therein by commiting an update to the Freenode policy page. 10 minutes later, this updated policy was marked as a “draft”.

  • On 2021-05-25, AFAIK after some substantial protest, another Freenode staffer reverted this “draft” policy, leaving the policy page in its original form.

  • Late on 2021-05-25, Andrew Lee posted a news update. The commit doing so also incorporated a policy update, which is not marked as a draft. This policy update seems to be an attempt to legitimise the subsequent actions described below:

    If a primary channel closes access to its users or is in violation of
    freenode policies, then it will be closed and forwarded to a topical
    channel. If you’d like to take over one of these primary channels, then
    you’ll need to be associated in some way with the project in question.
  • On 2021-05-26 03:00 (04:00 BST), innumerate Freenode channels were automatically seized by Freenode. While I had parted many channels on Freenode which had moved to Liberachat, I personally logged this event at least in one channel, #anime, which is also an active channel not in any way “abandoned”:

    2021-05-26 04:00:43    -->    freenodecom (~com@freenode/staff) has joined #anime
    2021-05-26 04:00:43    --    Mode #anime [+o freenodecom] by freenodecom
    2021-05-26 04:00:43    --    freenodecom has changed topic for #anime from "Wear a mask | Stay tuned for Libera.Chat details | Guidelines: http://j.mp/aniguides | https://i.imgur.com/YbaXYAs.jpg | Anime of the Week: salamander ova (chosen by mixfix41) | Manga of the Week: My Father Became a Cute Vtuber Girl (chosen by TsundereNoises)" to "This channel has moved to ##anime. The topic is in violation of freenode policy: https://freenode.net/policies"
    2021-05-26 04:00:43    @freenodecom    This channel has been reopened with respect to the communities and new users. The topic is in violation of freenode policy: https://freenode.net/policies
    2021-05-26 04:00:43    --    Mode #anime [+o freenodecom] by OperServ
    2021-05-26 04:00:43    --    Mode #anime [+c-bbbb nam*!*user@*$##anime-jail *!*@unaffiliated/tellah$##anime-jail *!*@2806:264:4404:9537:*$##anime-jail *!*@94.9.89.190$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!*@*159.89.227.225$##anime-jail *!*@shout.jpaglier.com$##anime-jail *!memedad@*66.254.101.91$##anime-jail *!*@194.5.249.141] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!*@*178.128.66.3$##anime-jail $a:milkshake$##anime-jail *!6147a70f@*97.71.167.15$##anime-jail *!*@unaffiliated/crutchy] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!uid391402@gateway/web/irccloud.com/*$##anime-jail *!memedad@*66.254.101.121$##anime-jail *!*@*78.173.84.255$##anime-jail *!*@78.173.84.255$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!uid313806@gateway/web/irccloud.com/x-ecvvftwtbvnwyawn$##anime-jail $a:Radioheat *!*@gateway/web/freenode/ip.46.93.*$##anime-jail *!*@d49-192-12-106.bla1.nsw.optusnet.com.au$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!*@CPE-101-162-132-148.lnse6.woo.bigpond.net.au$##anime-jail *!*@2606:f180:*$##anime-jail *!*@unaffiliated/luke-jr/bot/ljrbot$##anime-jail *!*@unaffiliated/filystyn$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!*@sb-217-129-112-168.netvisao.pt$##anime-jail *!*@2a01:4c8:*$##anime-jail *!*@*188.244.248.8$##anime-jail *!*@*80.83.239.28$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!*@80.83.234.31$##anime-jail *!*@unaffiliated/itchyjunk/x-1640057$##anime-jail *!*@*177.189.228.222$##anime-jail *!*@*185.210.218.108$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!*@pool-98-113-72-174.nycmny.fios.verizon.net$##anime-jail *!uid348648@gateway/web/irccloud.com/*$##anime-jail *!*@31.173.*$##anime-jail *!limnoria@*] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!*@80.83.234.118$##anime-jail *!*@41.251.128.50$##anime-jail *!*@*105.154.210.18$##anime-jail $a:sscout$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!*@*160.176.71.239$##anime-jail fsociety*!*@*$##anime-jail *!*@*80.83.238.77$##anime-jail *!*Just*Rusl@*$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!*Nyashko*@*$##anime-jail *!*@105.158.89.143$##anime-jail *!*JustRusl*@*$##anime-jail *!*@160.179.108.92$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!*@115-64-112-219.tpgi.com.au *!*@*37.120.129.178$##anime-jail *!~F5F5DFFF@*$##anime-jail ruslan*!*@*$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *ruslan*!*@*$##anime-jail *!*@*66.241.100.69$##anime-jail *!*@*188.113.86.228$##anime-jail *!*@*188.244.248.32$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!*@unaffiliated/junka kunja!*@*$##anime-jail *!*@gateway/vpn/privateinternetaccess/junka *!*@*46.8.209.173$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-bbbb *!pomf@77.73.69.66$##anime-jail *!*@*188.244.248.77$##anime-jail *!*@188.244.248.15$##anime-jail *!*@*188.244.248.91$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-b *!*hostile@*$##anime-jail] by ChanServ
    2021-05-26 04:00:43    --    Mode #anime [-v beaky] by freenodecom
    2021-05-26 04:00:43    --    Mode #anime [-ov Suzuka Suzuka] by freenodecom
    2021-05-26 04:00:43    --    Mode #anime [-v ImoutoBot] by freenodecom
    2021-05-26 04:00:43    --    Mode #anime [-v Enju] by freenodecom
    2021-05-26 04:00:43    ImoutoBot    [title] The Policies - freenode
    2021-05-26 04:00:45    @freenodecom    The new channel is ##anime
    2021-05-26 04:00:51    --    Mode #anime [+spimf ##anime] by freenodecom
    2021-05-26 04:00:51    --    Mode #anime [+f ##anime] by freenodecom
    2021-05-26 04:00:51    <--    freenodecom (~com@freenode/staff) has left #anime
  • On 2021-05-26 03:31 (04:31 BST), control of the channel was returned to one of its legitimate operators:

    2021-05-26 04:31:28    --    Mode #anime [+o luke-jr] by ChanServ
  • On 2021-05-26 04:15 (05:15 BST), the following global notice was sent by Andrew Lee (rasengan):

    2021-05-26 05:15 -- rasengan (~rasengan@freenode/staff/rasengan): [Global Notice] In the recent policy enforcement,
      some channels were erroneously included. We greatly apologize for the inconvenience. Please contact us in
      #freenode-services or contact-us@freenode.net. Thanks for your patience and choosing freenode!

I did not personally witness the following takeovers, and the following are therefore logs provided to me by other parties, which nonetheless serve to demonstrate the widespread and indiscriminate nature of this seizure:

  • #osmocom:

    22:58 --> freenodecom (~com@freenode/staff) has joined #osmocom
    22:58 -- freenodecom has changed topic for #osmocom from "moved to #osmocom on libera.chat" to "This channel has moved to ##osmocom. The topic is in violation of freenode policy: https://freenode.net/policies"
    22:58 <@freenodecom> This channel has been reopened with respect to the communities and new users. The topic is in violation of freenode policy: https://freenode.net/policies
    22:58 -- Mode #osmocom [+o freenodecom] by OperServ
    22:58 -- Mode #osmocom [+impsf-bbb ##osmocom *!*@cmcust4uc-116.40.nulinkdigital.com *!*8a44b6b5@*.com/ip.138.68.182.181 *!*Alina-mal@unaffiliated/alina-malina] by ChanServ
    22:58 -- Mode #osmocom [-bb *!*wa@191.189.160.* *!*vavaegh@177.142.195.*] by ChanServ
    22:58 <@freenodecom> The new channel is ##osmocom
    22:59 <-- freenodecom (~com@freenode/staff) has left #osmocom
  • #glowing-bear:

    14:16 -- dcormier has changed topic for #glowing-bear from "IRC for the 21st century. https://www.glowing-bear.org for the stable version, now with TLS; https://latest.glowing-bear.org for the dev version. All questions welcome. Ask away!" to "MOVED to libera.chat => /server add libera irc.libera.chat/6697 -ssl"
    22:58 --> freenodecom (~com@freenode/staff) has joined #glowing-bear
    22:58 -- freenodecom has changed topic for #glowing-bear from "MOVED to libera.chat => /server add libera irc.libera.chat/6697 -ssl" to "This channel has moved to ##glowing-bear. The topic is in violation of freenode policy: https://freenode.net/policies"
    22:58 <@freenodecom> This channel has been reopened with respect to the communities and new users. The topic is in violation of freenode policy: https://freenode.net/policies
    22:58 <@freenodecom> The new channel is ##glowing-bear
    22:58 -- Mode #glowing-bear [+spimf ##glowing-bear] by freenodecom
    22:58 -- Mode #glowing-bear [+f ##glowing-bear] by freenodecom
    22:58 <-- freenodecom (~com@freenode/staff) has left #glowing-bear
    01:24 -- Mode #glowing-bear [+imnprstf ##glowing-bear]
    01:24 -- Channel created on Thu, 12 Dec 2013 12:07:27

Other channels which have been seized in the same fashion include some of my own channels, for example #acmetool, though I was no longer on the channel to witness the seizure:

07:09 <hl> info #acmetool
07:09 -- ChanServ: Information on #acmetool:
07:09 -- ChanServ: Founder    : freenode-placeholder-account
07:09 -- ChanServ: Registered : May 26 03:07:52 2021 (3h 2m 2s ago)
07:09 -- ChanServ: *** End of Info ***

Analysis

My analysis is as follows:

  • In response to the “threat” of channels moving to other networks, most of all Liberachat, in light of recent events, the new custodians of the Freenode infrastructure, seemingly, developed automated tooling to try and identify any channel trying to move to Liberachat — specifically, by looking for mentions of Liberachat in channel topics — and automatically seize them from their owners, in the process also covering up any evidence of any intention to move on the part of the channel owners.

  • Even setting aside the acceptability of a policy such as this, it should be fairly obvious that this is extremely prone to false positives. For example, the channel #anime above did not advertise a Liberachat channel in its topic; it simply said “Stay tuned for Libera.Chat details”. Presumably therefore, if a channel were to have put “No, we won't move to Liberachat, stop asking.” in its topic, it would also be automatically seized by this system.

    In other words, if you even mention Liberachat your channel might be immediately and automatically seized from you, courtesy of Freenode's new custodians.

  • Indeed, this seems to have been borne out by events and caused much collateral damage, hence the hurried apology broadcast to the entire network by rasengan and the attempt to reverse the collateral damage which occured.

  • Channels which actually did advertise a new channel on another network remain seized. This includes channels such as #osmocom and #acmetool and numerous other communities, including major channels such as #ubuntu, #wikipedia, numerous Gentoo channels, #btrfs, #zig, #zsh, #vim, #curl, #ranger, #guile, #asterisk and #openbsd, amongst many more.

    According to other sources (which I can't directly confirm) the number of channels seized is in excess of 700.

    In conjunction with the new policy page on Freenode's website commited coincidently with the news post mentioned above, it appears to now be the official policy of Freenode that if a channel moves away from Freenode, it is not allowed to tell its users of this fact, and may seize their channel if they attempt to do so.

  • Setting aside the massive collateral damage, and the toxicity of such a policy, are these actions congruent with the policy Freenode now publishes on its website? It does not appear to me so:

    If a primary channel closes access to its users or is in violation of
    freenode policies, then it will be closed and forwarded to a topical
    channel.

    Note that this does not say anything about topical channels (channels beginning with ##), which have also been seized, as in the case of ##hntop.

    Moreover, the new policy page does not establish “moving to another network” or leaving a reminder of such a move in a channel topic as in violation of freenode policy. The previous draft policy update, which was reverted after objection, seemingly attempted to do this:

    Unlawful activities and related support activities are considered
    off-topic, as are inappropriate advertising such as unused channels for the purpose of
    polluting the channel list results,

    —but as mentioned, this was reverted and is not incorporated in the now published policy page. (Even then, the idea that channels moving to other networks are seeking to “pollute the channel list results” is farcical.) So it does not seem to me that the crude attempts by Freenode's new custodians to retroactively permit the kind of action it is now taking are even successful.

    Moreover, it should be noted that this automated action has affected even channels which are marked +s (secret) and which therefore do not appear in channel listings. Therefore even if the objective were to prevent the “pollution” of channel listings, there is no legitimate reason to take action against +s channels.

Conclusions

It seems to me that the findings above at this point only hasten the urgency of evacuating Freenode. Even if a channel finds the Hotel California-style attitude that Freenode's new custodians are taking to the prospect of any channel leaving Freenode to be acceptable (and I cannot imagine why they would), since Freenode now sees fit to enforce this via automated systems based purely on heuristics, no channel is necessarily safe. Even channels which have been registered for years, which are in continuous use and which are wholly compliant Freenode policies can have their registrations seized and the channel forcibly shut if they offend an automated system's heuristic.

Privacy implications. Furthermore, it should be noted that this automated channel takeover system, in taking over some channel #x, configures a channel forward to ##x. However, it has been noted that since channels do not have +s (secret; hide from channel listings) by default, by creating ##x for every channel #x which is seized by this automated system, this reveals publicly in the channel listings the existence of channels which otherwise would have been secret and concealed from public channel listings. So the above is not only a disaster in its own terms, it also may have had the effect of revealing the existence of numerous unlisted channels and undermining their privacy. Not only that, because people attempting to join the original channel #x get automatically forwarded to the channel ##x, anyone can determine who attempts to join the original channel simply by joining ##x, allowing the members of a secret channel to be leaked.1


1. If this is concerning to you, you can mitigate this by setting user mode +Q, which makes you immune to channel forwarding. Note that you will need to make sure it is set every time you connect.

Other articles in this series: