Skip to content

jkominek/pircd

Repository files navigation

                                  _                _ 
                           _ __  (_) _ __  ___  __| |
                          | '_ \ | || '__|/ __|/ _` |
                          | |_) || || |  | (__| (_| |
                          | .__/ |_||_|   \___|\__,_|
    _   _                 |_|    _   _             _   
   | |_| |_  ___   _ __  ___ _ _| | (_)_ _ __   __| |__ _ ___ _ __  ___ _ _  
   |  _| ' \/ -_) | '_ \/ -_) '_| | | | '_/ _| / _` / _` / -_) '  \/ _ \ ' \ 
    \__|_||_\___| | .__/\___|_| |_| |_|_| \__| \__,_\__,_\___|_|_|_\___/_||_|
                  |_|                  http://github.com/jkominek/pircd
                                    by jay kominek ([email protected])
                                       julian squires ([email protected])
                                       et al

 Yes.
 It really is an IRC daemon.
 It's written in Perl.
 ...
 You can breathe again.
 There. Very good.

*** Pre-introduction

 I thought I'd pull this onto github, from sourceforge, where it had
lingered for more than a decade. I doubt I'll do anything with it
(though I updated the email addresses in it), but now at least if
anyone starts making modifications, the features of github will let
others find them more easily.

 Over the years a number of folks (certainly more than I ever expected
when I first started working on it) wrote me to thank me. I'm glad it
helped people. I hope it can continue to do so.

 I've shifted my stance on pull requests since I originally wrote this
pre-introduction. I'm not speedy, but I will gladly attempt to process them.

*** Introduction

 pircd is an IRC daemon written in Perl. I wrote it after realizing that Perl
is the right language for IRC. IRC is chock full of various strings and other
what not, all of which is easily parsed by Perl, where the C IRC daemons jump
through all kinds of hoops and have really nasty looking code (have you ever
looked at the Undernet IRC daemon? I gave up on trying to figure out how their
extensions to the protocol work by looking at the code.) Whereas pircd is, in
my opinion, very clean. Messages from the user are dispatched to the
appropriate code via a lookup table to subroutine references, no excessively
large if..elsif..else structure, no conversion of the strings into something
that they are not (numeric values, if I remember how ircu does it).

 pircd is now reasonably complete. It lacks STATS output with any relation
to reality, and interserver communication. As of this README update, it is 3868
lines long (counting comments and everything). I do not anticipate it getting
past twice that with the addition of the remaining features. (interserver
communication being the big one.)

 If you would like to know more about how pircd operates internally, please
consult the included file, 'INTERNALS'.

*** SSL

SSL support in IRC software is fairly widespread these days. pircd has gone
from ahead of the curve to probably slightly behind. There are some bugs,
the server-side cert handling isn't suitable for a Let's Encrypt-world,
and we can't verify client-side certs for any useful purpose. Help on this
would be appreciated.

*** Requirements

 * Perl 5.004 and later.
 * The following Perl modules:
    Fcntl, Getopt::Long, IO::Select, IO::Socket,
    POSIX, Sys::Syslog, Tie::RefHash, UNIVERSAL
    IO::Socket::SSL if you want to use SSL
     In the future, I may make use of Compress::Zlib, also
     I imagine its use will be optional.
 * A computer
 * A port that you can bind to, preferably 6667

- Jay Kominek <[email protected]>
  Hail Eris!