summaryrefslogtreecommitdiff
path: root/doc/web/compared.html
blob: 94aa1bfd85b67f69a12381334c72171096cd6021 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
                      "http://www.w3.org/TR/REC-html40/loose.dtd">
<!-- This document was created with Latte version 2.1 -->
<!-- For information on Latte, see http://www.latte.org/ -->
<html>
<head><meta name="generator" content="Latte 2.1"><title>distcc compared to other systems</title>
    <meta name="author" content="Martin Pool">
    <meta name="keywords" content="distributed, make, build, gcc,
               parallel, network, networked, faster, free, fast, paralel, cc, c,
               C++, Objective C, ObjC, compile, compiler, compilation,
               simple, GPL, GNU, Linux, BSD, Unix, software, development,
               developer, TeamBuilder, quick, dmake, pvmake,
               transparent, easy, workstations, Solaris, IncrediBuild,
               productivity, speed, time, tool, performance, hardware,
               agents, nfs, libraries, source, headers, workload,
               buildfarm, farm, server, cluster, clustered, clustering, MOSIX, OpenMOSIX">
    <link rel="SHORTCUT ICON" href="favicon.ico">
    <link type="text/css" rel="stylesheet" href="distcc-green.css">
    <link type="text/html" rel="top" href="index.html">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
   <body vlink="#003300" text="#000000" link="#003300" bgcolor="#ffffff" alink="#336633"><p><table width="100%"><tr><td valign="top"><div class="navbar"><ul><li><a href="index.html"><b>distcc</b></a></li>
          <li><a href="http://code.google.com/p/distcc/source/browse/trunk">source</a>
          <li><a href="http://code.google.com/p/distcc/downloads/list">binaries</a></li>
          <li><a href="http://distcc.googlecode.com/svn/trunk/NEWS">news</a></li>
          <li><a href="scenarios.html">scenarios</a></li>
	  <li><a href="results.html">testimonials</a></li>
	  <li><a href="http://code.google.com/p/distcc/issues/list">report a bug</a></li>
	  <li><a href="faq.html">FAQ</a></li>
	  <li><a href="security.html">security</a></li>
	  <li><a href="distcc-lca-2004.html">whitepaper</a></li>
          <li><a href="https://lists.samba.org/mailman/listinfo/distcc">mailing list</a>
           <ul><li><a href="mailto:distcc@lists.samba.org">post</a></li>
            <li><a href="http://lists.samba.org/archive/distcc/">archive</a></li>
            <li><a href="news://news.gmane.org/gmane.comp.compilers.distcc">newsgroup</a></li></ul>
	  </li>
          <li><a href="http://freshmeat.net/projects/distcc">Freshmeat</a>
            <ul><li><a href="http://freshmeat.net/subscribe/28140">be notified</a></li></ul>
	  </li>

	  <p>
	  <li>related:</li>
	  <ul>
	      <li><a title="How to use distcc and Gentoo" href="http://www.gentoo.org/doc/en/distcc.xml">Gentoo</a></li>
	      <li><a title="Script to ease building cross-compilers and toolchains" href="http://kegel.com/crosstool/">crosstool</a></li>
	      <li><a title="Cache compiler results" href="http://ccache.samba.org/">ccache</a></li>
	      <li><a title="Centralized control over distcc and ccache" href="http://ccontrol.ozlabs.org/">ccontrol</a></li>
	      <li><a title="Smart job scheduler" href="http://dmucs.sourceforge.net/">dmucs</a></li>
	  </ul>
       <p><p></td>                                      <td valign="top"><div class="body"><h1 class="title">distcc compared to other systems</h1>

<p><h2><a name="summary" href="#summary">Summary</a></h2>

  <p>The main advantages of distcc compared to other tools are:

  <p><ul><li>distcc is free software under the GNU GPL.</li>

   <p><li>distcc is simple to install and configure.</li>

   <p><li>distcc can be installed by a non-root user, without requiring
        a kernel patch or any change to installed software or
        filesystems.</li>

   <p><li>distcc has very little impact on machines helping with the
        build.</li>

   <p><li>distcc doesn't require a shared filesystem.</li>

   <p><li>distcc can optionally use strongly encrypted and authenticated ssh
        channels for communication.  In this mode  it is
        <a href="security.html">safe</a> to use on untrusted networks.</li>

   <p><li>distcc can use machines with different processor architectures
        (i386, ppc, ...) or operating systems (Cygwin, Linux, BSD), if
        appropriate cross-compilers are installed.  distcc runs on
        <a href="binaries.html">many operating systems and architectures</a>.</li>

   <p><li>distcc works reasonably even over wireless networks, when the
        LZO compression option is turned on.</li></ul>

  <p>The disadvantages of distcc are:

  <p><ul><li>distcc requires that the same compiler version be installed on all
        participating machines.  (Every other distributed build system
        requires this too.)</li>

   <p><li>Only C/C++/ObjC/ObjC++ compilation can be distributed, not
        linking or other tasks.  (Some clustering systems can
        distribute any task.)</li>

   <p><li>distcc comes with no warranty (as does most software), though
        it has been successfully used by many people for many
        years.</li></ul>


  <p><h2><a name="openmosix" href="#openmosix">OpenMOSIX</a></h2>

  <p><a href="http://www.openmosix.org/">OpenMOSIX</a> is a kernel-level
  single-image clustering system for Linux.  It can be used to spread
  software builds or any other parallel task across multiple machines.

  <p>OpenMOSIX requires a kernel patch.  All the machines must be of the
  same architecture and running similar kernels.

  <p>MOSIX and OpenMOSIX give you essentially a "single system image"
  cluster, which looks like a fast computer.  distcc just looks like a
  fast compiler.

  <p>Some people have reported that distcc is much faster than OpenMOSIX
  for software builds in some situations.  Short-lived, CPU-intensive
  compiler processes may be a very difficult load for a design based
  on process migration.

  <p>Other differences:

  <p><ul><li>You don't need root to install distcc</li>
   <li>Installing distcc doesn't require a kernel patch or reboot;
   presumably it can't destabilize anything else on the machine.</li>
   <li>distcc copes reasonably gracefully if a machine goes away
    abruptly or the network goes down; it will just keep compiling
    locally.</li>
   <li>distcc works (at least in theory) on any POSIX-like operating
    system, not just Linux, and on any processor.  It has been
    reported to work on Linux, FreeBSD, HP-UX, Solaris, AIX and Cygwin,
    and you can spread load across machines using different systems.
    OpenMOSIX works only on Linux, and (perhaps?) only on x86 and IA-64.</li>
   <li>distcc volunteers can have different processor architectures
    or even operating systems to the machines they're serving.  (You
    do need to install a cross compiler though.)</li>
   <li>distcc is only about 13000 lines of C, so you may find it
    easier to hack or patch.</li></ul>

   <p>Barnowl writes:

   <p><blockquote>Currently openMosix (oM) only runs on Linux and
currently only on x86 and IA64 arch.  distcc works like a champ when
used combined with oM. While oM does help some with short run jobs,
its forte is big computation jobs so it works better for things like
video edits or DNA decoding. If you just want to speed up C compiles
with out a lot of work or custom kernels distcc is the way to go.</blockquote>




  <p><h2><a name="cook" href="#cook">Cook</a></h2>

  <p><a href="http://www.canb.auug.org.au/~millerp/cook/cook.html">Cook</a>
   is a Make replacement written by Peter Miller and distributed under
   the GNU GPL.  Cook can do parallel builds and has built-in support
   for distributing builds across machines on a LAN.

   <p>Using Cook requires you to convert your Makefiles to a <q>cookbook</q>,
   though there is a <q>make2cook</q> program to help with this.

   <p>Cook runs commands over <tt>rsh</tt> by default, but it seems like you
   could use <tt>ssh</tt> instead.  Cook uses <tt>rup</tt> to calculate load
   on different machines.

   <p>It seems like Cook requires a shared filesystem and the same tools
   on all machines.  There is a mechanism to group machines into
   classes and run particular commands on particular classes of
   machine.


  <p><h2><a name="pvmgmake" href="#pvmgmake">pvmgmake</a></h2>

  <p><a href="http://pvmgmake.sourceforge.net/">pvmgmake</a> is a fork of
  GNU Make which can spread tasks across multiple machines using the
  PVM protocol.

  <p>pvmgmake requires that all the machines see the same filesystem, and
  have the same tools installed.


  <p><h2><a name="xcode" href="#xcode">XCode</a></h2>

  <p>Apple <a href="http://developer.apple.com/documentation/DeveloperTools/Conceptual/Build_System/Dist_Builds/distributed_builds.html">XCode Distributed Build</a> is based on distcc.

  <p>Apple add patches for Rendezvous-based discovery of servers and
  transport of precompiled headers.  These features may come back into
  the mainstream distribution in the future.  Apple also add GUI to
  configure distcc, and support for some Apple-specific gcc features.

  <p>Apple's tools only work on Mac OS X.

  <p>The Apple version at the moment does not seem to support LZO or SSH.</div></td>
</tr></table>
    <div class="thanks">Copyright &copy; 2002&ndash;2004 Martin Pool.
     distcc is a trademark of Martin Pool.

     <p>Send comments to <tt>distcc(at)lists.samba.org</tt>,
     or talk to us on <tt>#distcc</tt> on <a href="http://oftc.net/">irc.oftc.net</a>.</div></body>
</html>