[IRCServices] Services 5.1pre0 released

Andrew Church achurch at achurch.org
Sun May 6 17:18:19 PDT 2007

     After close to three years of work, Services 5.1 has finally reached
beta status, and Services 5.1pre0 has now been released.  It can be
downloaded from the usual sites:

http://www.ircservices.za.net/download/testing/   (Japan)
ftp://ftp.esper.net/ircservices/testing/          (Western USA)

75e0b3c432239bd392fc3834cadc28b0  ircservices-5.1pre0.tar.gz
8e32697bee2282ce98dd14df6bbe2150  ircservices-5.1pre0-1.i386.rpm
2ba786a9bf6e175887a926d219286844  ircservices_5.1pre0-1_i386.deb

The mirrors should have it shortly.

     While not a stable release, I am announcing this version here (and
will announce future beta versions on this list as well) for two reasons.
One is that, while I am hesitant to label it "stable" before it has seen
widespread testing, the code itself is pretty solid, and should be usable
in production environments.  I will, of course, respond to bugs as quickly
as I can, but I'd like to recommend that those of you currently using 5.0
upgrade to 5.1 at your convenience, even before the stable release.  I will
also continue to support version 5.0 until 5.1 reaches stable status.

     The second, and more important, reason for posting the announcement
to this list is that I intend version 5.1 to be the last version of IRC
Services, at least under my care.  While I don't consider Services
"complete"--software development is a neverending task, and in any case
users' needs change over time--I do believe that it's time for me to move
on to other things.  In fact, I already devote a fair amount of my time
outside of work to other software development projects (such as the
audio/video tool "transcode", for those who are familiar with it), and I
have other hobbies which I haven't been able to pursue as much as I'd
like.  I've also found that I personally use IRC very infrequently these
days, and that has inevitably lessened my interest in continuing Services
development as well.

     I certainly don't believe that IRC itself is a dead or obsolete
protocol, and I've spent the better part of the past year writing a
detailed technical manual for Services, found in the "docs/tech" directory
of the distribution, so that other developers can pick up as easily as
possible where I'm leaving off.  Even after the release of 5.1.0, I will
continue to monitor the mailing lists and maintain Services 5.1 to the
extent of fixing bugs and making other reasonably small changes.  In terms
of major improvements and additions, however, 5.1.0 will be the "final
form" of Services for IRC Networks.

     For this reason, I'd like to encourage discussion of beta versions of
5.1 on this list, rather than on the coding list as has been done in the
past.  I'll continue to accept new feature suggestions until the release of
5.1.0, so if there is something you'd like to see added, feel free to bring
it up on this list.  (However, I will as always exercise my discretion in
choosing whether a suggested feature should be added, as described in FAQ
Z.5; I'm not going to bloat the program just because it's the last version.
The module system is available as always for third parties to add anything
I decide to leave out, and it has been improved for 5.1--in particular,
modules can now save data to persistent storage without any modification of
the core Services code.)

     In addition to feature suggestions, I'd also like to hear about
anything in the Services user interface that seems awkward or unintuitive,
whether new for 5.1 or present since previous versions.  After over ten
years of development, I know Services inside and out, so things that seem
obvious to me may not be so to newcomers.  If there are any questions you
frequently get from new users, that probably means something needs to be
changed, so let me know.

     Technical issues should be directed to the coding list, as always.  In
particular, if there are any issues with packaging Services for use with an
operating system distribution, I'd like to hear about them so that they can
be corrected.  (I personally use a home-built Linux system, and as such I
haven't kept close track of changes in how various OSes and distributions
arrange their filesystems.)

     I realize that this "end-of-life" announcement for Services may come
as a surprise to some, and for that I apologize.  As I mentioned earlier, I
will continue to support Services for some time to come (my current thought
is for two to three years after the release of 5.1.0); however, I did want
to provide advance warning of my future intentions.  Thank you all for your
support over the years.

  --Andrew Church
    achurch at achurch.org

What's New in version 5.1
Database handling, the one aspect of Services which has remained
essentially unchanged since version 1.0, has finally undergone a fairly
significant redesign.  Rather than using specialized data load and save
routines tailored for the core Services pseudoclients, Services now
implements a generic database table system, which has the dual benefits of
separating the data storage system from the rest of Services (allowing
alternative storage methods to be implemented easily) and allowing third-
party modules and extensions to create their own non-volatile databases
without resorting to custom load/save routines.  The default database file
format has also been changed to be more flexible and error-resilient than
the old format (which admittedly isn't saying much); see the "upgrading"
section of the manual for instructions on switching your databases to the
new format.

The often-criticized channel memo system has also been redesigned for this
version.  Instead of storing channel memos with the channel, memos are now
sent to the founder and all users on the channel with a particular access
level (by default level 100, or SOP level).  These memos are distinguished
from ordinary memos by text that says "(for #channel)" when reading the
memo.  As a result of this change, users will be notified about new channel
memos in the same way as ordinary user-to-user memos.

NOTICE: When loading databases from version 5.0 or earlier, all channel
        memos will be deleted.

Encryption support has also been improved.  Encryption is no longer an
all-or-nothing affair; the encryption method is stored with each password,
so that enabling or disabling encryption will have no effect on passwords
that were previously set.  The "encryption/unix-crypt" module has been
added, allowing the use of the Unix crypt() function to encrypt passwords.

The NickServ and ChanServ SENDPASS commands added in version 5.0 have been
removed in favor of the new NickServ REAUTH command.  This command
generates an authentication code which the user can use once to identify to
their nickname in place of the password, and then change the password as
needed.  Channel passwords can always be changed by the founder after
nickname identification, rendering ChanServ SENDPASS unnecessary.

Long LIST/VIEW responses are now handled more cleanly.  Except for NickServ
ACCESS LIST (since nickname access lists are generally short) and MemoServ
LIST (since memos are numbered), every list now includes an "end of list"
message indicating both the number of entries displayed and the total
number of entries in the list; the configuration directive ListMax,
replacing NSListMax and CSListMax, sets the maximum number of entries
displayed for any of these commands.  It is also possible to skip a certain
number of entries by adding a "+NNN" after the command, allowing all of the
entries in a long list to be viewed bit by bit.

At the development level, handling of module compilation has been improved,
allowing third-party modules to be simply "dropped in" without requiring
changes to Makefiles or other Services distribution files.  An extension
interface has been added to Services' multilingual support as well,
allowing modules to add their own language strings and load their own
language files.

Other changes:
  + Command aliases can now be added for NickServ, ChanServ, and MemoServ
        commands via the NSAlias, CSAlias, and MSAlias directives.
  + Notices are now sent to the user when sending of a mail authentication
        code message fails.  (However, errors after the message has been
        handed off to the mail server cannot be detected.)
  + A new configuration directive, RejectEmail, now allows selected E-mail
        addresses to be rejected by NickServ and ChanServ commands.
  + NickServ INFO will now indicate when a nickname's user is using a
        different linked nickname if the nickname group's PRIVATE option
        is not set.
  + NickServ now has a RESTOREMAIL command (in the nickserv/mail-auth
        module), which allows a user to restore their nickname's last
        authenticated E-mail address if, for example, SET EMAIL is used
        with an incorrect address.
  + NickServ SET/UNSET by Services administrators for others' nicknames is
        now done by putting a "!" before the nick to avoid ambiguity; for
        example, "SET !nick NOEXPIRE ON" instead of "SET nick NOEXPIRE ON".
  + ChanServ REGISTER and SET PASSWORD now check for and disallow easily
        guessable passwords.
  + ChanServ ACCESS now includes a LISTLEVEL subcommand to list access
        entries with a given level or within a given level range.
  + ChanServ AKICK and MemoServ IGNORE now support matching by IP address
        (on servers which support client IP address information).
  + ChanServ OP, VOICE, and similar commands can now be used with multiple
  + MemoServ now has a RENUMBER command to remove "holes" in the memo
        number sequence.
  + MemoServ FORWARD now sends all selected memos in a single E-mail
        message, rather than sending each memo in a separate message.
  + OperServ AKILL and related commands now have a CHECK subcommand which
        can be used to find all masks that match a given user/hostname.
  + SQlines are no longer applied to IRC operators during Services startup
        or netjoins if the IRC protocol in use supports sending user modes
        with the NICK message.  This includes the bahamut, hybrid,
        inspircd, monkey, ptlink, ratbox, solid-ircd, trircd, and unreal
        protocol modules.
  + The ignore system has been redesigned, and now keeps better track of
        how much load each user is putting on Services.  The ignorance
        threshold can be fine-tuned via the configuration file.
  + A new "unsorted list" mode has been added to improve Services'
        performance on large networks.  By giving the -no-sorted-list
        option to the configure script, Services will not try to keep
        nicknames and channels in alphabetical order; this means that
        commands such as NickServ LIST will no longer return nicknames in
        order, but Services will run significantly faster.
  + Support has been added for the InspIRCd, ircd-ratbox, and solid-ircd
        IRC servers.
  + Unreal's NICKCHARS protocol option, allowing non-ASCII characters in
        nicknames, is now supported.
  * ChanServ DROP now behaves like NickServ DROP: dropping a channel now
        requires the channel password to be entered with the DROP command,
        and DROPCHAN has been added as a separate command for Services
        administrators to drop arbitrary channels.
  * The ChanServ ACCESS, XOP, and AKICK commands no longer use entry
        numbers; the DEL and LIST subcommands now work with nicknames
        (hostmasks for the AKICK command) only.
  * The binary distributions (RPM and Debian packages) now install into
        /opt/ircservices and /var/opt/ircservices, rather than /usr/sbin
        and /usr/lib/ircservices.
  * Tab characters are no longer used (or allowed) in the source code.
  - The deprecated nickserv/oldlink module, which provided support for the
        format of the LINK command used in version 4 of Services, has been
  - Support for "modeless channels", with names of the form "+name", has
        been removed.  (Support for registering such channels was removed
        in version 5.0.0; this version removes the special handling for
        such channels in other parts of the program.)
  - Support for the "channel owner" mode present in the PTlink (+a),
        trircd (+u), and Unreal (+q) IRC servers has been removed, as there
        are too many differing opinions on its proper use.
  - Language support for Italian and Portuguese has been removed, due to
        the lack of volunteers to maintain them.
  - Support for old versions of GCC (anything before GCC 3.2) has been
Configuration file changes:
  + IncludeFile has been added to allow configuration directives to be
        split up into multiple files, and may be used in both
        ircservices.conf and modules.conf.
  + LoadLanguageText (ircservices.conf) has been added to allow replacement
        of Services text strings at runtime.
  + RejectEmail (ircservices.conf) has been added to allow rejection of
        selected E-mail addresses.
  + NSAlias (module nickserv/main), CSAlias (module chanserv/main), and
        MSAlias (module memoserv/main) have been added to allow creation of
        command aliases.
  + NSSetEmailDelay (module nickserv/main) has been added to enforce a
        delay between consecutive uses of the SET EMAIL command, thereby
        reducing the potential for sending mailbombs.
  + CSDefModeLock (module chanserv/main) has been added to allow the
        default mode lock for newly registered channels to be changed.
  + CSSkipModeRCheck (module chanserv/main) has been added to allow the
        check of a nickname's registration status at channel join time
        (used to kick unregistered nicknames from channels locked +R) to
        be skipped.
  + MSExpireDelay (module memoserv/main) has been added to allow memo
        expiration to be delayed until a certain time after the memo is
        first read.
  + MaxMessages (module mail/main) has been added to allow a limit to be
        placed on the total number of messages in transit.
  * ListMax (ircservices.conf) has been added in place of NSListMax and
        CSListMask to set a limit on the number of entries displayed for
        all LIST-like commands.
  * WallAdminPrivs (ircservices.conf) has been added in place of
        WallGetpass and WallSetpass to cause a WALLOPS/GLOBOPS to be sent
        on all NickServ and ChanServ commands that use Services
        administrator privileges.
  * The database name configuration directives (NickServDB, ChanServDB,
        etc.) have been moved from the various pseudoclient module sections
        to the database/version4 module section, and now explicitly specify
  - The nickserv/sendpass and chanserv/sendpass modules (and therefore
        their respective configuration sections) have been removed.
  - CSAutokickReason (module chanserv/main) has been removed, as the
        built-in reason prefix "AKICK by <nick>" makes it unnecessary.
  - MSExpireUnread (module memoserv/main) has been removed, since it
        results in silent data loss.
  - MSNotifyAll (module memoserv/main) has been removed, since it is
        required for channel memos.  MemoServ will now always behave as if
        MSNotifyAll was set.
  - MaxSockets (module mail/smtp) has been removed, since MaxMessages now
        performs the same function.