aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 1f10931ded9d1a91aba3041a1444b48058a5b959 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# HaxIRCd, a public domain multi-protocol IRCd with redundant links

**This is a work in progress.**

* Git repo: <https://git.andrewyu.org/hax/haxircd.git>
* IRC channel: [#chat](ircs://irc.runxiyu.org/#chat) on [rx](https://irc.runxiyu.org)
* Documentation: <https://man.sr.ht/~runxiyu/haxircd>
* Task tracker: <https://todo.sr.ht/~runxiyu/haxircd>
* Mailing list: <https://lists.sr.ht/~runxiyu/haxircd>

## Goals

* Could link in a network among multiple traditional protocols from different
  traditional IRCDs.
* Could provide internal services (ChanServ, NickServ, HaxServ) and synchronize
  the services database, handling collisions gracefully.
* Correct, fast and scalable.
* Modular.
  More extensive runtime module reloading is planned.
* Replace [CoupServ](https://git.andrewyu.org/hax/coupserv.git/about) and
  perhaps [PyLink](https://github.com/PyLink/PyLink) in the distant future.

## Some implementation details(-ish)

* `dlopen(3)` is used to dynamically load `HaxIRCd.so`; this is for `RTLD_GLOBAL`,
  so we can use the contained symbols for the actual loadable modules.
* All strings that we handle (i.e. not required by external libraries) are
  length-specified, not null-terminated. Null bytes are treated as any other
  character in networking.
* Configuration is just another source file, `config.c`. The header file
  `config.h` defines the configuration options needed.

## Dependencies

* Reasonably modern UNIX-like system with support for POSIX threads.
  We haven't tested on non-Linux systems yet.
* If you want TLS support, GnuTLS, OpenSSL, or LibreSSL.
* [hax_string](https://git.andrewyu.org/hax/hax_string.git)
* [hax_table](https://git.andrewyu.org/hax/hax_table.git)

## Why

* [PyLink](https://github.com/PyLink/PyLink) is used by the
  [rx](https://irc.runxiyu.org) IRC network, but it's unmaintained and we still
  want to use something like it.
* [CoupServ](https://git.andrewyu.org/hax/coupserv.git/about) uses the 1202
  (InspIRCd v2) protocol, which is not supported by InspIRCd v4; more generally,
  we want to make protocols pluggable modules.