Google Summer Of Code 2006 Proposal

Subject ID

httpd-mod-ircd

Title

a module to implement the IRC protocol

Developer

Jan Sembera

E-mail

jan.sembera@innoxia.cz

Jabber

fissie@fear.cz

ICQ

2865 0623

About the project

Features

The ultimate goal of the project is to implement fully featured Internet Relay Chat server using the infrastructure of Apache httpd and acting as one of it's module. Implemented range of features will be exactly as specified by RFC set describing IRC protocol (RFC 2810, 2811, 2812 and 2813). httpd-mod-ircd will support all kinds of connection specified by that RFC set - connections of ordinary users, operators, servers and IRC services. IRC server implemented in this project will be able to connect to other ircd as long as they are able to conform to RFC 2813 specifying the server protocol, which unfortunately are not many, because most networks implemented their own protocol subset for interconnecting servers. But I believe that IRCnet's ircd 2.10 should connect (as those RFCs were written based on it, not the other way around). Coding will be done in extensible way to ensure that protocol can be altered with relative ease to be able to connect to IRC servers of other networks around. IRC server should also have modular interface with hooks for adding commands and extending functionality of existing commands via other Apache modules.

Configuration of this module will be done thru standard Apache syntax. I don't particularly like complicated and somehow chaotic line syntax used in most IRCd servers today, but it can get efficient especially on large setups and in machine parsing using external tools like sed or grep, so this syntax will be supported as well on limited basis (inclusion of external files with line-based configuration). Support for IPv6 clients is a must-have, support of encrypted connections is not required by RFC and will not be supported, unless I will find enough time to implement this as well during the course of this project.

The project will be developed in C, as it is the language I can write in best, and it is also the language of Apache httpd. It will be written with respect to efficiency, reliability, security and with target of several hundered, maybe even thousands users on one server and many such servers on the entire network. I plan to take ideas from existing ircds, but as they are mostly based on ancient code and not written very clearly, everything will be written from scratch. Project will not depend on any external library, except for what httpd already requires or what is included in it. I also plan to write detailed documentation describing features within the mod-ircd, and I intend to do limited work on this project after the SoC, for example on bugfixing, or adding some features if required or needed. During the course of the development, projects will be viewable or downloadable using some version control system. As for license, I will sumbit to anything that Apache Foundation sees fit (which I suppose will be Apache License).

When this project is completed, Apache will have fully featured IRC server included with it, that will be easy to deploy (much more than most existing IRC servers) and that will demonstrate the abilities of Apache httpd infrastructure.

Development plan

1.

Research of httpd infrastructure - I unfortunately don't have much experience writing Apache modules, so I will first look around to get to know module infrastructure better.

2.

Development of parsers, algorithms and backend structures to hold data about configuration, users, channels, servers and services that will provide efficient search (trees or hash tables).

3.

Implementation of module core, configuration handling and several commands that will allow to test core functionality.

4.

Implementation of user commands (maybe except some administration stuff)

5.

Server to server connection functionality, rest of the administration stuff

6.

Extensive testing (standalone, using existing client software, maybe using other existing servers)

7.

Finish documentation

About me

Background

I'm 22 years old student of Computer Science on Faculty of mathematics and physics, Charles University in Prague, Czech Republic. I'm interested in networking, communications, server administration and programming. I work externally in small company that does network administration outsourcing and on-demand applications programming and I usually work in both these areas.

I have first touched programming language over 10 years ago, and I have learned C seriously about 7 years ago. I have very good understanding of C. Most of my experience comes from development of on-demand applications for my employer, which is software mostly dealing with UNIX, security, networking (IP family, both IPv4 and IPv6), SSL, embedded applications, et cetera. I have also some experience in C++, Bash, Perl, Python, Prolog, Haskell, Lisp and PHP. I have good understanding and experience of version control systems (CVS, SVN, Cogito/Git), I have experience in using GNU autotools, though I'm not a big fan of them.

Motivation and interests

I have been using Apache httpd on several webservers, either multihost or dedicated for one application, some very heavy-loaded with hundereds of users working simultaneously. I am very pleased by variety of features and modules provided by it and by range of modules provided externaly and I have never before had a need to look elsewhere. So I have extensive experience with Apache httpd and I'd like to see how it looks in the inside and what it can do. I also have experience with IRC, either from about 10 years of staying on IRCnet regularly, and from managing IRC servers on private network. I believe I understand well how the IRC server works, how it is used and how it is managed. I have also extensive experience with network programming, so I believe I could be good candidate for this project. Another reason why I would like to do some work on this project is that I have long been thinking about creating my own Open Source project to help the community that created most of the software I am using every day and Google Summer of Code is giving me this unique opportunity to develop open source projects that I personally like and that is usable and interesting for people out there.

Available time

In the beginning of the project (to the end of June), I will be somewhat limited by school - our semester ends by the end of May, followed by one month reserved for exams. During that time, I will spend some time learning and doing exams, so I cannot commit myself into this project fully during June. But I am sure I will be able to find time. After that, I will have 2 months holiday that I plan spending fully for the project. Maybe, I will go for one week vacation, but I assume I would work on this project even on this vacation, so it would not interfere with project development much.