Frequently Asked Questions About Spread
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.
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.
Configuration and Setup Questions
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"
Does the configuration file have to be called
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.
Application Development Questions
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
A python module that interfaces to Spread is developed by some Python.org people
and is available from
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
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
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
Spread Daemon and Library Development Questions
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
Overall information about Spread development can be found on the
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
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:
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.