<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>irc &#8211; Virtually Fun</title>
	<atom:link href="https://virtuallyfun.com/category/irc/feed/" rel="self" type="application/rss+xml" />
	<link>https://virtuallyfun.com</link>
	<description>Fun with Virtualization</description>
	<lastBuildDate>Mon, 16 Feb 2026 20:32:16 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>irc drama v2021</title>
		<link>https://virtuallyfun.com/2021/05/23/irc-drama-v2021/</link>
					<comments>https://virtuallyfun.com/2021/05/23/irc-drama-v2021/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sun, 23 May 2021 04:54:07 +0000</pubDate>
				<category><![CDATA[irc]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/wordpress/?p=11079</guid>

					<description><![CDATA[I&#8217;m sure there will be a redux. But basically things happened and old things make way for new things where old wars will inevitably come back and cause further fractions to whatever a tiny user base it is. So with &#8230; <a href="https://virtuallyfun.com/2021/05/23/irc-drama-v2021/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I&#8217;m sure there will be a redux.  But basically things happened and old things make way for new things where old wars will inevitably come back and cause further fractions to whatever a tiny user base it is.</p>



<p class="wp-block-paragraph">So with the collapse of freenode, we&#8217;ve moved off to the new libera.chat</p>



<p class="wp-block-paragraph">For all the IRC refugees point your client to irc.libera.chat, use TLS, or the <a rel="noreferrer noopener" href="https://gist.github.com/richardg867/bb19ca2b03545f71ae15" target="_blank">comic chat proxy</a> for us old peoples!</p>



<p class="wp-block-paragraph">Otherwise, same drama same people new server.</p>



<p class="wp-block-paragraph">Expect more later on in the year. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f610.png" alt="😐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2021/05/23/irc-drama-v2021/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Discord channel added by popular request</title>
		<link>https://virtuallyfun.com/2020/05/20/discord-channel-added-by-popular-request/</link>
					<comments>https://virtuallyfun.com/2020/05/20/discord-channel-added-by-popular-request/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Wed, 20 May 2020 02:30:36 +0000</pubDate>
				<category><![CDATA[irc]]></category>
		<category><![CDATA[random updates]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/wordpress/?p=10272</guid>

					<description><![CDATA[Since it&#8217;s hip with all the kids these days, and I&#8217;m always asked to create one.. https://discord.gg/HMwevcN (Link is updated to not kick after idle? whatever it is, I&#8217;m no discord power user) Feel free to drop on by and &#8230; <a href="https://virtuallyfun.com/2020/05/20/discord-channel-added-by-popular-request/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://discord.gg/HMwevcN"><img fetchpriority="high" decoding="async" width="1024" height="538" src="https://virtuallyfun.com/wp-content/uploads/2020/06/be51c36330395e516da99777086142f1-1024x538.png" alt="" class="wp-image-10327" srcset="https://virtuallyfun.com/wp-content/uploads/2020/06/be51c36330395e516da99777086142f1-1024x538.png 1024w, https://virtuallyfun.com/wp-content/uploads/2020/06/be51c36330395e516da99777086142f1-300x158.png 300w, https://virtuallyfun.com/wp-content/uploads/2020/06/be51c36330395e516da99777086142f1-768x403.png 768w, https://virtuallyfun.com/wp-content/uploads/2020/06/be51c36330395e516da99777086142f1-500x263.png 500w, https://virtuallyfun.com/wp-content/uploads/2020/06/be51c36330395e516da99777086142f1.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">Since it&#8217;s hip with all the kids these days, and I&#8217;m always asked to create one..</p>



<p class="wp-block-paragraph"><a href="https://discord.gg/HMwevcN">https://discord.gg/HMwevcN</a>   (<em>Link is updated to not kick after idle? whatever it is, I&#8217;m no discord power user</em>)<a href=""></a></p>



<p class="wp-block-paragraph">Feel free to drop on by and say hello..  </p>



<p class="wp-block-paragraph">*Update from the future.  I had to shutdown the irc/matrix due to people abusing them for ban evasion.  As much as people envision a free speech utopia on other people&#8217;s platforms, reality says it isn&#8217;t so. And I don&#8217;t have the time, effort or interest to go through what kiwi farms goes through to get around the fallout of being removed from banking, having to get their own ASN and peering with different isp&#8217;s all the time, along with dealing with the DDOS&#8217;s of the upset teenagers.  You can read about what happened to voat, and I just don&#8217;t have the time or patience for either of these experences.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2020/05/20/discord-channel-added-by-popular-request/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>IRC turns 30!</title>
		<link>https://virtuallyfun.com/2018/08/25/irc-turns-30/</link>
					<comments>https://virtuallyfun.com/2018/08/25/irc-turns-30/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sat, 25 Aug 2018 02:55:42 +0000</pubDate>
				<category><![CDATA[irc]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/wordpress/?p=8767</guid>

					<description><![CDATA[And what better way to celebrate by breaking out some ancient source and get it running! I thought I&#8217;d take a stab at irc 2.1 first.Â  You can find the source archived on darenet.org, among other places.Â  And no doubt &#8230; <a href="https://virtuallyfun.com/2018/08/25/irc-turns-30/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img decoding="async" width="1006" height="337" src="https://virtuallyfun.com/wp-content/uploads/2018/08/irc-on-apple-2c-cropped.png" alt="" class="wp-image-8768" srcset="https://virtuallyfun.com/wp-content/uploads/2018/08/irc-on-apple-2c-cropped.png 1006w, https://virtuallyfun.com/wp-content/uploads/2018/08/irc-on-apple-2c-cropped-300x100.png 300w, https://virtuallyfun.com/wp-content/uploads/2018/08/irc-on-apple-2c-cropped-768x257.png 768w" sizes="(max-width: 1006px) 100vw, 1006px" /><figcaption>irssi on the Apple //c (<a href="https://www.flickr.com/photos/blakespot/5190081455">Blake Patterson</a>) <em>cropped</em>. (<a href="https://creativecommons.org/licenses/by/2.0/">CC by 2.0</a>)</figcaption></figure>



<p class="wp-block-paragraph">And what better way to celebrate by breaking out some ancient source and get it running!</p>



<p class="wp-block-paragraph">I thought I&#8217;d take a stab at irc 2.1 first.Â  You can find the source archived on <a href="https://archives.darenet.org/archives.php?dir=irc/servers/irc2/">darenet.org</a>, among other places.Â  And no doubt what made IRC popular was that not only was the protocol open (like Gopher) and the software was free without restriction except for commercial use (like Gopher).</p>



<pre>
 **
 ** IRC - Internet Relay Chat
 **
 ** Author:          Jarkko Oikarinen
 **        Internet: jto@tolsun.oulu.fi
 **            UUCP: ...!mcvax!tut!oulu!jto
 **          BITNET: toljto at finou
 **
 ** Copyright 1988, 1989 by Jarkko Oikarinen and
 **                         University of Oulu, Computing Center
 **
 ** All rights reserved
 **
 ** Permission is hereby granted to use and distribute this program freely.
 ** Permission to use this program for commercial purposes and in
 ** commercial Bulletin Board or similar systems is not given.
 ** Permission to modify this program and distribute modified version is
 ** not given. This copyright notice may not be modified or removed.
 **
 ** IRC is provided 'as is', without warranty of any kind, either
 ** expressed or implied, including, but not limited to, the implied
 ** merchantability and fitness for a particular purpose. The entire
 ** risk as to the quality and performance of the program is with you.
 ** Should the IRC program prove defective, you assume the cost of all
 ** necessary servicing, repair or correction.
 </pre>



<p class="wp-block-paragraph">Using the Linux Subsystem for Windows and the Debian userland I was able to quickly get it to compile.</p>



<figure class="wp-block-image"><img decoding="async" width="979" height="512" src="https://virtuallyfun.com/wp-content/uploads/2018/08/IRC-2.1-on-Linux-subsystem-for-Windows.png" alt="" class="wp-image-8769" srcset="https://virtuallyfun.com/wp-content/uploads/2018/08/IRC-2.1-on-Linux-subsystem-for-Windows.png 979w, https://virtuallyfun.com/wp-content/uploads/2018/08/IRC-2.1-on-Linux-subsystem-for-Windows-300x157.png 300w, https://virtuallyfun.com/wp-content/uploads/2018/08/IRC-2.1-on-Linux-subsystem-for-Windows-768x402.png 768w" sizes="(max-width: 979px) 100vw, 979px" /><figcaption><em>IRC 2.1 connected to <a href="https://freenode.net/">freenode</a>.</em></figcaption></figure>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="979" height="68" src="https://virtuallyfun.com/wp-content/uploads/2018/08/IRC-2.1-no-channel-command.png" alt="" class="wp-image-8770" srcset="https://virtuallyfun.com/wp-content/uploads/2018/08/IRC-2.1-no-channel-command.png 979w, https://virtuallyfun.com/wp-content/uploads/2018/08/IRC-2.1-no-channel-command-300x21.png 300w, https://virtuallyfun.com/wp-content/uploads/2018/08/IRC-2.1-no-channel-command-768x53.png 768w" sizes="auto, (max-width: 979px) 100vw, 979px" /><figcaption><em>And it&#8217;s useless.</em></figcaption></figure>



<p class="wp-block-paragraph">However the protocol has drifted too much, and you can&#8217;t join anything as the CHANNEL command has long since depreciated.</p>



<p class="wp-block-paragraph">So not one to give up too easily I tried IRC 2.7h from 1991.Â  This version is under the <a href="https://www.gnu.org/licenses/gpl-1.0.html">GPL v1 license</a>, which removed the restrictions that were in place back in 1989.</p>



<p class="wp-block-paragraph">Again getting this to compile wasn&#8217;t too much of a challenge, which just shows how good the code is, as building for a 64bit machine works no problem.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="979" height="512" src="https://virtuallyfun.com/wp-content/uploads/2018/08/IRC-2.7-on-Linux-subsystem-for-Windows.png" alt="" class="wp-image-8771" srcset="https://virtuallyfun.com/wp-content/uploads/2018/08/IRC-2.7-on-Linux-subsystem-for-Windows.png 979w, https://virtuallyfun.com/wp-content/uploads/2018/08/IRC-2.7-on-Linux-subsystem-for-Windows-300x157.png 300w, https://virtuallyfun.com/wp-content/uploads/2018/08/IRC-2.7-on-Linux-subsystem-for-Windows-768x402.png 768w" sizes="auto, (max-width: 979px) 100vw, 979px" /><figcaption>Connecting with IRC 2.7h</figcaption></figure>



<p class="wp-block-paragraph">And unlike 2.1 this version is new enough you can connect to channels without modifying the client all that much.Â  The server built as well, although I haven&#8217;t tested it at all, as setting up IRCD is way out of my reach.Â  As much as I&#8217;d love to setup an isolated IRC system, I know it&#8217;ll end up being abused in strange ways so I haven&#8217;t bothered that much.</p>



<p class="wp-block-paragraph">Naturally you would be <strong>INSANE</strong> to use this stuff on anything serious as I&#8217;m sure these clients are full of bugs, and have numerous issues.Â  I&#8217;d <em><strong>HIGHLY</strong></em> recommend using <a href="https://www.stunnel.org/">stunnel</a> to at least encrypt your connection.</p>



<p class="wp-block-paragraph">If you have read this far, then I put the diffs up on <a href="https://sourceforge.net/projects/ancientirconlinux/">sourceforge</a> of all things.Â  You can find it here:Â <a href="https://sourceforge.net/projects/ancientirconlinux/">sourceforge.net/projects/ancientirconlinux/</a>.Â  I haven&#8217;t provided binaries as I mentioned this is no doubt highly insecure, and exploitable, and I&#8217;m going to at least raise the bar so you have to patch &amp; compile it yourself.Â  Although if you are capable of doing that much, you could have ported it yourself, after you look at my <a href="https://sourceforge.net/projects/ancientirconlinux/files/Diffs/">diffs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2018/08/25/irc-turns-30/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Teaching an old IRC dog some new tricks</title>
		<link>https://virtuallyfun.com/2018/01/18/teaching-an-old-irc-dog-some-new-tricks/</link>
					<comments>https://virtuallyfun.com/2018/01/18/teaching-an-old-irc-dog-some-new-tricks/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Thu, 18 Jan 2018 03:33:45 +0000</pubDate>
				<category><![CDATA[irc]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=8070</guid>

					<description><![CDATA[I don&#8217;t know why, but I&#8217;ve always liked the ancient Microsoft Comic Chat IRC client.Â  Even though it has well deserved a really poor reputation for not strictly adhering to any standard, and being very &#8216;noisy&#8217; and &#8230; poorly behaved.Â  &#8230; <a href="https://virtuallyfun.com/2018/01/18/teaching-an-old-irc-dog-some-new-tricks/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>I don&#8217;t know why, but I&#8217;ve always liked the ancient <a href="http://www.mermeliz.com/cchat.htm">Microsoft Comic Chat IRC client</a>.Â  Even though it has well deserved a really poor reputation for not strictly adhering to any standard, and being very &#8216;noisy&#8217; and &#8230; poorly behaved.Â  But I find it works pretty well.Â  Or at least it did.</p>
<p><div id="attachment_8071" style="width: 2016px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/01/comic-chat-crash.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8071" class="size-full wp-image-8071" src="https://virtuallyfun.com/wp-content/uploads/2018/01/comic-chat-crash.png" alt="" width="2006" height="1096" /></a><p id="caption-attachment-8071" class="wp-caption-text">crash</p></div></p>
<p>Somewhere in the mists of time a lot of IRC servers slightly changed how they work, and lots of ancient IRC clients were left broken.Â  <a href="https://virtuallyfun.com/2014/05/30/not-that-i-hang-out-on-irc-anymore/">I&#8217;d fixed IRC II on Xenix</a>, but without source, fixing Comic Chat was out of the question.</p>
<p>But naturally the real solution was a proxy.Â  And here is <a href="https://gist.github.com/richardg867/bb19ca2b03545f71ae15">richardg867&#8217;s proxy.py</a>.Â  And it offers three great features, namely it&#8217;ll fix the way Comic Chat joins a channel, and how users are displayed so everyone isn&#8217;t a channel op.Â  The best part is that it also includes the ability to connect to servers via SSL, meaning you can encrypt your connection to the IRC network</p>
<p>It&#8217;s a tiny Python server, and the Linux Subsystem for Windows can happily run it with zero modifications.</p>
<p>python proxy.py -p 6667 chat.freenode.net +6697</p>
<p>Running it like this will listen on port 6667 aka the default IRC port, and then connect to chat.freenode.net using SSL on port 6697.Â  And it works great!</p>
<p><div id="attachment_8072" style="width: 3599px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/01/comic-irc-connected-text-mode.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8072" class="size-full wp-image-8072" src="https://virtuallyfun.com/wp-content/uploads/2018/01/comic-irc-connected-text-mode.png" alt="" width="3589" height="1553" /></a><p id="caption-attachment-8072" class="wp-caption-text">Comic Chat Connected!</p></div></p>
<p>One thing to keep in mind is that initially the client is set to <strong>BOLD</strong> for some reason.Â  Just as you have to tell it to not spam channels with Comic Chat info, hitting control+b will end the bold and now you can message the NickServ, and unless someone hits up your info nobody will be the wiser.</p>
<p><div id="attachment_8073" style="width: 1008px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/01/dont-send-comic-chat-info.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8073" class="size-full wp-image-8073" src="https://virtuallyfun.com/wp-content/uploads/2018/01/dont-send-comic-chat-info.png" alt="" width="998" height="1124" /></a><p id="caption-attachment-8073" class="wp-caption-text">It&#8217;s vital to NOT send Comic Chat specific information</p></div></p>
<p>People get really annoyed at the whole OMG it&#8217;s a Microsoft IRC client from 1996-1998 but yeah established protocols only slightly drift, with a little bit of help you too can keep using ancient software in a dangerous and scary modern world!</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2018/01/18/teaching-an-old-irc-dog-some-new-tricks/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title>IRC necromancy</title>
		<link>https://virtuallyfun.com/2017/11/18/irc-necromancy/</link>
					<comments>https://virtuallyfun.com/2017/11/18/irc-necromancy/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sat, 18 Nov 2017 10:15:29 +0000</pubDate>
				<category><![CDATA[guest post]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[quake]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=7782</guid>

					<description><![CDATA[Iâ€™m xorhash, a guest poster, here to talk about my tale going down a trip on the memory lane with QuakeNetâ€™s service bot Q. If youâ€™re not interested in IRC, you can probably skip this one. On the Trails of &#8230; <a href="https://virtuallyfun.com/2017/11/18/irc-necromancy/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>Iâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />m xorhash, a guest poster, here to talk about my tale going down a trip on the memory lane with QuakeNetâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />s service bot Q. If youâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />re not interested in IRC, you can probably skip this one.</p>
<h1>On the Trails of Q</h1>
<p>As far as I know, QuakeNet&#8217;s service bot Q went through these three major codebases:</p>
<p>a. the old Perl Q,<br />
b. <a href="https://web.archive.org/web/20070715121942/http://development.quakenet.org/releases/q/3.99/Q_3.99.tar.gz">the first version written in C</a>, and<br />
c. Q as part of <a href="https://github.com/quakenet/newserv/tree/master/chanserv">newserv</a>.</p>
<p>There&#8217;s a reason I didn&#8217;t have anything to link for (a). That&#8217;s because to the best of my knowledge and research, no version has survived these past decades.</p>
<p>As for (b), it seems only the linked version 3.99 from <a href="https://web.archive.org/web/20040923002252/http://development.quakenet.org:80/">the year 2003</a> was saved.<br />
The CVS repository and thus commit history has been lost.</p>
<p>If anyone has either actual code for the old Perl Q or the CVS repo for the old<br />
Q written in C, please reach out to me via `xorhash ++at++ protonmail.com&#8217;.<br />
I&#8217;m most interested in looking through it.</p>
<p>However, not <em>all</em> hope was lost with the old Perl Q. As it turns out, most likely, the old Perl Q was actually based on an off-the-shelf product called &#8220;CServe&#8221;. What makes me think so?</p>
<p>Let&#8217;s take a look at [the QuakeNet Q command listing fromÂ <a href="https://web.archive.org/web/19980119095413fw_/http://www.quakenet.eu.org:80/q.html">1998</a>.</p>
<p>I picked the command &#8220;WHOIS&#8221; and googled its use &#8220;Will calculate a nick!user@host mask for you from the whois information of this nick.&#8221; This lead me to a <a href="http://ops.chatministries.org/starlink-irc/csuhelp.txt">help file for StarLink</a> IRC. At the top, it reads:</p>
<p style="padding-left: 30px;">CStar3.x User Command Help File **** 09/10/99<br />
Information extracted from CServe Channel Service<br />
Version 2.0 and up Copyright (c)1997 by Michael Dabrowski<br />
Help Text (c)1997 (c)1997 StarLink-IRC (with permission)</p>
<p>Wait a second, &#8220;CServe Channel Service&#8221;? I know that from somewhere.</p>
<p style="padding-left: 30px;">Q!TheQBot@CServe.quakenet.org</p>
<p>So the commands between that help file and the QuakeNet Q command listing match up and so does Q&#8217;s host today. Most likely, I&#8217;m on the right track with this. What&#8217;s left is to track down a copy of CServe.</p>
<p>Note: I&#8217;ve been on the old Perl Q for a while and this strategy didn&#8217;t <em>use</em>Â to work. It seems Google newly indexed these pages. For once I can sincerely say: Thank you, Google.</p>
<p>I found that CServe was hosted on these websites:</p>
<p>a. Version 3.0 on <a href="https://web.archive.org/web/19970605145528/www.cs.cuc.edu/~mdabrows/cserve/">http://www.cs.cuc.edu/~mdabrows/cserve/</a>,<br />
b. Version 3.1 on <a href="https://web.archive.org/web/19971026221158/http://www.wam.umd.edu/~devy/cserve/">http://www.wam.umd.edu/~devy/cserve/</a>,<br />
c. Version 4.0 on <a href="https://web.archive.org/web/19980626000632/www.othernet.org/devon/cserve/">http://www.othernet.org/devon/cserve/</a>, and<br />
d. Version 5.0 and above on <a href="http://www.ircore.com/">http://www.ircore.com/</a>.</p>
<p>The only surviving versions are 3.0 and 5.1. CServe got renamed to &#8220;CS&#8221; starting with 5.0 and was rewritten in C by someone other than the original CServe author, going by the comments in the file header of CS5.1 `src/show_access.c&#8217;. CS was actually sold as a commercial product. I wonder how many people bought it.</p>
<p>QuakeNet most likely took a version between 2.0 and 4.0, inclusive, as the basis for the old Perl Q. Which one in particular it was, we may never know. If you have any details, please reach out to me at the e-mail address above.</p>
<p>I can&#8217;t make any clever guesses anyway since the only versions that the web archive has are 3.0 and 5.1. The latter is written in C, so it quite obviously can&#8217;t be the old Perl Q.</p>
<h2>Making It Run</h2>
<p>So now that I have CServe 3.0, I wanted to actually see it running.</p>
<p>There are three ways to reasonably accomplish this:</p>
<p>a. port CServe to a modern IRCd&#8217;s server-to-server protocol,<br />
b. port an old IRCd to a modern platform,<br />
c. emulate an old platform and run both IRCd and CServe there.</p>
<p>I chose option (b).<br />
Once upon a time, I did option (a) for <a href="https://github.com/briancline/undernet-cservice">the old UnderNet X</a> bot. It was a very painful exercise to port a bot that predates the concept of UIDs (or numeric nicks/numnicks as ircu&#8217;s P10 server-to-server protocol calls them). There&#8217;s nothing <em>too</em>Â exciting about doing (c) by just emulating a 486 or so and FreeBSD, just sounds like a boring roundtrip of emulation and network bridging.</p>
<p>Fortunately, the author was a nice person and wrote on the CServe website that version 3.0 requires &#8220;ircu2.9.32 and above&#8221;.</p>
<p>It seems the ircu2.10 series followed right after ircu2.9.32. While I&#8217;m sure there&#8217;s <a href="https://github.com/briancline/undernet-cservice/blob/90d4722be0f8eebf02f30f49461123ddb9ac1837/Sources/main.c#L176">some linking backwards compatibility</a>, determining which ircu in the ircu2.10 series still spoke enough P09 to link with CServe sounded like an exercise in boring excruciating pain. Modern-day ircu most certainly no longer speaks P09. Besides, what&#8217;s the fun in just doing the manual equivalent of `git bisect&#8217;?</p>
<p>So after grabbing <a href="http://archives.darenet.org/irc/servers/ircu/ircu2.9.32.tgz">ircu2.9.32</a>, I tried to just straightforward compile and run it.</p>
<p>There&#8217;s a `Config&#8217; script that&#8217;s supposed to be kind of like autoconf `configure&#8217;, but I&#8217;ve found it extremely non-deterministic. It generates `include/setup.h&#8217;. I&#8217;ve made a <a href="http://vpsland.superglobalmegacorp.com/install/Linux-i386/ircu2.9.32-linux-hacks.diff">diff</a> for your convenience. It targets Debian stable, and should work with any reasonably modern Linux. There are special `#ifdef&#8217; branches forÂ  FreeBSD/NetBSD in the code. This patchset <em>may</em> break for BSDs in general.</p>
<p>Do <em>not</em> touch `Config&#8217;, meddle with `include/setup.h&#8217; manually. Remember this is an ancient IRCd, there are actual tunables in `include/config.h&#8217;.</p>
<p>The included example configuration file is correct for the most part, but the documentation on U:lines is wrong. U:lines do what modern-day U:lines do, i.e., designate services servers with uber privileges.</p>
<p style="padding-left: 30px;">U:cserve.mynetwork.example:*:*</p>
<h4>Excuse Me, But What The Fuck?</h4>
<p>Of course, I&#8217;m dealing with old code. It wouldn&#8217;t be old code if I didn&#8217;t have some things that just make me go &#8220;Excuse me, but what the fuck?&#8221;</p>
<h3>Looping at the speed of light</h3>
<pre>
aClient *find_match_server(mask)
char *mask;
{
  aClient *acptr;
  if (BadPtr(mask))
    return NULL;
  for (acptr = client, (void)collapse(mask); acptr; acptr = acptr->next) 
  {
  if (!IsServer(acptr) && !IsMe(acptr))
    continue;
    if (!match(mask, acptr->name))
      break;                                                                                                    continue;
  }
  return acptr;
}
</pre>
<p>See that `continue&#8217; way on the left? What is it doing there? Telling the compiler to loop faster?</p>
<h3>Carol of the Old Varargs</h3>
<p>So apparently some of this code predates C89. Which means it uses old-style declarations, but that&#8217;s okay. It also uses <a href="http://pubs.opengroup.org/onlinepubs/007908799/xsh/varargs.h.html">old-style varargs</a>, which is adorable.</p>
<p>The hacks around <em>not even that being there</em>Â are adorable, too:</p>
<pre>
#ifndefUSE_VARARGS
/*VARARGS*/
voidsendto_realops(pattern, p1, p2, p3, p4, p5, p6, p7)
char*pattern, *p1, *p2, *p3, *p4, *p5, *p6, *p7;
{
#else
voidsendto_realops(pattern, va_alist)
char*pattern;
va_dcl
{
  va_list vl;
#endif
  Reg1 aClient *cptr;
  Reg2 int i;
  char fmt[1024];
  Reg3 char *fmt_target;

#ifdef USE_VARARGS
  va_start(vl);
#endif

  (void)sprintf(fmt, ":%s NOTICE ", me.name);
  fmt_target = &fmt[strlen(fmt)];

  for (i = 0; i <= highest_fd; i++)
if ((cptr = local[i]) &#038;&#038; IsOper(cptr))
  {
  strcpy(fmt_target, cptr->name);
  strcat(fmt_target, " :*** Notice -- ");
  strcat(fmt_target, pattern);
  #ifdef USE_VARARGS
  vsendto_one(cptr, fmt, vl);
  #else
  sendto_one(cptr, fmt, p1, p2, p3, p4, p5, p6, p7);
  #endif
  }
#ifdef USE_VARARGS
va_end(vl);
#endif
return;
}
</pre>
<p>These functions were declared like this (the example chosen above actually has<br />
no declaration because why not):</p>
<pre>
/*VARARGS1*/
extern    void    sendto_ops();
</pre>
<h3>Whatcmp</h3>
<p>There are `mycmp&#8217; and `myncmp&#8217; for doing RFC1459 casemapping string comparisons. `strcasecmp&#8217; got `#define&#8217;d to `mycmp&#8217;, but in one case `mycmp&#8217; got `#define&#8217;dÂ back to `strcasecmp&#8217;. It seemed easier to just remove `mycmp&#8217;, replacing it with `strcasecmp&#8217; and forgo RFC1459 casemapping. This is doubly useful because CServe doesn&#8217;t actually honor RFC1459 casemapping.</p>
<h3>Waiting for the Cookie</h3>
<p>ircu uses PING cookies. I was rather confused when I didn&#8217;t get one immediately after sending `NICK&#8217; and `USER&#8217;. In fact, it took so long that I thought the IRCd got stuck in a deadloop somewhere. That would&#8217;ve been a disaster since the last thing I wanted to do is get up close and personal with the networking stack.</p>
<p>As it turns out, it <em>can&#8217;t</em>Â send the cookie:</p>
<pre>
/*
 * Nasty.  Cant allow any other reads from client fd while we're
 * waiting on the authfd to return a full valid string.  Use the
 * client's input buffer to buffer the authd reply.
 * Oh. this is needed because an authd reply may come back in more
 * than 1 read! -avalon
 */

</pre>
<p>Nasty indeed.</p>
<p>I lowered `CONNECTTIMEOUT&#8217; to 10 in the diff linked above. This makes the wait noticeably shorter when you aren&#8217;t running an identd.</p>
<h3>CServe Isn&#8217;t Much Better</h3>
<p>Not that CServe is much better. I have to hand it to Perl, I only needed to undo the triple-`undef&#8217; on line 450 of `cserve.pl&#8217; and it worked with <em>no</em>Â modifications. God bless the backwards compatibility of Perl 5.</p>
<p>That said, it has its own interesting ideas of code. This is the main command execution:</p>
<pre>
foreach $i (keys %commands)
{
    if($com eq $i)
    { $found = 1; break; }
}
if($found == 1)
{
    open(COMMAND, "<./include/$com");
    @evalstring = <COMMAND>; close(COMMAND);
    foreach $i (@evalstring) { $evals .= $i; }
    eval($evals);
}
else
{
    &notice("2No such command 1[4$com1]. /msg $unick SHOWCOMMANDS\n");
}
</pre>
<p>Yep, it opens, reads into an array, closes and then evals. For every command it recognizes. Of course, this means code hot swapping, but it also means terrible performance with any non-trivial amount of users.</p>
<p>Oh, and all passwords <em>are</em> hashed. But they&#8217;re hashed with `crypt()&#8217;. And a never-changing salt of ZZ.</p>
<h5>End Result</h5>
<p><div id="attachment_7783" style="width: 549px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2017/11/screenshot.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7783" class="size-full wp-image-7783" src="https://virtuallyfun.com/wp-content/uploads/2017/11/screenshot.png" alt="" width="539" height="432" /></a><p id="caption-attachment-7783" class="wp-caption-text">up &amp; running</p></div></p>
<p>Was it worth it?<br />
No, not really.<br />
Would I do it again?<br />
<strong><em>Absolutely</em></strong>.</p>
<p>You probably do not want to expose this to the outside world.<br />
The IRCd code is scary in all the wrong ways.</p>
<h6>Further Links</h6>
<p>Some other things if you&#8217;re into ancient IRC stuff:</p>
<ul>
<li><a href="http://archives.darenet.org/">http://archives.darenet.org/</a></li>
<li><a href="https://github.com/briancline/undernet-cservice">https://github.com/briancline/undernet-cservice</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2017/11/18/irc-necromancy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Not that I hang out on IRC anymore</title>
		<link>https://virtuallyfun.com/2014/05/30/not-that-i-hang-out-on-irc-anymore/</link>
					<comments>https://virtuallyfun.com/2014/05/30/not-that-i-hang-out-on-irc-anymore/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Fri, 30 May 2014 09:36:46 +0000</pubDate>
				<category><![CDATA[irc]]></category>
		<category><![CDATA[virtual networking]]></category>
		<category><![CDATA[Xenix]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=4211</guid>

					<description><![CDATA[But a &#8216;fixed&#8217; version for Xenix was requested. Apparently lots of IRC servers have slightly changed their syntax, which prevents ircII-4.4 from working. It&#8217;s a simple fix. In server.c, the the last line of the procedure login_to_serverÂ should be: send_to_server(&#8220;USER %s &#8230; <a href="https://virtuallyfun.com/2014/05/30/not-that-i-hang-out-on-irc-anymore/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>But a &#8216;fixed&#8217; version for Xenix was requested.</p>
<p>Apparently lots of IRC servers have slightly changed their syntax, which prevents ircII-4.4 from working.</p>
<p>It&#8217;s a simple fix.</p>
<p>In server.c, the the last line of the procedure <span style="color: #222222;">login_to_server</span>Â should be:</p>
<p style="padding-left: 30px;"><span style="color: #222222;">send_to_server(&#8220;USER %s 8 * : %s&#8221;, username,realname);</span></p>
<p>That&#8217;s it!</p>
<p><div id="attachment_4212" style="width: 966px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2014/05/ircii-on-xenix.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-4212" class="size-full wp-image-4212" src="https://virtuallyfun.com/wp-content/uploads/2014/05/ircii-on-xenix.png" alt="ircII-4.4 on Xenix 2.3.4" width="956" height="743" /></a><p id="caption-attachment-4212" class="wp-caption-text">ircII-4.4 on Xenix 2.3.4</p></div></p>
<p>For Xenix users, you can download the <a href="http://vpsland.superglobalmegacorp.com/install/xenix/ircII-4.4-fixed-xenix-binary.tar.Z">binary tar here</a>.</p>
<p>As for how you&#8217;ll get it working, well&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2014/05/30/not-that-i-hang-out-on-irc-anymore/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>SimpleIRC &#038; ROIDS for the MIPS!</title>
		<link>https://virtuallyfun.com/2009/08/07/simpleirc-roids-for-the-mips/</link>
					<comments>https://virtuallyfun.com/2009/08/07/simpleirc-roids-for-the-mips/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Fri, 07 Aug 2009 11:02:00 +0000</pubDate>
				<category><![CDATA[games]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[MIPS]]></category>
		<category><![CDATA[Windows NT 4.0]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=149</guid>

					<description><![CDATA[&#160; Well I&#8217;ve been looking for an IRC client for the MIPS and I&#8217;ve come up with nothing! And looking for source to much of anything win32 is LONG past something that will compile with Visual C++ 2.0 However I &#8230; <a href="https://virtuallyfun.com/2009/08/07/simpleirc-roids-for-the-mips/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">&nbsp;</p>



<p class="has-text-align-left wp-block-paragraph">Well I&#8217;ve been looking for an IRC client for the MIPS and I&#8217;ve come up with nothing! And looking for source to much of anything win32 is LONG past something that will compile with Visual C++ 2.0</p>



<p class="wp-block-paragraph">However I did find this simple library built by Andrew Cater: <a title="http://www.rohitab.com/discuss/index.php?showtopic=33056" href="http://www.rohitab.com/discuss/index.php?showtopic=33056">http://www.rohitab.com/discuss/index.php?showtopic=33056</a></p>



<p class="wp-block-paragraph">So with very little understanding of how IRC actually works I was able to build a SUPER simple client.&nbsp; Please note that it&#8217;s so simple the / commands that you&#8217;ve come to love are not implemented&#8230;!&nbsp; You get one shot for your name/nick/server &amp; channel.. But hey the exe is like 70kb for the MIPS/x64 and 35 for the i386.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2009/08/sirc-and-roids-MIPS-in-action.jpg"><img decoding="async" src="https://virtuallyfun.com/wp-content/uploads/2009/08/sirc-and-roids-MIPS-in-action-1024x791.jpg" alt="sirc and roids MIPS in action" class="wp-image-4215"/></a><figcaption class="wp-element-caption">sirc and roids MIPS in action</figcaption></figure>
</div>


<p class="wp-block-paragraph">You can find it&#8217;s source &amp; binaries right <a href="http://vpsland.superglobalmegacorp.com/install/WindowsNT4.0-MIPS/simpleirc/">here</a>.</p>



<p class="wp-block-paragraph">Also Antoni Sawicki has given me a BUNCH of leads on old public source, and binaries, namely ROIDS the first real graphical game we seem to have now for the MIPS.Â&nbsp; The source was a part of a <a href="http://vpsland.superglobalmegacorp.com/install/WindowsNT-ALPHA/PDTOOLS.ZIP">PDTools</a> thing that Dec had put together, however a lot of it will build for both i386 &amp; MIPS. I:ve extracted the source for roids <a href="http://vpsland.superglobalmegacorp.com/install/WindowsNT4.0-MIPS/ROIDS-source-from-pdtools.zip">here</a>.</p>



<p class="wp-block-paragraph">I don&#8217;t want to over promise but I&#8217;ll see if I can get quake to build some time in the next week.. I don&#8217;t know if I can get any graphics out of it, but it&#8217;d be fun for a server at least Windows NT 4.0 sp1 should have DirectX 2.0 The pinball game is quite playable (although the colors are all screwed up, due to a pallet glitch in the emulator) so we shall see.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2009/08/07/simpleirc-roids-for-the-mips/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
