Opennap NG 0.60 - Frequently Asked Questions (FAQ)



These are the Frequently Asked Questions (FAQ) about Opennap NG. A few questions are still unanswered as yet. Sorry for this. They will be handed in later. Questions and answers are sorted into 5 groups. Please contact us if you miss your question and think it should be added here.

The FAQ currently contains 108 question.

  1. General & History

  2. Features

  3. Operation

  4. Administration

  5. Technical background



1. General & History

Q: What is Opennap?
A: Opennap was the first free, open source server software to serve the original Napster peer 2 peer filesharing protocol. Original Opennap was written in 2000 and 2001 by DrScholl, up to version 0.44.

Q: What is Opennap NG?
A: Opennap 0.44 from 2001 was the last version by DrScholl. After its release DrScholl completely left the scene. The Opennap NG (Next Generation) project was created in early 2002 by a group of volunteers, consisting mostly of then existing server owners with more or less programming skills. It directly based on Opennap 0.44 but introduced many new features and bugfixes. Major versions of Opennap NG were 0.45 and 0.46, both released in 2002. After that, development was mostly halted again. 0.47 (2003) and 0.47.2 (2004) were only minor bugfix releases with only one new config variable. Opennap NG 0.49.1 (March 2005) is a new major bugfix and feature extension release (more than 25 new config variables), including new accessory programs, scripts, manual and website presence.

Q: Why are there two different sites / branches of Opennap NG?
A: For a detailed explanation, please see http://opennap-ng.sourceforge.net/split_story.html.
Short summary: during 2003 and 2004 the Opennap NG project was mostly controlled by one particular (now former) member of the development team. There was little progress during that time. In January 2005 Opennap NG 0.49 became available. It was being developped mostly by other volunteers. It featured massive extensions and important bugfixes over 0.47.2. However, that former project member declined to accept the 0.49 improvements, claiming especially the new features were unneeded. Later he started to claim that 0.49 based directly on old 0.45, missing all the bugfixes and extensions of 0.46 and 0.47. This is wrong, of course. The rest of the project team disagreed with him and welcomed 0.49 as a great continuation of the project. When he learned he was outvoted that former member quickly chose to leave the NG development team in dispute. Soon after that he created his own Opennap NG website where he offers his own version of Opennap NG, which bases on 0.47.2 and has none of the improvements of 0.49! The version from SourceForge features all extensions and bugfixes of NG 0.46, many bugfixes of 0.47.2 and a lot of unique extensions, new acessory software, new manual and more bugfixes, which the other project doesn't.

Q: For how long does Opennap (NG) exist?
A: The Opennap NG project was created on May 26th, 2002, basing on Opennap 0.44. The first publically available version Opennap NG 0.45b2 was released on June 9th, 2002. Original Opennap was registered January 10th, 2000. Latest version 0.44 is from September 29th, 2001.

Q: Why was there so little progress for past two years and more?
A: In 2003 some of the original project team members of Opennap NG retired. Others suffered from lack of time or lost interest in spending much more time in it. So, during 2003 and 2004 there was mainly just one Opennap NG project member on duty. Unfortunately that person showed no real interest in improving Opennap NG ever since, especially not in terms of feature extensions and by thoroughly incorporating contributions from others. It took up to early 2005 until other project members fully realized this and decided to change the direction, actively work on the project and also accept contributions and feature extensions on it.

Q: Why the big jump from version 0.49.x to 0.60?
A: There are two reasons for this:
  1. to better distinguish from the inofficial branch of a former member of this project, which is far behind in terms of features, performance improvements and bugfixes.
  2. version 0.60 is actually a major rewrite of many parts of the software. Between 0.49.1 and 0.60 the codebase has been changed (optimized and extended) to a greater extent than between 0.44 and NG 0.49.1.! So we really believe this version jump is justified.

Q: Why was there no (SourceForge version of) Opennap NG 0.48?
A: There never was a public one. It was used only internally by a few people at end of 2004 / beginning of 2005. At that time a quarrel between SourceForge Opennap NG team members was to arise. One (now former) team member strictly declined to accept post-0.47H improvements of Opennap NG as a new official version 0.48. The full story of the quarrel is available here. While the quarrel was ongoing for some time, development of Opennap NG was doing as well. After the situtation was resolved (by that former member voluntarily leaving the team and continuing to work on his own branch which bases on old 0.47.2), further improvements were already applied to the code, so we felt the jump to 0.49 was reasonable. Nowadays, Opennap NG version 0.48 is occupied by the inofficial branch. It is no predecssor to 0.49 and 0.60 and vice versa. Successors to 0.48 won't have the features of 0.49 and 0.60.

Q: Is Opennap NG mature or premature software?
A: Opennap NG has been in use especially on Unix systems for years. Some servers are known to have run a year(!) and more without any need to restart Opennap NG software! Many bugs were removed and improvements applied since 0.44. So we think Opennap NG is to be considered mature, indeed. One of the remaining issues, a well performing, reliable Windows version, has been addressed with Opennap NG 0.49. Note that between March 3rd and March 15th 2005 unfortunately some premature versions of 0.49 were available at SourceForge, which contained a serious Windows crash bug. This has been fixed meanwhile.

Q: Why did it take so long for the GUI config tool to emerge?
A: It was simply no priority for any of the Opennap NG developers until 2005. Opennap NG was developped on and mainly for Unix. GUI requests came mainly from Windows users. In Unix, almost no server software has any GUI components, while in Windows most has. Furthermore, until version 0.49, Opennap NG couldn't be considered really stable and well performing on Windows. We know of no Windows servers which ran over a longer duration. Some of its earlier programmers used to blame Windows itself for this (which has turned out not to be true, there were some Windows-specific bugs in Opennap NG instead!). As Opennap NG 0.49 was able to demonstrate good performance and stability on Windows, the ever-existing demands for a GUI were eventually addressed. Since the complexity of its configuration has grown as well, the GUI config tool is even appreciated by some Unix users meanwhile.

Q: What skills are required to run an Opennap NG server?
A:
  • You should know what client-server-applications are.
  • You should know about P2P basics.
  • You should have been working with one or more available clients for some time.
  • You should have an idea about the features and limitations of the original Napster protocol, which Opennap NG bases on.
  • You should know how to install (possibly download before) software at all.
  • You should be able to work with an ASCII text editor to edit files as needed.
  • Possibly you need to know how to configure your firewall or router equipment for proper Opennap NG operation.
  • You should be informed about possible risks of running a server.
  • You should be able to administer your users and files base in a well-balanced and fair way, to protect your server(s) and other users from evildoers
  • At least basic skills in english language are currently required to operate Opennap NG.

Q: What's the cost of Opennap NG?

A:

The software itself doesn't cost anything, it's available for free, may be copied and received arbitrarily. However, note that if you don't have an internet flat rate, running Opennap NG could be expensive for you, due to ongoing costs of internet traffic.

Q: Is Opennap NG being actively developped?
A: Most of 2003 and 2004 Opennap NG development was dormant, because a person who generally rejected most improvements from others was in response. After this person has left Opennap NG development team and others took over responsibilities again, Opennap NG development has revived and some major improvements became available. As of April 2005, Opennap NG is actively being developped towards upcoming 0.5x releases, which will be major new feature releases.

Q: Where can I get support in server installation?
A: Please have a look at the contacts & requests page.


2. Features

Q: What operating systems does Opennap NG support?
A: Opennap NG was written to basically support all POSIX-compliant operating systems. This includes most Unices. Furthermore, a native Windows build (without need for any additional emulation software) has become available with 0.49. However, most Unices feature some specific sorts of POSIX aberrations or custom interpretations. Most of them are minor ones. A rule of thumb is: if Opennap NG sources compile on a given platform it will likely run flawless as well. However, as the source is continously being upgraded at this time there is no guarantee that opennap NG will compile on particular platforms. Current development platforms are Linux and Windows. Reports from other platforms are welcome.

Q: Is there a good working Windows version of Opennap NG available?
A: Yes. Opennap NG 0.49 includes some Windows-specific bugfixes and performance improvements. Available Windows binary was created using the free MinGW compiler suite, which produces a 100% native Windows application with no need for additional software, especially no Unix / POSIX emulation layers or similar. There were also Windows versions of earlier versions available but they didn't run as stable as the Unix versions and consumed more CPU. Those Windows-specific bugs of earlier versions have been fixed since 0.49.

Q: Does Opennap NG support MD5 sums?
A: It sort of does but this feature is turned off by default and it is recommended to leave it off. You should neither rely on it nor assume it's available. Support for MD5 sums in Opennap NG has to be enabled by specifying the --enable-resume option when configuring the source, prior to compiling it. Neither the precompiled Linux nor the Windows binaries are created with this option enabled. There are some important reasons for this.
  • MD5 sums must be supported not only by servers but also by clients, and only few ones appear to do so. Without thorough client support, the MD5 feature is useless.
  • If enabled in the server it not only creates a slightly larger binary but also runtime RAM and CPU demands of the server increase by some percent.
  • The Napster protocol uses a custom specification for MD5 sum calculation, which must be considered broken. Depending on clients capabilities, not only one and the same file may produce different MD5s but also changes in files may not change the associated MD5 sum!
  • With some exceptions, MD5 sums of files in Opennap NG context are normaly not the same as MD5 sums in neutral (or general) context.

Q: Is Opennap NG restricted to serving MP3 files only?
A: No, this was a restriction of the original Napster servers. Opennap NG allows to serve all sorts of files. However, MP3 files still receive special treatment, as their content-specific attributes like duration and sample frequency are regarded by Opennap NG.

Q: Can I configure Opennap NG to serve MP3 files only?
A: Basically yes. As of version 0.50 you can specify one or more patterns in file opennap-allow.txt. Every filename which is to be shared must match at least one of the patterns specified there. So, for instance a pattern like \.(mp3|ogg)$ would allow only files with the extension .mp3 and .ogg (case-insensitive) to be shared. Similarly you can chose to serve archives, HTML, text or picture files only. However, be aware that this feature only works on filename level. Mislabeled files cannot be sorted out by this, i.e. a movie file which is labeled "matrix.mp3" by the user trying to share it won't be recognized nor blocked. On versions prior to 0.50 you need to do it the other way round, that is to edit file opennap-block.txt instead. In that file you would specify all types of filenames you want not to be listed on your server, i.e. video files, executables, archives, libraries, pictures, etc.

Q: Does the server control download and upload starts and file request queues?
A: No. In Napster protocol, queues are implemented entirely on client side. Whenever one client requests a file from someone else and get a response like "remoteley queued" or similar, this response is not from the server but from the other client. There is no sort of file request queue management or buffering in the server. This is implemented all client-side. The server just relays (forwards) messages between clients. Whether an incoming upload request is to be granted immediately, put into a request queue or ignored at all is totally under control of the client which received the request.

Q: Can clients be forced to start uploads or provide appropriate bandwidth?
A: No. The clients have full control of when and whether to start uploads requested by others. The server just informs a client about someone else requesting a file. It's completely up to the client then to decide how to deal with it. If the client doesn't decide to start an upload there is nothing either the server or other clients can do about it. Neither the protocol nor the server provides means to try to enforce particular behaviour of clients and even if they did it would be technically easier for clients do disobey such orders than to adhere to them. Bandwidth limitations are also a client-specific feature. The server neither knows about nor can do anything against it. The protocol doesn't contain any requirements of minimum bandwidth to be fulfilled by clients, and even if it did, clients were still free to disobey such a protocol feature. However, this way users always have sufficient control over whom to grant uploads and whom not to. Upload control is entirely on users's side.

Q: Why is there no GUI (Graphical user Interface) for Opennap?
A: Opennap started out as a plain POSIX server application, mainly targeted at several Unix platforms. In Unix, server software is always GUI-less. The POSIX standard doesn't contain any GUI elements for software. The merge between server software and a GUI commonly becoming one is a Windows-specific and not easily portable concept. Besides, a missing GUI is not only a missing feature but for many Unix users actually a positive feature. Most Unix geeks prefer to manually hack text configurations files over clicking on graphical items with the mouse.

Q: Will there ever be a GUI version of Opennap NG?
A: No. The server will always run as a non-GUI application with only basic output to a console or terminal window or screen. However, additional GUI software to manage or control Opennap NG operation (at least partly) isn't ruled out by this.

Q: What is the difference between Opennap (NG) and IRC?
A: IRC (Internet Relay Chat) is a protocol. Opennap (NG) is a server software. IRC uses its own server software, which is available in numerous flavours. Opennap NG serves the original Napster protocol, which is entirely different from IRC. Both protocols support chatting, privately and in public channels, and single file transfers. While many chat commands are identical between IRC and Opennap, Opennap supports extended features, like more and persistent user levels, which IRC doesn't. IRC doesn't support true filesharing. Opennap (NG) supports true file sharing, based on file lists and search capabilities. Neither can pure Napster protocol clients connect to IRC networks nor can IRC clients connect to Opennap servers. While sharing some features they're technically almost completely different.

Q: What is the difference between Opennap NG and Slavanap?
A:
Slavanap Opennap NG
was the 2nd free Napster server implementation Opennap (not NG) was the 1st free Napster server implementation
is a GUI application is a console / text application
has its own local administration shell can be almost entirely administered remotely only, by suitable clients
started as open source but turned into closed source since version 3.0 always was, is and will be open source
is programmed in Delphi is programmed in ISO C99
depends on Delphi / Kylix runtime components suite has no further external dependancies but zlib
was developped on Windows and later there was an attempt to port it to Unix (via Kylix) was developped on Unix and has then been ported to become a native Windows application
For Windows users Slavanap has become the 1st choice during past two years due to lack of development and stable versions of Opennap NG for Windows for Unix users always was and is the better choice. We hope to gain back some Windows users with new stable Windows versions of Opennap NG
has basic set of server features has many additional server features
reportedly has performance problems with large ban lists has no performance problems with large ban lists
reportedly is less stable than Opennap NG never had stability problems on Unix, believed to have stability problems on Windows fixed since 0.49.
contains (or contained) additional features to spy on private user data and actions doesn't contain functions which hurt the privacy of users

Q: Can Opennap NG and Slavanap servers link together?
A: No. Linking to other servers contains some proprietary protocol extensions which are server specific and differ between Opennap NG and Slavanap. Networks are composed of either Slavanap or opennap (NG) servers, respectively. However, you can link all versions of Opennap NG (starting with 0.45) together, including servers running on different platforms (i.e servers running on Windows and servers running on Unix).

Q: I am used to Slavanap. Shall I switch to Opennap NG?
A: Don't do that if these features of Slavanap are important to you:
  • Simple click, start and don't care procedures without real need for further knowledge on what is going on.
  • a server process with a GUI, not having to deal with console applications at all.
  • intending to link to existing Slavanap-based networks
  • being able to spy on private user data or actions
  • reduced complexity, simpler administration (due to less features)
  • non-english messages from server
We suggest you to have a look at Opennap NG if you like to
  • have more features, i.e. better freeloader or unwanted content protection
  • benefit from greater stability
  • benefit from greater performance
  • learn more about the server and protocol at technical level
  • use Linux / Unix and not Windows any more
  • use open source server software
  • link to existing Opennap NG networks
  • plan to contribute to the project


3. Operation

Q: What do I need to run an Opennap NG server?
A: Please see section System Requirements in the manual or on the homepage. In short: a free computer, at least a 100 MHz CPU, plenty of RAM (at least 128 MB free for a small filesharing server) and a reasonable internet connection (see below). 24h/day machine availability and connection to the internet is preferred although not required.

Q: What internet connection do I need to run Opennap NG?
A: Preferrably a flat rate with ISDN speed or above. Bandwidths of at least 1024 / 256 kbps down/up are recommended for linked servers. See System requirements in the manual or on the homepage for more detailed explanations.

Q: Can I run Opennap NG despite having a dynamic IP address?
A: Yes. Together with the underlying TCP/IP stack of the operating system, Opennap NG is able to deal with that without urgent need to restart the server. A server with frequently changing IP address may be considered a bit inconvenient for clients but there is no major problem with it

Q: What happens if my internet line (dialup connections) breaks?
A: All existing client connections become invalid and silent at once. However, the server itself doesn't get to know this immediately. You should note the CPU utilization of Opennap NG dropping to almost zero. All server activity ceases for some moments because the server doesn't receive any requests for the time being. If the line isn't reestablished automatically then after some moments users will begin "leaving" the server. I.e. the server starts to notice their connections have become invalid and ejects them. If the line is reestablished automatically then you will see (if logging of those items is enabled) a massive increase of ghost kill events (or requests, if ghost killing is disabled), possibly together with a number of "connection reset by peer" error messages. This means that clients have started to realize their existing connections to the server became invalid, and most of them are trying to reconnect automatically. However, not all previously connected clients will attempt to reconnect at the very same moment. Due to the nature and parameters of TCP/IP it takes all clients different amounts of time to realize the lost connection. It may take them up to 20 minutes, though the majority of clients will realize it within 5 minutes. So reconnection attempts will be staggered. The server is designed to handle this pretty well. Remaining dead connections of clients which do not automatically try to reconnect will eventually be realized and removed by the server within 30 minutes after the line break.

Q: I am behind a firewall. Can I still run Opennap NG?
A: Yes. You just need to open Opennap NG's listen port to the outside world. This is by default 8888 but can be changed using the server_ports setting. If you want to run a public server which is listed at GotNap's server list then you also need to allow the server to make outgoing TCP connections to server stat_server_host at port stat_server_port.

Q: Do I really need a big machine and fast internet connection for Opennap NG?
A: No. Server demands on the three main resources RAM, CPU and bandwidth are highly variable, depending on the configuration. It's just a matter of how big (in terms of numbers of users and files) you plan your server to become. For instance, if you plan to run a standalone server with no more than 100 connections, where each user shares an average of 500 files, you could get by with even an old 80486 machine with less than 100 MHz clock speed, 64 MB RAM and an ISDN line with no noteworthy lag. This was actually being tested.

Q: Can I use Opennap NG as a chat only server?
A: Yes. If you set allow_share to off then no files will be listed, searcheable or transmitable through your server. Only channel and private chats will be supported then, making Opennap NG behaving much like an IRC server.

Q: Can I link Opennap NG to IRC servers or networks?
A: No. The underlying protocol differs completely. IRC is a protocol of its own. Opennap NG bases on the original Napster protocol which offers similar chat features but internally works completely different.

Q: How reliable does Opennap NG run?
A: Opennap NG is in use especially on Unix systems for years. Some servers are known to have run a year(!) and more without any need to restart Opennap NG software! Many bugs were removed and improvements applied since 0.44. Thanks to the excellent code base by DrScholl, no vulnerabilities were discovered in the code so far, although many people were studying it ever since. One of the remaining issues, a well performing, reliable Windows version, has been addressed with Opennap NG 0.49. We have confirmed reports of server runtimes of two weeks on Windows, serving about 2000 users for that time. However, we also learned that your mileage may vary depending on the Windows and Service Pack versions you are using. We got some indications that Opennap NG doesn't perform that well on Windows with recent Service Packs installed, apparently due to some changes in their handling of TCP/IP connections. These issues are under investigation.

Q: Why does Opennap NG open a text window on Windows? Can I close it?
A: Closing the window terminates the server. It's a proper way to do so, though. As of Opennap NG 0.49 the text window is the default output interface of Opennap NG. It is directly connected to the running server process. All text messages the server wants to output go to this window. You can't close it without forbidding Opennap NG to output text messages, which means to forbid further execution of the program at all.

Q: What is the proper way to terminate Opennap NG?
A:
Measure Applicable on Saves state
If started via Explorer you may simply close the text window Opennap NG has opened Windows only No
Press CTRL + C in the console (window) in which Opennap NG is running (on Unix: only if running in foreground, non-daemon mode). Windows + Unix No
Using a client you may send a private message to pseudo user operserv, consisting of killserver <server>, where <server> is to be replaced with the name of your server to shutdown Windows + Unix Yes
If available, you may use an init script for your distribution to stop the server (if server runs in background / daemon mode) Unix only No
use the kill command to send a TERM signal to the server process Unix only Yes

"Saves state" refers to an up to date dump of opennap-users.txt, opennap-bans.txt and optionally opennap-filters.txt file on exit. During normal operation they are dumped frequently, every user_db_interval (I) seconds (defaults to every 30 minutes).

Note that on Windows the only way to terminate Opennap NG in a way that it creates up to date dumps of users, bans and channels files is to terminate it via client command. Any other way no current versions will be created on exit. By default, those files are automatically dumped every 30 minutes so you may lose up to 30 minutes of recent user registration or ban data.

Q: Users and I experience frequent lag! What can i do?
A: The main cause for lag on a server is CPU overload. If you open a CPU monitor such as top, ktop or Task Manager (Windows) you will see the CPU likely being at 100% for some time, usually seconds, sometimes minutes. During these periods the server is not responsive, either not at all or with notable delay only. On a CPU histogram you will see the CPU occasionally hitting 100% utilization for some seconds, even if the average utilization is just 30%, 20% or less. This is nothing to worry about, it's a result of occaiosnal internal cleanup operations by the server. Reduce max_shared to reduce these brief lags. However, if the average CPU utilization raises over 70% or 80% then your server is probably operating on the edge of its capacity. 100% CPU periods usually become much more frequent then. In this case you should reduce max_connections.The second possible cause for lag is overload of internet bandwidth. The server may want to send more data than your line can handle in time. This is a less common cause, though.

Q: Why does Opennap NG consume so much RAM?
A: When Opennap NG runs with filesharing enabled and is filled with users it usually has many millions of distinct items to keep in memory. Most important are the lists of file informations. Separate memory records are created for each single file to be shared by a user. Filenames are split into keywords, assigned to user records, stored in communication buffers for inter-server communication or user search results, etc. Between 10 and 20 memory allocations per file to be shared are required. Although most of them are just a few bytes each. However, there's always a significant allocation overhead, since operating systems don't allocate memory byte-wise, but rather aligned on minimum-sized blocks (similar to a filesystem on disk), which are usually 8, 16 or 32 bytes (OS-dependent). In average, information for one shared file may consume up to 350 bytes on Linux and up to 500 bytes on Windows.

Q: Why doesn't it ever free any RAM?
A: It does! Memory consumption would look much worse if it didn't. However, there is a difference between an application freeing memory, and the operating system making this freed memory available for other processes again. The former takes place, the latter does not. But this is not Opennap's fault. If you monitor the memory usage of a running server over some time, as new users connect and files are being uploaded, you'll notice it continously growing. When the server has reached its connection limit, the memory usage will increase only very slightly and flatten over time. However, if you kick all users (and files) out of your server without restarting it, you'll notice the system reports still the same memory usage on an empty server as when the server was full. This is what you are wondering about! Actually, the server has returned (nearly) all memory properly to the OS, but the OS didn't take it properly. This is a limitation of POSIX! The OS can take back and free memory only under some special conditions which are not met by Opennap NG (nor by many other applications). The OS won't take back and free RAM from them until the applications terminate! Note that this limitation does not fully apply to the Windows version of Opennap NG! On Windows it can occasionally free some KB of RAM, indeed, but unfortunately usually no significant amounts while the server keeps being filled with users. However, on POSIX systems, if you start again filling the server with users and files you will see almost no further increase of memory usage. The once allocated and previously freed memory will be reused. Besides, we still can't absolutely rule out the existance of further small memory leaks. But if they really exist they must be insignificantly small, since many Opennap NG servers have been running for many months, and most of them were not restarted because of memory leaks became apparent after that time. Of course, when a server process terminates all its consumed memory is immediately returned to the system.

Q: How can I reduce or limit RAM demands?
A: The most important measures are:
The total number of files in the server is the main memory eater. Reduce the number of files to save more RAM. A number of other settings may have a tiny, though usually not noticable, impact on memory consumption, such as buffer sizes, etc.

Q: Should I increase my virtual memory pool for Opennap?
A: Not for Opennap! Virtual memory works by moving parts of the allocated RAM which are considered "not being used at the moment" by the OS to disk. For instance, if you have a paint program with 5 pictures open, usually 4 of them should be considered "not being used at the moment" while you are working on one of them, hence be worthy objects for being swapped out to disk. However, Opennap NG uses to frequently traverse a majority of all of its allocated memory blocks, during searching for keywords, file data, user records, and so on. So it's nearly impossible to rate any part of the memory allocated by Opennap as "not being used at the moment". Letting Opennap NG use virtual memory when physical memory is running low creates the risk of having the harddisk permanently swapping parts of Opennap NG's allocated memory in and out. This not only almost freezes the server but also reduces the lifetime of your harddisk!

Q: Why is CPU utilization at 100% for several minutes after a server start?
A: This is the case if your server is already known by at least some hundred users who automatically and permanantly attempt to connect to your server, even when it's not online. When you start your server you'll experience an initial boost of logins by users. If not throtteled by means like max_uploading, max_new_users_count and max_new_users_time, connection requestors will consume all available bandwidth and CPU to get in as quickly as possible, overrunning themselves and possibly temporarily overloading the server. If you use to have 1000 users or more connected to your server, this initial connect boost can take 5 to 10 minutes, depending on your available bandwidth and CPU speed. After the initial connect boost has been processed, CPU utilization should generally reduce to convenient levels.

Q: How many files can an Opennap NG server serve?
A: The only limit for this is the amount of available physical RAM. On Unix calculate up to 350 KB of RAM usage per 1000 files. On Windows calculate up to 500 KB of RAM usage per 1000 files. So if you have 512 MB RAM you should be able to serve well over 1 million files on Unix and nearly 1 million files on Windows. See also: system requirements.

Q: How many users can my Opennap NG server serve?
A: In general the number of users connected to a server is limited by available hardware resources and operating system limits only. If you run a filesharing server, most users will consume more or less RAM as they upload their file lists (see previous question). Also consider the increasing demand of internet bandwidth and CPU power, as more and more users upload their file lists, search and request response file lists, keep requesting downloads, etc. Some operating systems impose their own upper limit for number of connections any process can handle. For instance, in Linux kernels up to 2.2 this was roughly 1000 by default. In Linux >= 2.4 and Windows 2K / XP there is no such OS limit any more. Besides those general limits yoy can precisely control the maximum number of users on your server via the max_connections setiing.

Q: Must Opennap NG run on a dedicated server computer?
A: No. You can basically use your daily-life computer as long as it is connected to the internet and fulfills the other system requirements for running Opennap NG. However, while the server is running on a machine, don't do any of the following on it:
  • Play any 3D or other realtime games with high CPU and memory consumption
  • Perform tasks which utilize the CPU to 100% for more than a few seconds, like ripping CDs/DVDs, and encoding MPEGs, let the computer render graphics or perform any other sort of CPU- consumptive calculations.
  • have another server software running which also utilizes major parts of available CPU.
However, you may use other applications with a non-permanent CPU usage while the server is running, such as text editors or word processors, conventional paint programs, internet browsers, and similar. It's recommended to have some sort of task monitor (i.e. top or ktop on Unix, Task Manager on Windows) open while the server is running, to keep an eye on CPU utilization on the system. While not being required, dedicated server machines are preferred, though.

Q: What priority / nice level should the server process run at?
A: It is recommended to let Opennap NG run on a lower or even lowest process priority. This is true for most other server applications as well, by the way. It's a common misconception that low server priority means less performance, significantly greater lag or lower execution speed. This is not true. You just need to obey the previous answer. If so, the server will neither run slower nor develop more lag. In contrast, concurrently performing others of the allowed tasks (like writing, browsing, etc.), those actions will be much smoother than with the server running at normal priority. If indeed the server started to lag when running at low priority, and system CPU usage is at 100%, then you were simply performing an operation (i.e. starting or using an application) you are not allowed to on a server machine! Don't run Opennap NG at high process priority! That is a security risk! Occasionally it may grab 100% of CPU for some time (seconds, sometimes minutes). If running at high priority, the rest of the system is virtually dead during that period. This doesn't make Opennap NG faster. However, if Opennap NG erroneously enters an endless loop state, the system would likely need to be rebooted to become responsive again.

Q: Why is there so much text output by Opennap NG?
A: One of the strengths of Opennap NG is, that it allows pretty detailed insight about what it is doing and what is going on. Except for users sharing content rated as criminal, no private information about users will be emitted. If being stored, much of the output by Opennap NG can be used for later performance analysis, fault detection, configuration optimization and creation of statistics.

Q: Can I reduce text output by Opennap NG?
A: Yes. Via the log_level setting you can pretty precisely control what sorts of information you want to have emitted and what not.

Q: Can those server messages be output in another language but english?
A: Not as yet. However, as of NG 0.60, preparations for NLS (National Language Support) have already been built into Opennap NG. They're finished to about 90% but as yet there are no translated text versions for other languages available. Note that only log and system state messages, to be examined by Admins and Elites, would be translated. Mod+ notifications and response messages for users will always stay english, since running Opennap NG servers are typically being attended by an international audience.

Q: My harddisk isn't filling up. Does the server work correctly?
A: Yes. Unless a log is being stored to disk, Opennap NG makes almost no use of the harddisk. The only items Opennap NG frequently writes to disk are its lists of users, bans and channels. All of that usually fits within some hundred KBs. So there's no rank growth of harddisk space demands by the server.

Q: Does the server store any files from users locally?
A: No. Filelists being received by Opennap NG are kept in RAM only, they are never written to disk.

Q: I have Opennap NG 0.46 or 0.47.x running. Shall I upgrade?
A: If you believe your server system runs stable, you don't worry about known bugs and you are not interested in any of the new features of Opennap NG 0.49, there is no need to upgrade. Remember one of administrator's most important rules: never change a running system! No critical vulnerabilities or other bugs relevant to security are known or needed to be corrected so far. However, if you like to see some bugs fixed, optimize operation, have better flood and leech detection and ejection, want new in-depth information about the configuration variables, a tool to easily set them and a number of other nifty features then you should consider an upgrade indeed.

Q: When do I need to restart the server?
A: The server is designed to run without frequent restarts for a long time, many weeks or months usually. There are three important reasons to restart your server. They usually become apparent shortly (within few days our hours) after a server start:
  • the server has taken too much RAM too quickly. It needs to be restarted with some settings at reduced values to run for longer time with less RAM demands
  • the harddisk starts trashing, the server slows down or freezes and CPU utilization is permanently at 100%. This is actually the same as the previous item: RAM shortage. Terminate the server immediately if you notice this happening! Your harddisk may break soon otherwise.
  • some of the non-settable and non-hashable server variables are to be changed.


4. Administration

Q: Why can't I share files any more after upgrading to the new server version?
A: It's actually a feature, not a bug. See variable no_share_level. You are apparently an Elite on your server. For safety considerations, by default Elites (server owners) are exempt from sharing any files. This can be changed, of course, but due to legal risks that isn't recommended.

Q: Is Opennap NG remotely administratable?
A: Yes. Actually, parts of server administration can be carried out remotely only. Special messages are to be sent to special nicks to conduct server and channel administration. Elites can use any client software that supports private messages for that. See administration for further details. Currently the only thing that can't be conducted remotely is a permanent change of the server config file. All remote changes last only until the next
server restart (or rehash).

Q: Do I need the GUI config tool for Opennap NG administration?
A: No. You just need a proper configuration file. Opennap NG operates completely independent from the config tool. However, since the configuration file of Opennap NG becomes increasingly complex and difficult to overview, it is recommended at least to check out the config tool, as it displays a logical hierarchy of variable groups with inline help.

Q: What clients do I need to administer Opennap NG?
A: Any client with fully implemented chat features should do fine. Lopster, Teknap and Xnap are our favourite clients. You may find other fulfilling this requirement in this extensive list of clients Note that WinMX and AudioGnome don't support some key features of the protocol properly and are not suitable for Opennap NG server administration.

Q: What information do server operators gain about their users?
A: By a simple whois request Mods+ gather the following information about users:
  • Their nick
  • Their client ID string
  • Their user level
  • Their line speed info
  • Their IP address
  • Their upload port number
  • Their server connection port number
  • Which server of this network they are connected to
  • Time since login
  • How many files they share
  • How many files they are downloading and uploading at this moment
  • Total number of files they have downloaded and uploaded since they connected
  • The channels they have joined
  • Email address (if supported by server)
If the logs are configured appropriately, administrators and elites have additionally the options to gather information on:
  • What blocked (or criminal) files was a user attempting to share?
  • What invalid search terms a user was searching for?
  • How many files did he want to share totally, how many were blocked?
  • What other users does this user ignore?
  • How often did this user reconnect and how long did he stay connected each time?
  • Upload requests from others which were rejected by a client for any reason
  • When and why a user got banned

Q: Can I get insight to private chats of users to verify something?
A: No! Opennap NG doesn't support espionage on user activities beyond the level necessary to detect hostile clients. The contents of private conversations between users are taboo! They are neither logged nor made visible anywhere nor will the SourceForge Opennap NG development team ever support such intentions!

Q: Can I get an overview over connected users or what files are in the server?
A: Not as yet. If the log is appropriately configured you can at least determine whether and when particular users connected to your server. Currently there is no way to unveil the entire file pool in the server. However, this is on the ToDo list.

Q: I have started a new server. Why are there no users on it?
A: You need to advertise your server to make it publically known. Users need to learn about the existance of your (new) server. Without advertising or manually inviting particular users there will be no connects to your server. Other than on some other protocols, Opennap NG doesn't automatically link into existing network structures of other server owners to inherit users from them. Nowadays GotNap is the primary service to make your server publically known. If there continue to be no users connected at all (maybe except yourself) then your port or firewall settings may be wrong; you may be unreachable from the outside world.

Q: Why does my server fill up so slowly?
A:

If, even after several days of public advertisement in GotNap, your server appears to be filling rather slowly with new users, do the following:

  • check your ban rules. They may be too tight to be passed by many users.
  • check your ban lists. There may be lots of users banned for inappropriate or wrong reasons, due to wrong ban settings before.
  • check for large amounts of clones from particular subnets. Use the sample opennap-acl-limit.txt file to accept clones from certain providers..

Q: How can I attract more users to my server?
A: Keep advertising it in GotNap. Ease your ban rules to cause less bans. Remove existing long-term bans if they may not be absolutely justified. Check whether you can link to another successful and well known Opennap NG network to appear in their server list.

Q: Users report they often get a "connecting too fast" response, Why?
A: They try to connect more frequently to your server than the current login_interval setting permits. This applies only if the server has reached its configured maximum number of connections, can't accept new connections but someone tries again and again at high frequency. By some users the server might actually be flooded with connection requests if the frequency wasn't limited. So this is a flood protection.

Q: Users report they often get a "connection timed out" or "no response" response, Why?
A: There are a number of possible reasons to get these responses on attempting to connect, ncluding:
  • they tried at a time when the server was not online
  • they tried at a time when the server was not responsive, i.e. being overloaded
  • they use the wrong port number for connection attempts
  • they got the wrong IP address of the server delivered from their DNS server
  • firewall rules at client or server side prevent connections
  • there is a general connection problem between the client and server machine, i.e. lack of ICMP communication

Q: What do all those "connection reset by peer" messages mean?
A: They basically mean the connection from the client to your server has been closed by that client. It's not always the client itself which closed the connection, though. Sometimes connections can be closed by the operating system itself, firewalls or routers between client and server. In general it's a client which has signed off.

Q: Why were options to automatically kick users without banning them removed?
A: You likely have in mind former variables like discipline_ignorers (B), eject_also_bans (B) and discipline_block_mod (B). They were removed because they are redundant (pointless). Why would you want a user to be automatically ejected? Because he did something wrong, i.e. didn't comply to your server rules, didn't share enough, shared crap or perhaps even was flooding the server. Essentially, you want to get rid of them. Well, without banning this doesn't work. The majority of them would be back again within seconds or minutes, since clients are commonly configured to endlessly try to auto-reconnect on ejection. So instead of getting rid of, i.e. flooders, you rather worsen the situation by just killing without banning them: they will reconnect all the time and likely start their flooding over and over again. The same is true for users who share i.e. 10 000 files of crap: they will reconnect again and again, wasting your three main server resources bandwidth, RAM and CPU. So either you want to tolerate them, then don't eject them. Or you don't want to tolerate them, then eject and ban them. This only applies to automated ejection means. You still can manually eject (kill) users without banning them, although this makes barely more sense.

Q: When should I ban users?
A: FIXME!

Q: For how long should I ban users?
A: It depends. Opennap NG is capable of automatically banning lots of users for several reasons. For those bans usually a few hours to a few days are reasonable periods, as their number may grow quickly. Occasionally you may also ban users manually, i.e. for severe misbehaviour in chats, sharing illegal stuff or other reasons. For those manual bans a few days to a some weeks are likely appropriate durations. Ban durations of more than a month barely make any sense. Unlike earlier versions, Opennap NG 0.60 doesn't support unlimited bans any more.

Q: Why do very long or unlimited ban durations make no sense?
A: First of all: there is no way to guarantee that a banned user really doesn't connect again to your server (even while the ban is still active!) There are many tricks for skilled users to bypass existing bans, which include changing nicks and passwords, IP addresses, client IDs and filesets between each connect. You'll hardly be able to identify reincarnations of a banned user if he decides to play all tricks, including proxy servers, and wants to stay undiscovered. When you identify him, you need to create new ban entries again and again, obsoleting existing ones targetting at that user. If lasting a long time or unlimited, these entries would be nothing but a pure waste of server resources. There are likely two main reasons why you would like to have long time bans:
  • You really don't want to have a particular person being connected to your server
  • You believe you identified a nasty bot of some sort, either one that floods your server or one that is operated by evil agencies to threaten your users
Expect users to either give up reconnecting within days or weeks or expect them to be stubborn and skilled enough to quickly reconnect to your server anyway. For bots, especially from evil agencies, expect the latter to be even more true. They have thousands of distinct IP addresses or subnetworks to spend, may use random nicks and filesets to get back on your server. Measures for ordinary users include the use of proxy servers to connect from (nearly) arbitrary IP addresses. Opennap NG doesn't support any means to prevent this and won't do so in the future. The goal of Opennap NG development is to make it a powerful file sharing server, allowing as many users as possible to participate, and not being a powerful ban guardian. So the recommended way is to ban users again for some time if they behave nasty still after the first ban has expired. There are many automatic means to detect misbhevaiour of users and automatically ban them. In short: don't ban few users for a long period but rather ban many users (possibly including the same ones again) for shorter periods.

Q: How many entries can the banlist contain?
A: Other than by available RAM and users the size of the banlist is not restricted. While Slavanap reportedly develops some notable performance problems on banlists with more than 1000 entries, no such problems are known for Opennap NG. The server can easily maintain banlists of 10 000 entries and more without noteworthy reduction of performance. Memory consumption is negligible as well. The IBL facility of Opennap NG effeciently helps dealing with large numbers of banned users attempting to reconnect frequently. A rule of thumb is, that ibl_ttl should be set to at least your maximum number of ban entries divided by 5. For instance, if you have 10 000 entries in your banlists, ibl_ttl shouldn't be set to less than 2000.

Q: What contents should I care about?
A: FIXME!

Q: Can I (or others) see the values of server configuration variables at runtime?
A: Admins and elites can. Via the operserv config <varname> mechanism, using your client. You send a private message to pseudo-user "operserv", consisting of the keyword "config" and the name of the variable you want to get the value from. Userlevels below admin cannot query server configuration variables.

Q: How do I change configure settings at runtime?
A: Via the operserv config <varname> <value> mechanism, using your client. You send a private message to pseudo-user "operserv", consisting of the keyword "config", the name of the variable you want to change and the new value you want to assign to that variable. Please note that not all configuration variables of Opennap NG can be changed this way during runtime. Some require the server to be rehashed, a few ones can only be changed on a server restart.

Q: How do I change user levels?
A: This is a client-specific operation. For instance, in Lopster you use the command /level <nick> <level>. In TekNap the command is /setuserlevel <nick> <level>. Replace <nick> with the nick of the user whose level you want to change and <level> with the new user level. Please refer to the documentation of your client fore further info on this.

Q: How do I assign / take away Friends flags?
A: Via the operserv userflags <flags> mechanism. Replace <flags> with friend for assigning a friends flag to a user and none to take it away.

Q: What do the new user flags "leech" and "stingy" mean?
A: They are automatically assigned by the server to users if leech detection (notify_leeches) and crap sharer detection (notify_no_uploads) are enabled. They are non-persistent flags, i.e. they are cleared every time the user disconnects. A user is assigned the leech flag if he downloads much more files (16, 32 or 64 times, this configurable) than he uploads. The stingy flag is assigned to users who share very many files but don't have any uploads after quite some time. This usually means they either share crap no one is interested in (hence wasting server resources), or they have blocked all their uploads on purpose (hence being freeloaders). Only a small percentage of users nowadays still use clients that don't report their uploads properly, hence being listed as having no uploads despite they may be uploading, indeed. Most users being assigned one or both of these flags deserve closer examination by Mods+, if they intend to keep their server clean of rubbish and evildoers. Checking their filelists for crap and attempting a test download are proper measures.

Q: Why can I see more server messages than on other networks?
A: This is because of your high user level on your own server. Mods+ receive a number of server messages which ordinary users don't receive. Sorts of messages to be sent or suppressed can typically be configured in your client, or generally via the operserv usermode.

Q: Can I link my server to existing networks?
A: Not without their permission and access code. You need a mutual agreement with server owners of an existing network to be able to link to them, to help making their network even bigger. Usually you have to accept certain policy guidelines of existing networks to be allowed to link with them.

Q: How safe is it to run Opennap NG?
A: From the technical side, there are no major risks known. Opennap NG appears to be a solid server application. Despite many people having examined the source code meanwhile, no previous or current vulnerabilities are known by today. Nevertheless, on Unix system Opennap NG's default behaviour is to run as user nobody, if not configured otherwise. Neither on Unix nor on Windows Opennap NG requires root / Administrator privileges, neither for configuration nor operation. There are two possible causes for Opennap NG to bring your entire system down or even jeopardize the harddisk. (These are not specific to Opennap NG but can happen with many other applications as well.)
  1. the server being overloaded or deadlocked, utilizing all available CPU and, despite recommendation, running at high priority.
  2. the server consuming more memory than physical RAM is available. If virtual memory is still available this could result in permanent memory swapping, causing the system to virtually freeze and the harddisk to permanently trash (and eventually break if not stopped in time).

Q: What external connections does Opennap NG try to establish?
A: FIXME!
Q: What are the risks of running a public Opennap NG server?
A: See warnings for a detailed description of risks running an Opennap NG server. The main risk of running an Opennap NG server appear to be legal trouble nowadays. In some countries it may be prohibited to run this type of server at all, others may be disallowed to run a server by ISP contract. Even if neither of those are true for you, you still can get into trouble if users keep sharing significant amounts of illegal material on your server without you taking measures to suppress this.

Q: Does my server need to become publically known?
A: No. You can always run non-public or private servers. New servers are non-public by nature, until they are advertised at GotNap. GotNap advertising doesn't take place until you register at GotNap and configure your Opennap NG server properly to contact GotNap, using your personal GotNap account data. Unless a server has been advertised at GotNap you need to invite all users to connect to it manually, providing them with info about server address and connect port and possibly user account data as well. However, if you don't want your server to become publically known you should be very careful on selection of whom to invite. Keep in mind the risk of reckless or gawky users who may make your server public on their own by other means.

Q: What can I do to avoid dirty or unwanted content?
A: First you need to consider and define what "dirty or unwanted content" is for you. You need to determine filenames or common parts of filenames you don't want to be listed on your server. Then you need to translate descriptions of that into regular expressions. Those regular expressions are then put into the files opennap-block.txt or opennap-block-ban.txt. If they are correct, from next server restart or rehash on every filename that matches one of the patterns will be blocked, that bis not listed on searches or server browses.

Q: Are there bots available for Opennap NG servers?
A:  
Q: How do I create my own bot to be run on my Opennap NG server?
A: Bots in Oennap networks are created using the TekNap client. It features its own, powerful scripting language, enabling skilled programmers to realize almost all sorts of functionality for bots they desire. To create your own bot you should have good knowledge about both the client and its scripting language.


5. Technical background

Q: In what language is Opennap NG programmed?
A: Opennap started being programmed in plain ANSI C, hence being portable across very many platforms and compilers. Meanwhile, Opennap NG sources have been upgraded to new language standard ISO C99. The sources make frequent use of some of its language extensions like inline, new data types and library functions. This is for better performance, better source code readability and to get rid of security risks. For instance, new ISO C 99 functions like snprintf () (replacing old ANSI sprintf ()) are an important milestone to avoid common buffer overflow errors, which trouble many other software.

Q: What compiler is required to compile Opennap NG?
A: Opennap NG's current codebase is written in ISO C99. Unfortunately, most commercial C compilers do not (or not fully) support ISO C99 but rather define their own, proprietary and non-portable language extensions. GCC (GNU Compiler Collection) fully supports ISO C99. As it also makes some use of features unique to GCC, such as platform-dependent inline assembly, Opennap NG requires GCC as compiler. This is not a loss of platform portability, since GCC is free, open source and available for more different platforms and architectures than Opennap NG can dream of running on. Opennap NG currently requires at least version 3.0 of GCC. On 2.9.x and earlier versions it currently fails to compile due to a compiler bug.

Q: What about compiler warnings during compilation?
A: For compiling Opennap NG 0.60, GCC is configured to operate in very high warning level. It emits many new warning types which weren't emitted on earlier versions. There should mainly be two sorts of warnings left:
  • Warnings which end with "different width due to prototype"
  • Warnings that start with "#warning"
They're all harmless. The first one occurs when a function which expects a 16 bit argument is being called with a 32 bit argument. GCC automatically handles this the correct way but warns about this occurrence. GCC seems to ignore cast expressions, which are usually used to avoid warnings, in this case. The second sort of warning was placed on purpose into the code. They mainly denote portions which are or were to be examined and tested carefully. the don't denote erroneous code. If you experience large numbers of other warnings while compiling, please let us know. Newer GCC versions may introduce new warnings which weren't emitted on older versions. Note that possible warnings from the two modules md5 and regexp can't be corrected by us, as those are foreign code modules. Tampering with them is extremly dangerous as most changes almost certainly break something in them. They were simply written on a system with lower warning levels.

Q: Is Opennap NG for Windows a native app. or does it use Unix emulation stuff?
A: The offered Opennap NG binaries are created via MinGW, which is essentially a native GCC environment for Windows. While the build process itself takes place in an emulated Unix environment, the resulting binaries are native Windows applications with no need for further emulation layers or other inconvenient properties. It can be used to either create console applications (like Opennap NG) or native Windows GUI applications. Note that the GUI config tool for Opennap NG isn't quite a native Windows application, as it uses the portable GTK+ GUI instead of the non-portable Windows builtin GUI. Currently the only not 100%-standard dependancy of Opennap NG is libz, a compression code library. It's not present on all Windows versions by default. However, on Windows it's a native binary as well.

Q: I see some "unknown variable" errors in the server output after upgrading. Why?
A: Your config file apparently reflects the capabilities of an earlier Opennap NG version. See changed variables to learn what variables were removed from previous versions and why. It is recommended to let the GUI config tool update your existing config file. It is capable of reading older ones, as far as their contents are still part of Opennap NG, and create a new one, also with new, previously missing variables and comments added. Currently the Windows version also complains about 4 unknown variables which are Unix-specific and not available on Windows.

Q: What about native 64 bit versions of Opennap NG?
A: Opennap NG compiles on systems like i.e. AMD64 and starts. However, some instabilities were reported on 64 bit systems which have yet to be investigated. We don't know whether this is the result of a compiler bug that creates improper code portions or whether it is due to erroneous code in Opennap NG which is incompatible with 64 bit architecturesl. In standard compile mode, with all warnings enabled, GCC creates lots of new warnings when compiling for a 64 bit target which it doesn't when compiling for a traditional 32 bit target. They are all of sort "different width due to prototype".. It seems like GCC 3.x always creates warnings when functions are defined which use integers of non-native size (i.e. 16 bit on a 32 bit system and 32 bit on a 64 bit system), ignoring type casts in that case. However, the compiler still creates correct code on such occasions. Also regard that while a 64 bit binary is about 20% - 25% larger than a 32 bit binary and resource consumptions increases a bit as well, benefits are very limited.. Since Opennap NG doesn't use any 64 bit variables and there is no real need for them anyway, it wouldn't benefit from 64 bit mode in terms of speed. It's just accessing 32 bit variables in 64 bit mode rather than accessing 32 bit variables in 32 bit mode. Nevertheless, while you are free to create your own 64 bit binary of Opennap NG and test it (reports are appreciated), we currently do not offer any native 64 bit binaries, neither for Unix nor for Windows.

Q: What is the state of Opennap NG's memory management functions?
A: In version 0.60, Opennap NG contains no less than 6 distinct code variants for function sets like malloc(), free(), realloc(), etc. The three main variants are:
  1. the original memory management written by DrScholl, directly using system's native malloc(), free(), etc. functions, providing no memory stats.
  2. the MemInfo variant, an interim memory management, providing platform-independent memory stats and performance data, originally meant to be the main MM for 0.60
  3. the new JMM code (see next answer).
All these three MMs have two flavours: standard and debug code mode. In debug mode, several consistency check functions and message outputs are added, severely slowing down the server and increasing memory demands. So MM debug modes are obviously not meant for production severs but for developpers only. The default memory management in Opennap NG 0.60 is (as yet) MemInfo. To use the original code specify the --disable-meminfo switch when configuring the sources. While this saves overhead of a few percent of RAM you don't have extended memory stats and features like max_mem then. To use new JMM specify --enable-jmm when configuring the sources. JMM always includes memory stats. See next answer to learn about further benefits of JMM. Currently JMM is to be regarded experimental still, so there is no guarantee for its stability and platform-independence. However, tests so far are promising. If no further bugs emerge and good performance can be confirmed by a reasonable number of server owners then JMM will eventually become the default MM, possibly the only MM in one of the next Opennap NG versions.

Q: What is JMM (Jondo's Memory Management)
A: JMM is an alternate memory management system, a replacement for C library functions like malloc(), free() and others. It is optimized to address demands of applications like Opennap NG, which is to frequently allocate and free huge amounts of tiny memory chunks. Memory overhead of JMM is significantly lower than that of standard C library implementations. It is able to reduce Opennap NG's memory overhead by 70% - 80%, hence reducing the total RAM demands of a running Opennap NG process by up to 20%. JMM features its very own implementation of standard C library functions like malloc(), calloc(), free(), realloc() and strdup(). Compatibility at interface level is maintained, though. JMM doesn't use existing implementions of the system's C library (on Unix: not at all, on Windows: rarely). On Unix, JMM completely bypasses brk() and sbrk(), the standard (but inefficient) POSIX kernel means for address space calculation and RAM assignment for processes. Their main drawback is that, if not used in a strict LIFO order, they are unable to return any freed RAM to the system (until the process eventually terminates). This is unsuitable for many applications, very especially for Opennap NG. On POSIX systems JMM uses mmap() and munmap() only, as they are the lowest level memory management interface functions to the kernel. All higher level memory content organization is completely managed by JMM. The use of mmap() / munmap() instead of brk() / sbrk() at kernel level also allows JMM to return memory pages back to the OS. This is basically never the case with default memory management.

Q: I am a programmer, too. Can I join the development team?
A: Basically yes. Opennap development is and has ever been handed from one single or group of programmers to the next. As anyone of us may decide to retire from Opennap NG development any time in the future, new keen personel to keep server maintenance going is welcome. However, as the server code is currently undergoing some major changes by people already knowing quite well about its internals, you should wait for some weeks to start learning about Opennap NG internals and how to improve them.

Q: Can I reprogram or modify Opennap NG to better reflect my needs?
A: If you have sufficient programming skills: yes. Opennap NG is released under the GPL (GNU Public License) so you can change and mostly do with it what you want, and either republish it or keep the changes private for your own. If you developped some changes which might be of use for the public and are not conflicting with the non-features list we welcome you to contribute your changes to the official version.

Q: What protocol does Opennap NG use?
A: Opennap NG bases on the original Napster file sharing protocol. It features some own extensions to it and hence is referred to as the Opennap protocol. Slavanap adopted those extensions and supports them as well, as far as we know.

Q: What clients should be used for Opennap NG?
A: Any client for the original Napster protocol is basically usable. However, only few clients fully comply to the protocol. The majority of clients is either incomplete (regarding protocol compliance) or violates the protocol on purpose, to implement own, product-specific extensions. The three top recommended clients are: Lopster, Xnap and Teknap. See this extensive list of clients for further options.

Q: How does colour support in chats work?
A: At protocol level, colours are set by an ETX-character (Ascii code 3, also known as [CTRL]+[C] or ^C in short), followed by two Ascii digits, where the first is either "3", "4" or "5" and the second a number between "0" and "7". The first digit determines which flavour of color to set (background, normal foreground or bright foreground), the second determines the actual colour value. At client interface level it may already look quite different. For instance, in Lopster you colours are changed by typing a "%", followed by a letter. In TekNap full ANSI-complying Escape sequences have to be entered to to change colours, starting with [ESC]-[[] and going on with some weird codes and characters (up to 8 characters to specify an exact colour). The latter is the way how colours are set in terminals like Linux consoles, Telnet or SSH sessions or similar as well, btw.

Q: Does Opennap NG support encryption?
A: With one tiny exception: no. The whole protocol is plain-text based and all traffic between servers and clients, servers and servers and clients and clients is conducted unencrypted. This includes private chats! The only exception is user passwords. They are one-way-hashed immediately after reception (when users are being registered).

Q: Why is the server software so small?
A: Simply put: because it's written so well and doesn't carry any ballast not needed for operation. It's a native C application and, except for zlib, doesn't need more external software resources than any not too old operating system offers by default.

Q: What is IBL?
A: IBL stands for Internal Ban List and is a mechanism of Opennap NG to efficiently handle large numbers of frequently requested bans.

Q: What is the difference between IBL and usual bans?
A: FIXME! IBL entries contain IP address and expiration time only. IBL entries are created by the serverautomatically, not by Mods+ manually. Normal bans typically last for hours, days, weeks or even months. IBL entries typically last for minutes only.

Q: How can I compile Opennap NG on Windows to creaty my own binary?
A: Opennap NG currently requires the GCC (GNU Compiler Collection) version 3.x to be built. Other compilers or build environments are not suppported. This is because newer versions of Opennap NG are written in ISO C99, which most commercial compilers don't (or not fully) support. Our Windows binaries were built using the MinGW (Minimalist's GNU for Windows) environment, a free collection of capable compilers, assemblers, linkers, debuggers, build tools and shell tools for Windows. However, MinGW operates the Unix way, not the Windows way. It's fully text-terminal-controlled, there's no GUI or IDE at all. While this is the common and preferred way to build software on Unix, it's very uncommon for developers on Windows. Explanation about how to use MinGW and its shell, how GCC and the other tools are configured and invoked is far beyond the scope of this document. In short: MinGW works exactly the Unix way, which is "configure" and "make". You need to learn about standardized software building procedures of the Unix world (namely the autotools) to be able to create your own Windows binary of Opennap NG using MinGW.

Q: Are there any known major bugs left?
A: None which we are aware of at this time. No server vulnerabilities are known at this time nor have ever emerged before, In Unix environments the software has already proven to be able to run for a year and more without crashes. We expect the same to be possible on Windows since 0.49. Some minor bugs, i.e. regarding proper inter-channel server synchronization and dumps, are known and likely to be addressed soon. They're non-critical, however, and most server owners didn't realize them even after years of Opennap NG operation. Even more very minor bugs may lurk in the software, without anyone having noticed or reported it as yet.

Q: I have a feature request or an idea. What can I do?
A: Please contact us.

Q: I found a bug. What can I do?
A: Please contact us.

Q: How else can I contribute?
A: See the contact & request page for further offers we'd be glad about.