FAQ/General
From the makers of InspIRCd.
Why should I choose InspIRCd over some other IRCd?
There are several reasons to choose InspIRCd over some other IRCd. These are:
- InspIRCd has high-performance socket engines such as epoll and kqueue, where other IRCds with the same feature set (modes, commands) as InspIRCd do not. We also have some socket engines that no other IRCd has currently, such as windows I/O Completion ports, which increases the performance of our windows builds beyond most other windows IRCds.
- InspIRCd is totally modular -- add and remove features as YOU please, not as the developers tell you to.
- InspIRCd offers its own implementation of many modules for free which developers of certain other irc servers want to charge you for.
- InspIRCd has a highly scalable non-blocking SQL API, supporting postgresql, sqlite and mysql, unseen in any other IRCd.
- InspIRCd's massive featureset is efficiently written in approximately 32000 lines of code. Compare this to 84000 lines of code for similar IRCds with similar featuresets.
- InspIRCd's modular design allows you to upgrade parts on the fly which you cannot in any other IRCd, such as SSL support (just think, you don't need to restart your net just because of an openssl upgrade any more!), any modes, and even the linking protocol itself!
- It's fun to use!
- InspIRCd has a keen group of coders who are actively maintaining the project! Where most others have settled into a slow release schedule of one or two releases a year, we release at least once every two weeks, to make sure you get the latest in features and fixes. For the reasoning behind this, see "Release Early, Release Often".
- The InspIRCd development team are likely to take on board your suggestions and patches, where most other IRCd teams will not.
How much memory does InspIRCd use?
A network with 3,000-4,000 locally connected clients (and 10,000 open channels) experiences a constant 1-4% CPU use with 70mb of RAM use. This won't go up drastically, but it will go up. Around 40,000 local clients means you'll be expecting some 500mb of RAM.
For our official network, ChatSpike, the stats are as follows;
For a network of 3 servers, plus ircservices and irc defender, with between 1200 and 700 users depending on time of day/week, at peak load:
PID USERNAME THR PRI NICE SIZE RES STATE TIME WCPU COMMAND 39090 chatspike 1 4 0 73640K 70892K kqread 23.7H 0.00% inspircd
[21:04] --- Current Local Users: 239 Max: 425 [21:04] --- Current Global Users: 729 Max: 1296
[21:04] --- Server up 232 days, 07:35:04 [21:04] --- u :End of /STATS report
How do i start InspIRCd?
Go to the directory where it is installed, and issue the following command:
./inspircd start
Why do you release new versions so often? I can't keep up!
We subscribe to the ideology of 'Release Early, Release Often' which simply put means that releases should be close together, to keep users and contributors active and interested. We do not do this necessarily because there are bugs (like a lot of other IRC software might) but because we are active, and want to keep our project active. If the new version does not have anything that you need (a new feature, or a bugfix) you are more than welcome to stick with the version you are running. We will list in the announcement if anything is critical and needs the upgrade.
What operating system runs InspIRCd the best?
As we have not personally tested and profiled every operating system on the planet which is capable of compiling and running InspIRCd we cannot say. We can however state that we developed InspIRCd on freebsd and gentoo machines, so we know it performs well on these platforms.
Why did you write an IRCd in C++?
Because C++ has a whole range of features that make it appealing to such a project, on a project management and coding level:
- OOP allows for modular design, which is the goal of InspIRCd
- OOP allows for easier project management and allocation of tasks between developers
- OOP programs are easier to design
Of course there are probably faster and more efficient object oriented languages out there, but it basically comes down to the fact we know C++ and we don't know these other languages.
Why didn't you use an XML parser for your config format?
There are three reasons for this. The most important reason is firstly because the config file is not xml! It isnt intended to be XML, or anything like XML. If you need to draw comparisons to other data formats, the closest comparison is SGML not XML (which is akin to HTML - we chose this format simply because just about everybody who's trying to set up an IRCd knows how to write HTML). Secondly, XML parsers apart from being slow and bloated libraries, are just that -- libraries. You will notice that the core of inspircd has no external dependencies at all. You could probably compile the core of InspIRCd on a shaven yak. Adding XML as a requirement as well as making our IRCd slower and bigger would add this as a dependency making it more akward to install. Thirdly, we believe XML is just a modern day management buzzword and there are many more useful data formats out there (such as SQL databases for example!).
Can my network be the "official" InspIRCd network?
Sorry, no. That privilege is reserved for our own network at irc.inspircd.org.
What services package should I choose?
This is pretty much a personal question. Choose what you are happy with, and what your users like. Spend a week or so trying out each package on a testnet, put it through its paces and find the best one for you, not for someone else.
Also, consider these very general guidelines:
- If you're looking to create an undernet-like, or ircu-like network, you should consider atheme first. Atheme is similar in operation to undernet services in that it operates on the idea of accounts, not owned nicknames. This means it will guide you into using m_services_account.so on your InspIRCd server, and not the same style of nickname ownership as dalnet, for example. Currently, the largest InspIRCd network (barafranca) and the second largest (ChatSpike) use this services package.
- If you're looking to create a dalnet-like network, you should consider ircservices. ircservices is lightweight and is the best-supported services package protocol wise for dalnet-style services. In this instance, we refer to dalnet-like as any network which has strong nickname ownership, which in this case means a user can only use services from a registered nick and the services implement "nickserv enforcement".
- For everyone else who is undecided, consider anope. Anope is the most user-friendly of all the packages, however it is the least supported of the three packages, as no larger InspIRCd networks are using it.
Where should I report a bug?
On our official bugtracker, here.
How can I contribute to the project?
We of course welcome all contributions to the project, we're pretty friendly and have a very open development model. Feel free to talk to us on IRC.
Any contributions to the program should be posted as patches on the bugtracker, preferably as SVN diffs (make your change to a working copy off SVN, and `svn diff') by posting here. Contributions of documentation should be made to this wiki. We do not currently need webspace, or download mirrors.
Where can I submit feature requests?
On our forum, here, or directly over IRC. Your feature is more likely to be accepted if:
- You provide a patch or working module.
- Your feature fits in with the 'style' of InspIRCd. For example, do not create one module that does ten things, create ten simpler modules that do each thing in turn, wherever possible.
- You can represent your idea in a simple logical way, e.g. with a flowchart or by example.
Where can I bitch, moan, flame and harass people?
NOT here, or on the IRC network. In fact, it is against our Channel Rules.
Can I use InspIRCd on my large network?
Feel free! We have tested InspIRCd up to 80000 clients (on one server, our resources are kind of limited). If you have any statistics on performance etc you would like to share, just get in touch with us :)
Do any large networks use InspIRCd?
To our knowledge, the largest networks using InspIRCd are Barafranca (3500 users), ChatSpike (1400 users) and AustNET.
InspIRCd is regularly tested with much higher userloads, however.
Which socket engines are supported by InspIRCd?
The following high performance socket engines are supported:
- select (All versions, all operating systems)
- kqueue (1.0 beta 5 onwards, BSD only)
- epoll (1.0 beta 5 onwards, Linux only)
- Solaris 10 I/O Completion Ports (1.1.6 onwards, Solaris only)
- Windows I/O Completion Ports (1.1.8 onwards, Windows only)
Other socket engines will be supported as we have time and resources to develop them.
Please note that the performance improvements given by use of kqueue, iocp or epoll are very large performance gains over select(), and should be used wherever they are available. If you do not have any of these socket engines, you should seriously consider upgrading your operating system or kernel before running an IRC server.
What IRCd is InspIRCd based on?
None. Yes that's right, None. We didn't start from anyone else's code, at all. Its not based on unreal, and its not based on bahamut. This is what makes it unique.
Can I run InspIRCd as root?
You could run the inspircd binary with the -runasroot parameter, but if you do, we won't support you. If you want to bind InspIRCd to a privileged port, you should instead use a port forwarding rule in your firewall. For example, if you are using Linux with iptables:
/sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 -d 127.0.0.1 --dport 443 -j DNAT --to 127.0.0.1:4430 /sbin/iptables -A FORWARD -p tcp -i eth0 -d 127.0.0.1 --dport 443 -j ACCEPT
This will forward all traffic on port 443 to port 4430, on the IP 127.0.0.1. You should change the ip and port numbers as appropriate.
If you are running Linux, another solution is to enable file system capabilities in your kernel, which allows you to grant specific privileges (e.g. the ability to bind to ports under 1024) to any process without having to run it as root.
On FreeBSD and similar systems, there is a sysctl OID for this, which you can set:
net.inet.ip.portrange.reservedlow=1 net.inet.ip.portrange.reservedhigh=1
This will allow non-root processes to bind any ports which are above port 1, essentially all modern used port numbers.
How do I run inspircd when the system starts?
To launch InspIRCd when your system starts, you should place the following line into the crontab for your IRCd user (crontab -e):
@reboot cd /home/user/inspircd; ./inspircd start
How do I get prefixes like "~" and "&"?
Load m_chanprotect, set <options:qaprefixes> to "yes" and rehash or restart. Due to the way clients handle detecting these new prefixes, restarting is much less confusing for your users, but will of course disconnect them and force them to reconnect.
Can InspIRCd make cheese sandwiches?
Only with the m_cheesesandwich module.

















