Why is it called Spread?
Ain't it a cool name!
What kind of support exists for Spread?
Several forms of support exist. This web site provides some documentation and answers. A mailing list spread-users exists where a good number of developers and users hang out. Finally, commercial support, consulting, and specialty development is available from Spread Concepts, LLC.
How is Spread licensed?
Spread is licensed under the Spread Open Source License. This license is SIMILAR BUT NOT IDENTICAL to the BSD license. Specifically, the license includes the requirement that all advertising materials (including web pages) mentioning software that uses Spread display a specific acknowledgement. Because of these differences, we highly recommend that you read it.
What ports can you run it on?
Any ports you want. Just change the ports in the configuration file spread.conf and restart the Spread daemons. We recommend using random high ports over 2000.
What about firewalls?
The ports you are using for Spread need to open on your firewall for udp packets, IF your Spread configuration includes machines both inside and outside your firewall. However, in many cases you will be running a set of Spread daemons for a particular purpose or application and they can all run within the same administrative domain and not need to cross any firewalls.
Does Spread need any special permissions?
No, Spread can run as any user on Unix or NT machines. It only needs acess to the /tmp/ directory under unix to create named pipes and the ability to bind to the ports you configure in the spread.conf file. We usually run Spread under a user called spread who has no other permissions.
When run under a root user, Spread puts itself in a chroot jail in /var/run/spread and switches user and group to user "spread" group "spread".
Does the configuration file have to be called spread.conf?
No, it can be called anything you want. By default Spread looks for a file called spread.conf in the directory it is run from and in the /etc/ directory, but by using the -c filename command line switch you can give it a config file called anything.
I added my network addresses to the sample.spread.conf file and the Spread daemon will not start. What's wrong?
Two likely causes exist. First, maybe there is a typo or other error in your spread.conf changes. Since Spread uses a fairly strict parser, any errors that are not in comment lines will cause the daemon to not start and will usually cause it print out an error message about the parsing
The second cause is that when you added your network configuration in a Spread_Segment section you left the sample 127.0.0.1 Spread_Segment (also called the localhost segment) in the file also. The sample localhost segment will ONLY if it is the only segment and all of the processes run on the same machine. It is meant to provide a basic working configuration out of the box, even if you only have one machine. However, it cannot be used once you configure a real network segment. So just delete it or comment it out and that should fix the problem.
What programming languages does Spread support?
Spread has native API's for C (which can be used in C++) and Java. These are both included in the source and binary distributions. An interface for Spread in Perl has been written which is also included in the main distribution. A Ruby interface that wraps the C library is also available.
A python module that interfaces to Spread is developed by some Python.org people and is available from their site.
Do I get a membership message when I leave a group?
Yes and No. You will get what is commonly called a "self-leave" message telling you that you are no longer part of the group. This is technically NOT a membership message as it does not tell you the membership of any group, rather it is a notification message to tell you that your leave has completed. However, since it is tagged as a MEMBERSHIP_MESS, some people still think of it as a membership message. The self-leave will not tell you anything about who is left in the group. It can be identified because it is a message whose service_type field will be set to CAUSED_BY_LEAVE and REG_MEMB_MESS will NOT be set.
How big a message can I send to Spread?
Spread currently supports application messages upto around 100Kbytes. Currently the exact size is not exported as part of the API.
What characters can I use in Group names?
A group name in Spread consists of up to 32 letters, numbers and punctuation (limited to -/_. and \ ). Specifically the symbol # is reserved as an identifier of private group names which are created for each individual connection to a Spread daemon.
How large can private user names be?
A private name (used to identify the entity connecting to the Spread daemon in the SP_connect call) can be upto MAX_PRIVATE_NAME charcters long. This is currently set to 10. The private group name which is formed using this private user name is 32 characters long at most. The private group name consists of "#private user name#daemon name", where the # character separates the two components of the group name.
What are private group names and what are they good for?
Private group names uniquely identify each connection to a Spread daemon and act as that connection's name. Any other Spread application can send a unicast message to the application listening on that connection by sending a standard SP_multicast() message to the private group name. This provides a ready-made point-to-point message service as well as a multicast service to groups. Spread inforces that no-one else can ever join a connection's private group.
Is there any documentation?
Not as much as there should be. You can find almost fairly complete documentation of the API functions at here. A book tentatively titled A Users Guide to Spread is in progress and the current version can be found here. For more in depth documentation of the services and models supported by Spread we recommend you take a look at some of the papers and tech reports on our research web site They have some information about the protocols implemented in Spread. The documentation will probably improve as more outside people work on it.
How can I get involved?
The best way is to join the spread-users mailing list and talk about what you are interested in. You can also contact the Spread developers at firstname.lastname@example.org. Overall information about Spread development can be found on the development page. If you want to submit any substantial code patches for inclusion in our main Spread distribution, we ask that you attach an explicit license to your patch so our legal rights to include it are not at risk. The license can be found on the development page. This is only needed for patches you would like to contribute to the project and have included in the official tree. Under the Spread Open Source license anyone is allowed to make modifications and redistribute them. Contact us at email@example.com for more information.
How do I port Spread to a new platform?
Spread now uses autoconf for Unix-type operating systems so in most cases porting is as simple as:
./configure make make install
However, occasionally something needs to be tweaked, or you are porting to some OS that doesn't look like Unix and isn't supported well by autoconf. In that case take a look at the file called PORTING in the source distribution. The arch.h file contains all of the portability constructs used by Spread, and has the complete example of the Win32 port.