Spread 3.17.0  http://www.spread.org

Spread Concepts LLC and Johns Hopkins Center for Networking and Distributed
System are happy to announce the release of a new stable version, 3.17.0, 
of the Spread toolkit. 

This release includes new features, substantial build improvements and
some bugfixes that break backwards compatibility. This break with
backwards compatibility and the new features are the reason for the 
increase in minor version number.

Spread is a toolkit that provides a high performance messaging service 
that is resilient to faults across external or internal networks. Spread 
functions as a unified message bus for distributed applications, and 
provides highly tuned application-level multicast and group communication 
support. Spread services range from reliable message passing to fully 
ordered messages with delivery guarantees, even in case of computer 
failures and network partitions.

Spread is designed to encapsulate the challenging aspects of asynchronous 
networks and enable the construction of scalable distributed applications, 
allowing application builders to focus on the differentiating components 
of their application.

Note, that the library name change from libsp to libspread requires any 
application using Spread to change how they link. Some new functions
were also added to the C API to provide access to certain membership
fields, these functions replace the hardcoded byte offsets that were
prevously documented and should be used instead of those fixed offsets
in all applications.

The new features are:
1) Enhance the group membership algorithm so very large groups and very 
   large numbers of groups will be merged correctly during a membership. 
   With this change Spread should correctly handle groups with thousands
   of members and thousands of groups. This also includes the optimization 
   of sending groups messages as FIFO and AGREED instead of SAFE.
   Thanks to Ryan Caudy from Hopkins for doing this work.

2) Revamped build setup using autoconf instead of manual Makefiles. Thanks
   to Theo Schlossnagle for writing this and updating it. Some small changes
   were made to Theo's 3.16.2 patch to incorporate it.

3) Applied Daniel Rall's SO_REUSEADDR patch. This adds a new configuration
   option SocketPortReuse that can either force SO_REUSEADDR on or off
   for TCP server sockets, or set it to an auto mode that uses REUSEADDR
   if specific interfaces are specified in the spread.conf file and
   does not use it if the default of INADDR_ANY is used. If you force
   this on, be aware that it can open up a security risk where other
   processes can steal Spread's traffic.

4) Changed library name from libsp to libspread. This is both more descriptive
   and should fix the problem with library clashes with other libsp's.

5) Applied Daniel Rall's patch to make the spread execution directory and
   the user and group it runs as configurable at runtime.

Bugfixes: 
6) Fix GGT bug where Spread gets stuck or crashes if you reach GGT state.
   This bug was introduced when Spread 3.x adopted the research version of
   the session layer.

7) Make sure service_type is set to 0 before using it in SP_receive calls 
   in sample programs (spuser, spflooder, simple_user).

8) Fix Mem_Alloc blocks so they can be freed without assertion failure.

9) Fix hanging bug where token rotates, but ARU is stuck.

Documentation:
10) Split the growing changelog at the beginning of Readme.txt into a 
    separate file.

11) Updates to man pages. Clarify service_type handling. Add info on accessor
    functions for membership message body.

With the Spread Open Source License, the toolkit may be freely 
used under some conditions.  For example, the license includes the 
requirement that all advertising materials (including web pages) 
mentioning software that uses Spread display a specific acknowledgement. 
Please review the license agreement for more details.
http://www.spread.org/license/

Other commercial licenses or other licensing arrangements are available. 
Please contact michal@spreadconcepts.com. We are looking for partners 
interested in using group communication and/or replication to solve 
demanding, real-world problems.

