- 1 Why should I choose InspIRCd over some other IRCd?
- 2 How much memory does InspIRCd use?
- 3 How do I start InspIRCd?
- 4 Why do you release new versions so often? I can't keep up!
- 5 What operating system runs InspIRCd the best?
- 6 Why did you write an IRCd in C++?
- 7 Why didn't you use an XML parser for your config format?
- 8 Can my network be the "official" InspIRCd network?
- 9 What services package should I choose?
- 10 Where should I report a bug?
- 11 How can I contribute to the project?
- 12 Where can I submit feature requests?
- 13 Where can I bitch, moan, flame and harass people?
- 14 Can I use InspIRCd on my large network?
- 15 Do any large networks use InspIRCd?
- 16 Which socket engines are supported by InspIRCd?
- 17 What IRCd is InspIRCd based on?
- 18 Can I run InspIRCd as root?
- 19 How do I run InspIRCd when the system starts?
- 20 How do I get prefixes like "~" and "&"?
- 21 Can InspIRCd make cheese sandwiches?
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 thirty two thousand (32,000) lines of code. Compare this to eighty four thousand (84,000) 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 server 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 4 servers, plus various services, and with between 700 and 1,200 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:
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++?
Firstly, the lead developer (and trusty sidekick) knew C++ quite extensively and were most comfortable programming in said language. Most (seasoned?) programmers would agree that it's not the language that makes the programmer, it's the programmer's ease of expressing his or her ideas in that language. Second, while this was not a pushing reason at the time, C++ appears to be the fastest language (on average): The Computer Language Benchmarks Game. Thirdly, because of the object-oriented approach that we've taken, it's made allocating the smaller tasks in a release cycle much easier. An example of this is with module API and module factories. It allows us to focus on the finer aspects in the project like how memory will be allocated from the global heap on Windows while also providing a clean development API for those interested in improving the project, see the overloading of the new and delete operators on the Coding Guidelines page. One of the things that lends to the speed of InspIRCd is our use of ADTs (Abstract Data Types) from the Standard Template Library. The STL promotes code reuse and optimization where applicable without adding to code complexity. We hope that this state of mind is what will make the project more approachable for those wishing to contribute.
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 isn't 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:
- Atheme is a very flexible services package; most of its features are in modules, similar to inspircd. Rather than forcing nicks to be registered, it uses accounts that can optionally own nicks, so you can implement Undernet-style or DALnet-style nick ownership. Currently, the largest InspIRCd network (Barafranca) and the second largest (ChatSpike) use this services package.
- Anope claims to be one of the more user-friendly services packages. Versions 1.8.2 and above support InspIRCd 1.2, and they work well together.
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 Git diffs (make your change to a working copy off Git, and `git 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?
- 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?
Can I use InspIRCd on my large network?
Feel free! We have tested InspIRCd up to eighty thousand (80,000) clients (on just 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?
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 operating systems)
- poll (all UNIX-like operating systems)
- kqueue (BSD, OSX)
- epoll (Linux)
- Solaris I/O Completion Ports (Solaris)
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. It's not based on Unreal, it's not based on Bahamut, nor is it based on any other IRCd. 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:
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 "&"?
Uncomment the appropriate <module> tag and example settings for m_customprefix . 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.