# [FAQ] MOO-Cows FAQ

Ken Fox (fox@phobos.mars.org)
Thu, 27 Feb 1997 18:22:00 PST

- Messages sorted by:[ date ][ thread ][ subject ][ author ]

    It's been quite a while since a post (or update) of this, so here it
    is.  Some of the resources have been removed because they no longer
    worked and I was unable to find a working replacement.  I'm looking
    for a MOO-Cows archive available on the web.

    A few questions relating to really old items were removed.

    ---

      MOO-Cows FAQ
      Ken Fox
      Last updated Thursday, February 27, 1997

      The "MOO Frequently Asked Question List" is maintained by Ken Fox
      (fox@ccs.neu.edu).  Direct all questions or comments concerning this
      FAQ to him.  Submissions and questions are welcome and appreciated.
      Ken Fox makes no warranty regarding the fitness of any of the informa-
      tion in this FAQ.
      ______________________________________________________________________

      Table of Contents:

      1.	Server Related

      1.1.	Who invented MOO?

      1.2.	What are the minimum requirements for running a MOO?

      1.3.	Location of LambdaMOO server source.

      1.4.	Location of core databases.

      1.5.	Non-UNIX MOO ports.

      1.6.	What kind of security risk is running a MOO server?

      1.7.	When is the next release due out?

      1.8.	Is disk based MOO going to be part of the next release?

      1.9.	Why won't my MOO send email with new character's passwords?

      1.10.	How does the MOO pick a verb to run when someone types a
      command?

      2.	Database and Programming

      2.1.	Where can I get the Programmer's Manual?

      2.2.	Is there a way to incorporate new features of LambdaCore into
      my MOO's DB?

      2.3.	Objects like $room and $player are part of the `core' of the
      MOO. How do I add new ones?

      2.4.	$spell is HUGE.  How can I recycle it without running out of
      ticks or seconds?

      2.5.	How do I do execute a verb automatically each time the server
      starts?

      2.6.	How can I make an object in a room "listen" to everything
      that's being said?

      2.7.	My MOO checkpoints every hour. I want to change this but I
      don't know where to look.

      3.	Miscellaneous

      3.1.	Where can I find the answer to...

      3.2.	I'm new to UNIX, and I need to ..

      3.3.	I want to port something from one MOO to another.  Who do I
      ask for permission?
      3.4.	What are some good clients to use with MOO?

      3.5.	How do I change my MOO password?  I've forgotten or lost the
      password to #2!  How do I log into my MOO?

      3.6.	Is anybody else (besides Pavel) developing a public server
      that runs MOO dbs?

      3.7.	How do I subscribe to/unsubscribe from this list?

      3.8.	How can I obtain additional copies of this list?

      4.	Other Resources

      4.1.	Information

      4.2.	Archives
      ______________________________________________________________________

      1.  Server Related

      1.1.	Who invented MOO?

      Stephen White (ghond) wrote the first MOO server.  Pavel Curtis took
      the basic design, language, and code, fixed bugs and added features to
      release the first LambdaMOO version.	He maintained the server for
      several years.  The MOO server is currently maintained by Erik Ostrom
      (eostrom@research.att.com).

      1.2.	What are the minimum requirements for running a MOO?

      The LambdaCore database is approximately 2 megabytes in size. The
      source and executable for MOO will likely occupy another 1-2 Megs. In
      its current state, MOO resides entirely in resident memory when
      running. The process size is going to be roughly 2-3 times the size of
      the database file on disk. Your mileage will vary from system to
      system.

      1.3.	Location of LambdaMOO server source.

      The standard MOO archive is Xerox PARC's FTP site
      <ftp://parcftp.xerox.com/pub/MOO>.

      The file `LambdaMOO-X.Y.Z.tar.Z' (for a current server version of
      X.Y.Z) is a compressed tar file containing the complete source code,
      installation instructions, and a copy of the `Minimal' LambdaMOO
      database.

      The `binaries' subdirectory contains already-compiled executables of
      the current release for various machines.

      MOO has been compiled and run successfully on several different
      operating systems including AIX, BSD UNIX, SunOS 4.x, Linux, Sys V R4,
      Ultrix, OSF, FreeBSD386, Solaris, and NeXT.  Major MOOs are currently
      running on almost all of them.

      In addition to the server, you will need a core database.  A core
      database provides functionality augmenting that of the server.  Every
      MOO needs to start from some kind of core database.
      1.4.	Location of core databases.

      Until recently, the only core database available was LambdaCore.
      LambdaCore is still what most people use.  You can get it from the
      same directory that the MOO source is available in.

      The file `LambdaCore-DDMMMYY.db' (for some date DDMMMYY) is a
      LambdaMOO database file containing the `core' of the running LambdaMOO
      database as of the specified date.  This is almost certainly the
      easiest place for you to start from in creating your own MOO, since
      this includes such useful things as the various generics (room,
      player, exit, thing, container, note, etc.), the MOO text editors, the
      MOO mail system, etc.

      Core databases available:

         LambdaCore
    	The original.  Retrieve it from
    	ftp://parcftp.xerox.com/MOO/LambdaCore-latest.db.  To contact
    	the maintainers, send mail to *core-db-issues (if you have a
    	character) or *wizard-list (as a guest) on LambdaMOO
    	(lambda.xerox.com 8888).

         JHCore
    	A LambdaCore based db that adds significant enhancements.  It
    	features a hypertext help system, administration groups, MCP
    	fancy client support, enhanced English presentation tools, and
    	lots of other features.	See Why JHCore
    	<http://jhm.ccs.neu.edu:7043/note/name!why-jhcore> for more
    	information about the enhancements.  JHCore is available from
    	JHM's FTP site
    	<ftp://ftp.ccs.neu.edu/pub/mud/muds/jhm/database>.  Connect to
    	JHM <telnet://jhm.ccs.neu.edu:1709/> and send mail to *jhcore.

      1.5.	Non-UNIX MOO ports.

      There are some non-UNIX ports of MOO, including ports to MacOS and
      Win32 (Win95/WinNT).	See the resources section for the latest list.

      1.6.	What kind of security risk is running a MOO server?

      (Most of the facts for the below answer come from thread on MOO-Cows
      about this subject.  Most of the text, too.  Thanks to Jay Carlson
      (nop@nop.com) and Ian Macintosh (siman@ihug.co.nz).)

      Disclaimer: Everything said here is an identification of a risk I am
      aware of.  I am not a security expert.  There may be other risks or
      the risks I mention below may be of other forms.  As with any other
      answer in this FAQ, I would welcome submissions on this subject.

      One of the first things to keep in mind with computer security is
      ``what are we trying to protect from whom?''.	The threat that the
      unmodified MOO server poses to the server machine is limited to denial
      of service attacks.  A MOO programmer could use all the memory, CPU,
      or disk on the partition that MOO is dumping to.  The server itself
      provides no access to the filesystem (though there are patches that
      do) or other operating system services.

      If you have OUTBOUND_NETWORK turned on, there are a few threats to
      machines on your local net if they use some sort of ill-configured IP-
      address-based trust mechanism.  Very few sites will care about this,
      because everyone knows that address-based trust is a really bad idea
      these days.  Your network admins will know if they have such an
      assumption built into your network, and can remedy this by taking your
      server machine out of the trust list.	(BTW, now that MOO can speak
      binary data, the number of services you could potentially attack
      through it has increased.  I still do not think it is a problem unless
      you use, say, address-based authentication for X, aka xhost.)

      If you have OUTBOUND_NETWORK turned on, your machine could be a threat
      to the Internet as a whole by laundering connections---an attacker
      connects to your server, and then connects through it to the machine
      they're really after, to make tracing their connections more
      difficult.  The chance of this is vanishingly small; there are far
      more convenient anonymous sites out there that are perfectly able to
      launder connections for the cracker community.

      By running any sort of visible and popular network service, you become
      more of a target for conventional cracking attacks.  This risk is not
      exclusive to MOO; hosting a popular web page will make it more
      attractive for people to attack you.	Depending on your level of
      visibility, you may want to tighten up general security on your
      machine or site.

      Some organizations have other concerns.  A MOO server may allow
      organizational mapping, or accidental disclosure of proprietary
      information, or whatever.  If you're a company that has issues like
      this, you already understand these things or have people at your site
      that do.  Go talk to them.  Feel free to ask them how the MOO server
      is more dangerous than existing communications mechanisms such as
      email.

      1.7.	When is the next release due out?

      It is unpredictable when each new version of the server will be
      released. The latest version of the server is 1.8.0p5.  This is the
      last release by Pavel.

      1.8.0p5 <ftp://ftp.parc.xerox.com/pub/MOO/LambdaMOO-1.8.0p5.tar.Z> is
      available on the Parc FTP Site.

      1.8.	Is disk based MOO going to be part of the next release?

      No.  No disk based version of MOO is planned.

      1.9.	Why won't my MOO send email with new character's passwords?

      Using outbound mail requires that the moo be able to open up network
      connections.	This is a compile time option in the options.h file.
      There is a line that looks like this:

        /* #define OUTBOUND_NETWORK */

      /* and */ are C comment markers so define is commented out.  If the
      MOO server is compiled without OUTBOUND_NETWORK being defined, then
      calls to open_network_connection() will fail with E_PERM.  Since
      outbound mail depends on open_network_connection(), outbound mail
      doesn't work without OUTBOUND_NETWORK.

      To enable outbound network connections, recompile the MOO server after
      editing options.h so it includes the line:

        #define OUTBOUND_NETWORK

      See also help open_network_connection() in LambdaCore for more
      information on open_network_connection and the README file in the MOO
      distribution for more info on compiling the MOO.  It is a good idea to
      look over options.h as there are several important options set there.

      Andy Bakun (abakun@rci.ripco.com)

      1.10.	How does the MOO pick a verb to run when someone types a com-
      mand?

      The first thing the MOO does is look for a verb named #0:do_command.
      If it finds that, it runs it with argstr set to whatever was typed on
      the command line and the arguments the words on the command line.  For
      example, if a player typing "foo bar baz" would result in a verb call
      #0:do_command(``foo'', ``bar'', ``baz'') and argstr would be set to
      ``foo bar baz''.

      If this verb returns true, the the parser stops there and assumes
      #0:do_command handled the command.  If it returns false, then the
      parser uses the built in parser on the command.

      The command parser splits the command up into verb dobj prep iobj and
      looks for verbs on the player, the room (player's location), dobj, and
      iobj (in that order).	If it finds no matches, it calls room:huh.
      Most available MOO cores do specialized extended parsing and matching
      in room:huh.

      For a more detailed explanation of command parsing, see the LambdaMOO
      Programmer's Manual section titled ``Command Parsing''.  Note that the
      section is several revisions out of date, but the new behavior
      (searching for and calling #0:do_command) is documented above.

      2.  Database and Programming

      2.1.	Where can I get the Programmer's Manual?

      The LambdaMOO Programmer's Manual is a complete reference for all
      database-independent aspects of the LambdaMOO system, including the
      programming language, built-in functions, and command parser.

      The Programmer's Manual is available on PARC's FTP server
      <ftp://parcftp.xerox.com/pub/MOO> The file name is
      `ProgrammersManual.*' where `*' is the format tag.  It is available in
      DVI, PostScript, TeXInfo, and plain text formats.

      2.2.	Is there a way to incorporate new features of LambdaCore into my
      MOO's DB?

      There is no easy way to merge databases. The easiest thing to do is
      just snag the code from LambdaMOO or somewhere and build/rebuild the
      objects by hand. (For information on how to do so, see `help @dump' on
      LambdaMOO.)

      2.3.	Objects like $room and $player are part of the `core' of the
      MOO. How do I add new ones?

      As documented in the LambdaMOO Programmer's Manual, `$' object
      references such as `$player' are created by adding a property of that
      name to the system object (#0) and storing the appropriate object's
      number in that property. For example, referencing $room is the same as
      referencing #0.room.	When the verb `make_core_database' is run, it
      searches the system object for these links in order to determine which
      objects belong in the core. Newer releases of the LambdaMOO core
      include the wizard verb `@corify' which will add the specified object
      to the core in the manner illustrated	as well as checking additional
      features such as an `init_for_core' verb being programmed on the
      object.

      2.4.	$spell is HUGE.	How can I recycle it without running out of
      ticks or seconds?

      Mr. Spell is so large that he can't be deleted in the conventional
      manner. What you need to do is this:

         ;recycle($spell)
         @rmprop #0.spell

      This leaves a hole in the database however. You can easily live with
      it but if you find that you can't, just fill it by doing this:

        ;$recycler:_recycle(renumber(create(#1)));
        ;reset_max_object()

      Another option is to call $spell:clearall() and recycle the object as
      usual.  This takes longer, but it does leave you the option of using
      $spell later, or with a smaller dictionary (by not recycling it).
      $spell without the dictionary is not very big.

      2.5.	How do I do execute a verb automatically each time the server
      starts?

      When the server starts, it calls the verb #0:server_started.
      Create/alter that verb to have it call the verb you want to execute.

      (NOTE: If a task has suspended or forked, and its execution is still
      pending when the server checkpoints or is shutdown, that task is saved
      along with the rest of the database. Thus, when the server is
      restarted, that task will be resumed.)

      2.6.	How can I make an object in a room "listen" to everything that's
      being said?

      When something is said in a room, each object in that room is sent
      that text via the verb `tell'. You can hack this verb to do whatever
      you want it to whenever anything is said or done in a room.

      2.7.	My MOO checkpoints every hour. I want to change this but I don't
      know where to look.

      Change the value of the property #0.dump_interval to the desired
      number of seconds between dumps; the change will take effect after the
      next checkpoint.

      This is documented in the LambdaMOO Programmer's Manual, section
      4.2.2, Database Checkpointing Frequency.

      3.  Miscellaneous

      3.1.	Where can I find the answer to...

      Always try the FAQ and the MOO-Cows archives, and FAQs about other
      subjects if they apply.  Pointers to the archives and sources to get
      other forms of this FAQ are in the Resources section.	The next
      question has some pointers to UNIX resources for UNIX questions.

      3.2.	I'm new to UNIX, and I need to ..

      You might be interested in reading one or more comp.unix.question FAQs
      <http://www.cis.ohio-
      state.edu/hypertext/faq/bngusenet/comp/unix/questions/top.html>.
      Reading other comp.unix.* FAQs <http://www.cis.ohio-
      state.edu/hypertext/faq/bngusenet/comp/unix/top.html> might give you
      more information about your particular flavor of UNIX.   Another good
      source of answers is rtfm.mit.edu.

      3.3.	I want to port something from one MOO to another.  Who do I ask
      for permission?

      The owner of the object.  If you can't get in touch with the owner and
      the object's description doesn't explicitly grant permission to port,
      assume you can't port the object.  If the owner of the object is not a
      real player (e.g. hacker), then contact the administrators of the MOO.
      The USENET Copyright FAQ <http://www.cis.ohio-
      state.edu/hypertext/faq/usenet/Copyright-FAQ/top.html> is a good
      source for information about copyrights.  Note that an object being on
      a MOO and readable by everyone isn't sufficient permission to port it
      to another MOO.  Finally, If the object isn't a generic object, ask
      yourself if you really want to port it or if you instead want to make
      an original object.

      3.4.	What are some good clients to use with MOO?

      Most people prefer to use TinyFugue or the emacs client, mud.el.
      mud.el is available at PARC's FTP site
      <ftp://parcftp.xerox.com/pub/MOO/clients/>.

      Other clients are available at
      ftp://ftp.math.okstate.edu/pub/muds/clients

      VMS users might be interested in the port of tinyfugue 2.x by Mike
      Shiminok.  It's available from
      ftp://ftp.math.okstate.edu/pub/muds/clients/tfvms.

      3.5.	How do I change my MOO password?  I've forgotten or lost the
      password to #2!  How do I log into my MOO?

      If you are using LambdaMOO 1.8.0 or later, run the MOO server in
      emergency wizard mode, eval #2.password = crypt("new-password"), and
      quit saving the database.   Once you do this, #2's password should be
      set to "new-password".

       unix:~> moo -e yourdb.db yourdb.new
       MOO (#2):  eval #2.password = crypt("new-password")
       MOO (#2): quit

      If you are using an older version of the server and if you are still
      capable of connecting as the wizard (i.e., you either haven't yet
      given the wizard a password or you know the current one), then the
      command

         @password (old-password) (new-password)

      will do it (where (old-password) is just omitted if this is the first
      time you're giving the wizard a password).

      If, on the other hand, you cannot currently connect as that wizard,
      but you can connect as some other wizard, then the somewhat more
      arcane command

         ;#2.password = crypt("new-password")

      will do it (where `new-password' is the new password).

      Finally, if you're completely locked out of all available wizard
      accounts, then you're down to the nitty-gritty task of hand-editing
      the database file.  First, while the MOO is running, connect as some
      programmer and type

         ;crypt("foo")

      It will give you back a random-looking string.  Write it down *very*
      precisely, making sure to match upper/lower case, etc.  Then, bring
      the database file into your favorite text editor and search for the
      string ``#2'' all alone on a line.  It should be followed, on the next
      line, by the name of the wizard (probably `Wizard' if it hasn't been
      changed since the MOO was started).  Scroll down a ways (perhaps quite
      a ways, but not past the place that has `#3' all alone on a line)
      until you find another random-looking string the same length as the
      one crypt() returned above.  Replace that string with the one you
      wrote down and save the file.	You should now be able to log in as the
      wizard using the password `foo'.

      3.6.	Is anybody else (besides Pavel) developing a public server that
      runs MOO dbs?

      Yes, Rob Leslie (rob@ccs.neu.edu) is working on running MOO db's on an
      LPmud based server (DGD).  He calls it LPMOO and you can read about it
      at http://www.ccs.neu.edu/home/rob/lpmoo.html.  He's running a MOO on
      this server.	It is called MirrorMOO and is on the public MOO list.
      You can get this server at
      ftp://ftp.ccs.neu.edu/pub/mud/mudlibs/lpmoo.

      3.7.	How do I subscribe to/unsubscribe from this list?

      Send a message to MOO-Cows-request@parc.xerox.com with an empty
      subject and either

        subscribe
      or
        unsubscribe

      in the body.

      3.8.	How can I obtain additional copies of this list?

      The MOO-Cows FAQ is available via anonymous FTP from
      ftp://ftp.ccs.neu.edu/pub/mud/docs/faqs/ It is also available via the
      WWW at http://www.ccs.neu.edu/home/fox/moo/.

      4.  Other Resources

      4.1.	Information

      Sources of information

      o  rec.games.mud.* FAQs <
         http://www.math.okstate.edu/~jds/mudfaqs.html>

      o  New Archwizard FAQ
         <gopher://gsep.pepperdine.edu/00/gsep/technical/mud-moo/new-
         archwiz-faq.txt>

      o  Lost Library of MOO <http://lucien.berkeley.edu/moo.html>

      o  LPMOO <http://www.ccs.neu.edu/home/rob/lpmoo.html>

      o  WinMOO FAQ <http://www-
         personal.engin.umich.edu/~cunkel/WinMOO/winmoo-faq.html>

      o  Upgrading LambdaCore to 1.8.0 <http://flake.org:8989/742>

      4.2.	Archives

      Archives of patches, messages, etc.

      o  MOO-Cows list <ftp://parcftp.xerox.com/pub/MOO/mail/>

      o  MOO FTP <ftp://parcftp.xerox.com/pub/MOO/>

      o  MOO server patches <ftp://ftp.crl.com/users/ro/riche/MOO/patches>

      o  MUD clients <ftp://ftp.math.okstate.edu/pub/muds/clients>

      o  More MUD clients <ftp://ftp.tcp.com/pub/mud/Clients>