
	     arch: the World Wide Revision Control System


	NOTE (23-Jan-2003): I, Tom Lord, the author of arch, have been
        unemployed for a very long time now, and my sole
        proprietorship revenues, while non-0, have left me _far_ below
        the poverty line.  In the absense of any alternative, I funded
        much of the work to develop arch by cashing in all my
        retirement savings, selling the little bit of stock I owned,
        selling many possessions (I really miss my guitars and CDs),
        and racking up some _enormous_ credit card debts (some soon to
        be written off as bad debt!).  Why did I do those seemingly
        crazy things?  Partly out of necessity -- but partly also
        because I BELIEVE IN arch THAT MUCH AND YOU SHOULD TOO.

	So here's the deal:

	1) I'm grateful to receive "gifts" (which I treat as business 
           income) sent to my PayPal account "lord@emf.net".

	2) I'm very interested in any jobs that might be available
           in the S.F. Bay Area (especially Alameda, S.F., or
           work-at-home) for a really excellent C/Scheme/sh/awk/unix
           programmer.  No, I've never hacked linux device drivers,
           SQL, PHP, TCP/IP stacks, Java Beas, J2EE, or Visual Studio.
           Yes I do prefer opportunities to work on free software.

	3) "Practical Research" is what I do best.  I have a lot of
           projects in the fire, so to speak -- arch is just one.  If
           you have any good ideas about how to fund them, send me
           email.

	4) `arch' can (with a _little_ more development) save the
           industry millions in licensing fees for proprietary 
           revision control systems.  IBM, Red Hat, HP/C, United
           Linux members, Apple, potential business partners with
           capital: I'm talking to you!  Send me email.

	5) In general: I NEED MONEY (desperately) -- so if you can
           help, please get in touch.



	NOTE-2: This is a build/test release leading up to a proper
        release.  It is aimed _mostly_ at current arch users.  The
        documentation, especially, will be cleaned up before a 
        proper release.



arch is a revision control system with features that are ideal for
free software and open source projects characterized by widely
distributed development, concurrent support of multiple releases, and
substantial amounts of development on branches.  It is intended to
replace CVS and corrects many mis-features of that system.

Some quick highlights of the feature list are:

	+ distributed databases -- each hacker or group can host their
	  own branches.  There's a global (world wide) name-space for
	  lines of development and revisions.  Branches can be formed
	  from any repository to any other and merge operations can 
	  span repository boundaries without needing to actually
	  duplicate the full contents of a repository at each site.
	  
	+ fancy merging -- `arch' has support for various styles
	  of history-sensitive branch merging.  The way branches
	  and patch-sets interact with distributed repositories
	  makes it practical to distribute the responsibilities
	  for patch-review and merging.

	+ renames handled -- of course file and directory renames
	  are handled accurately.  So are symbolic links and file
	  permissions.

	+ unobtrusive operation -- `arch' is designed to stay out
	  your way while making changes and rearranging files.  It 
	  is designed to have a clean and self-documenting
	  command-line interface having the finest characteristics of
	  good Unix tools.

	+ revision library -- `arch' includes tools for building a 
	  space efficient library of all past revisions, represented
	  as ordinary file system trees.

	+ fast enough -- when configured correctly, `arch' is "fast
	enough" for most work.  (Alas, when configured poorly, it's
	very slow.)  Optimizing for speed has been a low priority for
        arch, but a few experiments have confirmed that we have lots
        of headroom available.


`arch' is, at its core, a collection of shell scripts and a tiny bit
of new C code.  It brings many classic shell-utils, FTP, diff, and
patch together and turns them into a distributed version control
system.  In spite of the simplicity, `arch' is not a toy: its quite
sophisticated and, in my opinion, elegant.  It captures the style of
diff/patch use that we used to use before remote-CVS took over the
world, fills in some gaps, and packages the whole deal behind a nice
(command line) user interface.  Competing RC systems are far more
complex than they need to be while still failing to provide some of
the nice features found only in `arch'.

Arch is currently distributed from:

	http://


* INSTALLATION INSTRUCTIONS

  For help installing arch, see "=INSTALL".  



* PORTABILITY NOTES

** SYSTEM SHELLS

  On Solaris, some report, "/bin/sh" doesn't understand shell
  expansions of the form:

	${var#prefix}

  On NetBSD, I've had a report that "/bin/sh" doesn't allow 
  symbolic signal names as the second argument to "trap".

  Both of those are deviations from the Posix standard for which there
  is no particular nice and/or particularly portable work-around.
  Therefore, you'll have to ask arch to use a different shell on such
  systems.  There are several free, portable Posix shells available.

  You can use a different shell by setting the configure option
  "posix-shell".  See:

	% src/configure --help

  and 

	% src/configure --help-options


** SORT

Some users report that textutils 2.0.11 is shipped with RedHat 7.2
and also (with the "-m" option) setfaults when given an empty file.
If you are using that version of sort, you will have to upgrade to a
more recent version.  Reports are that a new version is available
in:

	ftp.redhat.com/pub/redhat/linux/rawhide/i386/RedHat/RPMS/textutils-2.0.21-1.i386.rpm


** PATCH

Some users report that older versions of GNU patch do not understand
the "--posix" option, but that versions after 2.5.4 do.  Be sure that
your version of GNU patch supports that option.


** JOIN

Some users report that the version of `join' on MacOSX is not Posix
compliant because it does not understand the command line syntax `join
-o A,B'.  On systems where that is true, you should install a better
version of `join' (one is available in the GNU textutils).



Have fun,
Tom Lord

Report bugs, ask for help, offer money, or volunteer to help by
writing "lord@emf.net".




# "Hey, what's this thing?"
# 
# tag: Tom Lord Wed Jan  9 08:10:28 2002 (arch/=README)
#
