From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.6.10/8.6.6) id MAA22966 for caml-redistribution; Thu, 23 May 1996 12:04:33 +0200 Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.6.10/8.6.6) with ESMTP id TAA18843 for ; Wed, 22 May 1996 19:21:36 +0200 Received: from simon.cs.cornell.edu (SIMON.CS.CORNELL.EDU [128.84.154.10]) by concorde.inria.fr (8.7.1/8.7.1) with SMTP id TAA04013 for ; Wed, 22 May 1996 19:21:34 +0200 (MET DST) Received: from cloyd.cs.cornell.edu (CLOYD.CS.CORNELL.EDU [128.84.227.15]) by simon.cs.cornell.edu (8.6.10/R1.4) with ESMTP id MAA29666 for ; Wed, 22 May 1996 12:35:19 -0400 Received: from verdandi.cs.cornell.edu (VERDANDI.CS.CORNELL.EDU [128.84.254.202]) by cloyd.cs.cornell.edu (8.6.10/M1.8) with ESMTP id MAA20605 for ; Wed, 22 May 1996 12:35:17 -0400 Received: (hayden@localhost) by verdandi.cs.cornell.edu (8.6.10/C1.3) id MAA06194; Wed, 22 May 1996 12:35:14 -0400 Date: Wed, 22 May 1996 12:35:14 -0400 Message-Id: <199605221635.MAA06194@verdandi.cs.cornell.edu> From: Mark Hayden To: caml-list@pauillac.inria.fr Subject: Horus/ML, a distributed communication toolkit for Objective Caml Sender: weis It is my pleasure to announce Horus/ML (alpha1), a toolkit for building distributed applications in the Objective Caml programming language. Below, I briefly describe what Horus/ML is, what it does, and how to go about getting a copy. For more information about the Horus project at Cornell University, you can visit to the following URL: http://www.cs.cornell.edu/Info/Projects/HORUS/ There you'll find more information about Horus, papers on group communication, and pointers to other sites with related information. I particularly recommend the Scientific American and CACM articles at the main URL as general background for Horus. Note that the information is primarily about Horus/C which is very similar to, but not exactly the same as, Horus/ML (Horus/ML is a complete reimplementation in ML of Horus/C). Mark Hayden (hayden@cs.cornell.edu) What is Horus/ML? For the application builder, Horus/ML is a toolkit that can be used for quickly building complex distributed applications. For instance, through the Objective Caml marshaling facility, you can automatically pass (non-functional) data structures between applications. To use Horus/ML, an application installs 10 or so event handlers, and then Horus/ML transparently handles all the details of sending and receiving messages, transferring state, detecting failures, and managing reconfigurations in the system. For the distributed systems researcher, Horus/ML is a highly modular and reconfigurable toolkit. The high-level protocols provided to applications are really stacks of tiny protocol "layers". These protocol layers each implement several simple properties: they are composed to provide high-level properties, such as total ordering, virtual synchrony, etc.... Individual layers can be modified or rebuilt to experiment with new properties or change the performance characteristics of the system. This makes it a very flexible platform on which to do research. How can I see what it does? Horus/ML comes with several demonstration applications, including a collaborative white board. You can execute several instances of the white board and anything drawn on one gets replicated to the others. Each white board is assigned a color for its owner. When a new white board is added, it is assigned a color and the others automatically transfer their state to it. When a white board is killed, the others automatically reconfigure the system and reassign colors. Horus/ML, Caml/Tk, and the Web! We've interfaced Horus/ML with Caml/Tk, so you can access all the Tk GUI functionality. In addition, Horus/ML can be compiled with the MMM browser by Francois Rouaix. This can then support collaborative applets on the Web. The white board described above can be compiled both as a stand-alone executable and as an MMM applet. The MMM version is something we are still preparing to distribute and will be made available soon. What does Horus/ML do that protocols like TCP/IP don't? There is no answer to this question that is both short and complete. I'll give a short one here; for a longer answer you can go to the Horus URL given above. TCP/IP sockets are great for communication between pairs of processes. Horus/ML can be viewed as a generalization of TCP communication to groups (i.e., one or more) of processes. TCP provides FIFO communication on point-to-point channels; Horus/ML provides FIFO (and other more strongly ordered) channels between all members in a group. TCP alerts each endpoint when the other end has failed; Horus/ML also detects failures and alerts all members of them (and guarantees that they all see the same set of failures). Other issues arise when you have group of processes communicating instead of just pairs. Horus/ML provides solutions to many of these. For instance, network outages can cause groups to partition. Horus/ML detects these partitions *and* automatically heals them when communication is restored. Also, when the membership of a group changes it is often useful for the members to transfer state. Horus/ML provides protocols for coordinating this state transfer. What platforms does Horus/ML run on? Horus/ML has been compiled on Sunos4, Solaris, Linux, and RS6000-AIX (running on the SP2 supercomputer at Cornell!). The distribution is tested primarily on Sunos4, however, so other platforms may run into some hiccups. It has around 800 lines of C extensions to Objective Caml, which makes it very portable. What does it use for communication? Horus/ML uses UDP/IP sockets. It supports IP multicast, but does not require it. Supporting new communication transports is simple (the UDP transport is around 250 lines of ML). We plan soon to support Windows on PCs. Distributed communication in ML!?!? It must be slow.... Actually, it isn't. Using specially optimized protocols, Horus/ML can be around 10% slower than raw UDP socket communication. (The version distributed contains these protocols, but they are not used by default.) With these protocols in use, the performance of Horus/ML is comparable to other group communication systems written in C -- and faster than most. ML has helped us evolve the system so that in the normal case Horus/ML costs very little. If you are interested in Horus, you may wish to add yourself to the Horus mailing list in order to stay in touch with us. You can find out how to join the mailing list here: http://www.cs.cornell.edu/Info/Projects/HORUS/general/maillist.html GETTING HORUS/ML Horus/ML is available by ftp. However, there is a snag: it is securely encrypted, and you'll need to get the decryption key. If you are a research user (either an educational institution, or a research lab), you can fill out a non-disclosure agreement and send it to us: 1. Get agreement, ftp://ftp.cs.cornell.edu/pub/isis/horus/agreement.ps 2. Fill it out and send it to, Cindy Williams Department of Computer Science 4105B Upson Hall Cornell University Ithaca, NY 14853 Tel. (607) 255-9198 FAX. (607) 255-4428 If approved, she will send you the password. If you are not a research user (e.g., a commercial company or an individual user), then you will have to negotiate an agreement with Stratus, Inc., who owns the commercial license to Horus and Horus/ML. This may involve some money (but not necessarily). Please send e-mail to Brad Glade (glade@isis.stratus.com) for information. Once you have received the password, you can follow these instructions. FTP-ING HORUS/ML Horus/ML sources are available by ftp, but they are encrypted. After you have received a password for some distribution, you can pick it up. ftp ftp.cs.cornell.edu # login as anonymous binary cd pub/isis/horus dir You'll find one or more distributions under the name distr.[date] (e.g. distr.Apr11.96). Go to the most recent one. You'll find a collection of files under names that end in ".tar.gz.crypt". This means they are tar archives, compressed with gzip, and encrypted with crypt. For Horus/ML, you will want hml.tar.gz.crypt: get hml.tar.gz.crypt quit Now you decrypt, uncompress, and untar all this: crypt PASSWORD < hml.tar.gz.crypt | zcat | tar xvf - more hml/INSTALL # read this first If you don't have crypt, pick it up from: ftp://idea.sec.dsi.unimi.it/pub/crypt/code/crypt1.c Compile it as this: gcc -o crypt crypt1.c Let us know if you have trouble with any of this.