home *** CD-ROM | disk | FTP | other *** search
/ Peanuts NeXT Software Archives / Peanuts-3.iso / OpenStep / systems / gnustep / documents / Gnustep-FAQ < prev   
Encoding:
Text File  |  1996-08-31  |  35.0 KB  |  753 lines

  1. Maintained by Andrew McCallum <mccallum@gnu.ai.mit.edu>, with
  2. contributions by Pascal Forget <pascal@wsc.com>, Scott Christley
  3. <scottc@net-community.com>, and Randy Chapman
  4. <chapman@u.washington.edu>.
  5.  
  6.    Last updated 26 March 1996.  The most up-to-date version of this FAQ
  7. is available at
  8. `ftp://ftp.cs.rochester.edu/pub/u/mccallum/gnustep-base'.  Please send
  9. corrections to <mccallum@gnu.ai.mit.edu>.
  10.  
  11.    The intended audience of this FAQ is future and present code
  12. developers for GNUstep.  This FAQ serves a purpose complementary to the
  13. GNUstep WWW pages--since it is written and maintained directly by those
  14. writing code for GNUstep, it emphasizes (although not exclusively): (1)
  15. technical details and organization, (2) the functionality is coded and
  16. working now.  This FAQ is intended to provide a succinct document in
  17. which to find GNUstep information without hype.
  18.  
  19. GNUstep General Information
  20. ===========================
  21.  
  22.   1. What is GNUstep?
  23.  
  24.      GNUstep is the Free Software Foundation's effort to implement NeXT
  25.      Software Inc.'s OpenStep Standard.  The project is not finished,
  26.      however some components are useable now.
  27.  
  28.      The GNUstep project consists of the following sub-projects:
  29.  
  30.         * GNU Objective C Compiler and Objective C Runtime Library -
  31.           Although not actually a sub-project the GNUstep, GCC and the
  32.           GNU Objective C Runtime Library are integral to GNUstep,
  33.           since they are used to make every GNU Objective C program.
  34.  
  35.         * GNUstep Base Library - Code for non-graphical objects, such as
  36.           strings, collections, archiving support and distributed
  37.           objects messaging.  (Including functionality similar to
  38.           OpenStep's `FoundationKit'.)
  39.  
  40.         * GNUstep GUI Library - Code for graphical objects used in
  41.           making a Graphical User Interface (GUI).  This includes
  42.           buttons, sliders, text fields, windows, menus, etc.
  43.           (Including functionality similar to OpenStep's `AppKit'.)
  44.  
  45.         * GNUstep DisplayGhostScript Server - A server that draws
  46.           PostScript graphics to the screen, and receives events from
  47.           the keyboard and mouse.  It is based on GhostScript.
  48.  
  49.         * GNUstep Interface Modeller Application - An application for
  50.           graphically assembling application interfaces.
  51.  
  52.      More detailed information about each of these sub-projects can be
  53.      found in their own sections below.
  54.  
  55.      There are several projects related to GNUstep that are not
  56.      officially part of the GNU project and GNUstep, but may become so
  57.      in the future.  These include: the `G3DKit' project, (contact
  58.      Thomas Engle <tsengel@cip.informatik.uni-erlangen.de>); an
  59.      application library based on OpenGL, (contact Georg Tuparev
  60.      <Tuparev@EMBL-Heidelberg.de>); and `ProjectCenter', a source code
  61.      management and development environment, (contact unknown).  If you
  62.      know of others, please contact the FAQ maintainer.
  63.  
  64.      The initial target platforms for GNUstep are Linux and other
  65.      UN*X's.  There has been some OS/2 WARP work, but I have not seen
  66.      any ongoing work on this platform yet, (contact McCallum if you
  67.      are interested).
  68.  
  69.   2. What is the OpenStep standard?
  70.  
  71.      OpenStep is an Application Programming Interface (API) for creating
  72.      applications using the Objective C language.  It was published by
  73.      NeXT Computer Inc. in 1994.
  74.  
  75.      OpenStep consists of three parts: the `FoundationKit', a library of
  76.      non-graphical objects; the `AppKit', a library of objects usful in
  77.      creating graphical applications; and `DisplayPostscript', an
  78.      interface for drawing to the screen using the PostScript graphics
  79.      language.
  80.  
  81.      You can obtain a copy of the OpenStep standard in
  82.  
  83.         * texinfo at `http://www.dartmouth.edu/~ajones/Projects'.
  84.  
  85.         * HTML at
  86.           `http://www.nmr.embl-heidelberg.de/GNUstep/GNUOpenStep'.
  87.  
  88.         * PostScript and RTF at `ftp://ftp.next.com/pub/OpenStepSpec/'.
  89.  
  90.   3. Who is currently involved in writing GNUstep code?
  91.  
  92.      For the sake of being social and getting to know each other, here
  93.      is a list of the folks who are currently, actively contributing
  94.      GNUstep code.  The list includes a brief descriptions of each
  95.      person's background and involvement in the GNUstep coding efforts.
  96.  
  97.         * Adam Fedor <fedor@mode.colorado.edu> continues his excellent,
  98.           long service as user, tester, and code contributor to both
  99.           the Base Library and the GUI Library.
  100.  
  101.         * Andrew McCallum <mccallum@gnu.ai.mit.edu> was appointed chief
  102.           maintainer of the GNUstep project by Richard Stallman in
  103.           January 1996.  He has been involved and hacking in the NeXT
  104.           community since NeXTSTEP version 0.8; he has been working on
  105.           GNU Objective C and the Base Library since 1993.
  106.  
  107.         * Pascal Forget <pascal@wsc.com> is working on the GUI Library
  108.           in conjunction with Scott Christley.  He has worked with Randy
  109.           Chapman's DisplayGhostScript and X Windows as a GNUstep GUI
  110.           backend.
  111.  
  112.         * Randy Chapman <chapman@u.washington.edu> has been working on
  113.           the GNUstep DisplayGhostScript Server, adding DPS extensions
  114.           to GhostScript, including pswrap work.
  115.  
  116.         * Scott Christley <scottc@net-community.com> is in charge of
  117.           the InterfaceModeler project, which is currently in the
  118.           design stages.  He is working on the GUI Library in
  119.           conjunction with Pascal Forget.  He has already written much
  120.           of the GUI Library frontend.
  121.  
  122.      There are many others who have made significant contributions to
  123.      GNUstep, but who are not currently contributing code, (such as
  124.      Kresten Thorup <krab@next.com> and Paul Kunz
  125.      <paul_kunz@slac.stanford.edu>).  For more information about
  126.      GNUstep history, see the GNUstep WWW pages.
  127.  
  128.      There are also several others who have contributed individual
  129.      classes to GNUstep, but who are not actively contributing to
  130.      general GNUstep work.  This list is not intended to be a complete
  131.      list of GNUstep code contributors; that information is available
  132.      in each of the GNUstep code packages.
  133.  
  134.      There are also other code developers who are writing Objective C
  135.      code related to GNUstep, but for projects that are not officially
  136.      part of the GNU project and GNUstep.  We hope that some of these
  137.      projects will join the GNU project and GNUstep in the future.
  138.  
  139.      Please send corrections to the FAQ maintainer.
  140.  
  141.   4. Is there a WWW site for GNUstep?  Are there mailing lists for
  142.      GNUstep?
  143.  
  144.      There is a WWW site at `http://www.GNUstep.org', (and its mirror
  145.      `http://www.NMR.EMBL-Heidelberg.DE/GNUstep', that contains many
  146.      useful pointers.  The technical information in this FAQ may be
  147.      more up to date than the WWW pages since this FAQ is maintained
  148.      directly by the people who are developing GNUstep code.
  149.  
  150.      There are several mailing lists:
  151.  
  152.         * <discussion@gnustep.org> is a mailing list for general
  153.           discussion of GNUstep developments.  Announcements about
  154.           GNUstep progress are also made there.  The list is maintained
  155.           by Georg Tuparev <Tuparev@EMBL-Heidelberg.de>.
  156.  
  157.           To join, send mail to <discussion-request@gnustep.org>.
  158.  
  159.         * <webmasters@gnustep.org> is a mailing list for discussion of
  160.           the GNUstep WWW site.
  161.  
  162.           To join, send mail to <webmasters-request@gnustep.org>.
  163.  
  164.         * <g3dkit@gnustep.org> is a mailing list for discussion of a
  165.           library for drawing 3D graphics; it is based on OpenGL and
  166.           RenderMan.  The Free Software Foundation is hoping that this
  167.           work can become an official part of the GNU project and the
  168.           GNUstep project.
  169.  
  170.           To join, send mail to <g3dkit@gnustep.org>.
  171.  
  172.         * There is also a private mailing list for the core active
  173.           developers of GNUstep.  Those people who contribute large
  174.           sections of code and who are interested in making and
  175.           planning further contributions may be invited to join.  We
  176.           apologize in advance, but, for the sake of efficient
  177.           communication, the list is not open to people who are not
  178.           actively contributing significant coding work to the project;
  179.           don't bother asking to be added unless you have already been
  180.           in contact with Andrew McCallum about source code
  181.           contributions.  If you would like to make code contributions,
  182.           by all means, contact McCallum.  This list is maintained by
  183.           McCallum <mccallum@gnu.ai.mit.edu>.
  184.  
  185.   5. What is the current state of the project?  When can I expect it to
  186.      be completed?
  187.  
  188.      The Base Library is about 85 percent done.  Significant useful
  189.      work can already be done using the library.  The GUI library is
  190.      about 25 percent done.  It is going through a major transition at
  191.      the moment to coordinate work from multiple developers,
  192.      DisplayPostscript, and the non-OpenStep objcX library into a
  193.      single package that will be made available to the public.  The
  194.      DisplayPostscript and drawing support is also in transition.
  195.  
  196.      More detailed information about the state of each of the
  197.      sub-projects can be found below.
  198.  
  199.      With free software, you should never, ever, believe promises about
  200.      when a project will be finished.  ...However, that said: there are
  201.      certain GNUstep developers that are counting on having useful Base
  202.      and GUI libraries working by the end of Summer 1996.
  203.  
  204.   6. On what platforms will it run?
  205.  
  206.      The short answer is: On whichever platforms volunteers offer port
  207.      it!  The main target platforms is free operating systems, namely
  208.      Linux and the Hurd.  Much of the code is OS-independent, and
  209.      should port quite easily to various UNIX-like OS's.  There has
  210.      been interest in a port to Linux on the Apple Macintosh, but I
  211.      have not heard of any developers.
  212.  
  213.      At least one of the current active developers is also working with
  214.      WindowsNT.  There has been some interest in an OS/2 port, but I've
  215.      seen few code contributions for OS/2.
  216.  
  217.   7. How can I help?
  218.  
  219.      If you have a specific piece of functionality that you would like
  220.      to contribute, or if you would like to ask for suggestions about
  221.      what coding work you can do to help, contact the GNUstep Chief
  222.      Maintainer, Andrew McCallum <mccallum@gnu.ai.mit.edu>.
  223.  
  224.  
  225.    More detailed inforation about each of the GNUstep sub-projects can
  226. be found below.
  227.  
  228. GNU Objective C Compiler and Objective C Runtime Library
  229. ========================================================
  230.  
  231.   1. What is the Objective C Runtime Library?
  232.  
  233.      The Objective C Runtime Library provides C functions and data
  234.      structures required to execute an Objective C program.  An
  235.      introduction to the Objective C Language is provided at
  236.  
  237.  
  238.      `http://www.next.com/Pubs/Documents/OPENSTEP/ObjectiveC/objctoc.htm'.
  239.      The Frequently Asked Questions list for
  240.      `news://comp.lang.objective-c' can be found at `??'.
  241.  
  242.      The GNU Objective C Runtime Library offers everything NeXT's
  243.      runtime does, including Categories, Protocols, `+poseAs:',
  244.      thread-safety, class initialization on demand, delayed loading of
  245.      classes, and initialization of static instances (such as @""-style
  246.      string objects).
  247.  
  248.      It also has several improvements over NeXT's implementation:
  249.  
  250.         * NeXT's runtime requires an extra function call (objc_msgSend)
  251.           for each message that is sent; (the function looks up the
  252.           receiving instance's implementation of the method).  GNU's
  253.           implementation is faster because it does not use an extra
  254.           function call.  Instead, it inlines a short piece of code
  255.           that makes two pointer hops into a method dispatch table;
  256.           because the code is inlined, it does not incur the overhead
  257.           of a function call.
  258.  
  259.         * When running in thread-safe mode, NeXT's runtime must aquire a
  260.           global mutual exclusion lock every time a message is sent;
  261.           this is extremely slow.  GNU's runtime, amazingly, sends
  262.           messages just as fast in thread-safe mode as it does in
  263.           single-thread mode--the code path does not contain even a
  264.           single extra instruction!  The GNU runtime only needs locks
  265.           when certainly structures are written, not read; the
  266.           structures are written relatively infrequently: only at class
  267.           initialization and when `+poseAs:' is called.
  268.  
  269.         * GNU's runtime provides "selector-types" along with each
  270.           selector; NeXT's does not.  A selector-type is a string that
  271.           describes the C variable types for the method's return and
  272.           argument values.  Among other uses, selector-types is
  273.           extrememly helpful for fast distributed objects
  274.           implementations, (see GNUstep Base Library Section, below).
  275.  
  276.         * Many of the GNU functions have different names than their
  277.           corresponding NeXT functions; the GNU names conform to the
  278.           GNU coding standards.
  279.  
  280.         * GNU's runtime library has a new class heirarchy manipulating
  281.           method called `-transmuteClassTo:'.  It can change the class
  282.           of an instance to a cousin class of the same instance-size.
  283.  
  284.         * NeXT's compiler, `cc', is based on an old version of `gcc'.
  285.           GNU's compiler is, of course, the latest version of `gcc',
  286.           and therefore contains all the latest enhancements.
  287.  
  288.   2. What is its current state of development?
  289.  
  290.      GNU's Objective C Runtime library has been stable and useable since
  291.      1993.  Enhancements continue to be made.
  292.  
  293.      GCC contains the source for the GNU Objective C compiler and
  294.      runtime library.  It can be obtained from
  295.      `ftp://prep.ai.mit.edu/pub/gnu', or any other mirror of the GNU
  296.      archives.  As far as I know, the GNU Objective C Runtime runs on
  297.      all, platforms on which GCC runs.
  298.  
  299.      GCC version 2.7.2 does not contain the thread-safe features, but
  300.      the next version of GCC will.  A patch for thread-safe features is
  301.      provided with the latest developer snaphots of the GNUstep Base
  302.      Library.  There are currently thread-safe backends for DEC OSF/1,
  303.      Solaris, IRIX, and WindowsNT.  Volunteers are solicited for
  304.      writing additional back-ends, especially one for Linux.
  305.  
  306.  
  307. GNUstep Base Library
  308. ====================
  309.  
  310.   1. What is the GNUstep Base Library?
  311.  
  312.      The GNUstep Base Library is a library of general-purpose,
  313.      non-graphical Objective C objects.  For example, it includes
  314.      classes for strings, collections, byte streams, typed coders,
  315.      invocations, notifications, notification dispatchers, times,
  316.      network ports, remote object messaging support, event loops and
  317.      random number generators.
  318.  
  319.      It provides functionality that aims to implement the
  320.      `FoundationKit' portion of the OpenStep standard.  In many cases,
  321.      the `NS*' classes are implemented as wrappers around more
  322.      featureful GNU classes.
  323.  
  324.      There is more (although perhaps out-of-date) information available
  325.      at the GNUstep Base Library homepage at
  326.      `http://www.cs.rochester.edu/u/mccallum/gnustep-base'.
  327.  
  328.   2. What is its current state of development?
  329.  
  330.      It is about 85 percent of the way to having all the OpenStep
  331.      classes.  Significant useful work can already be done using the
  332.      library since the missing 15 percent are the less-often-used
  333.      classes, such as NSByteStore.  Over 60,000 lines of code have
  334.      already been written.
  335.  
  336.      The following OpenStep classes and class clusters are pretty much
  337.      done and usable: NSArchiver, NSArray, NSAssertionHandler,
  338.      NSAutoreleasePool, NSBitmapCharSet, NSBundle, NSCharacterSet,
  339.      NSCoder, NSCountedSet, NSData, NSDate, NSDictionary, NSEnumerator,
  340.      NSException, NSInvocation, NSLock, NSMethodSignature,
  341.      NSNotification, NSNotificationCenter, NSNumber, NSObject,
  342.      NSProcessInfo, NSRunLoop, NSSet, NSString, NSThread, NSTimeZone,
  343.      NSTimer, NSValue.
  344.  
  345.      Most of the C functions are also implemented, including
  346.      NSHashTable and NSMaptable.
  347.  
  348.      A GNU implementation of Distributed Object works.  However, the
  349.      wrappers for creating the NSConnection, NSDistantObject, NSProxy
  350.      wrappers have not yet been made.
  351.  
  352.      The following classes are unstarted or unusable: NSBTreeBlock,
  353.      NSBTreeCursor, NSByteStore, NSByteStoreFile, NSCalendarDate,
  354.      NSDeserializer, NSScanner, NSSerializer, NSUserDefaults.
  355.  
  356.   3. In what ways is the Base Library different from OpenStep's
  357.      FoundationKit?
  358.  
  359.      It contains several enhancements:
  360.  
  361.        1. OpenStep has a single NSInvocation class, which is based on
  362.           sending a message to an object.  The GNUstep Base Library has
  363.           a heirarchy of Invocation classes with various capabilities.
  364.           Two of the Invocation subclasses can cause C functions to be
  365.           called, instead of sending messages to objects; these
  366.           subclasses are useful when one would otherwise have to write
  367.           a new class and method to implement some simple, stateless
  368.           functionality.  Other subclasses of Invocation could hold
  369.           GUILE or TCL code to be run, or could record their invocation
  370.           information to a file.
  371.  
  372.           All of them respond to a new method called
  373.           `-invokeWithObject:' that is useful for enumerations.
  374.  
  375.        2. I have been told that OpenStep's NSNotificationCenter is slow.
  376.           GNUstep's NotificationDispatcher class is based on
  377.           interesting use of linked lists and hash tables in such a way
  378.           that it should be comparatively very fast.
  379.  
  380.           OpenStep notifications must be method selectors sent to
  381.           objects.  GNUstep notifications can invoke an Invocation
  382.           instead, thus taking advantage of the flexbility and
  383.           context-holding capability of Invocation objects.
  384.  
  385.        3. OpenStep takes a disconnected "class forest" approach to
  386.           collection classes.  GNUstep has all the OpenStep collection
  387.           classes, however they are build from underlying GNU
  388.           collection classes that are organized as a deep class
  389.           heirarchy.  Because of the deep heirarchy, there is a
  390.           built-in uniformity of method names, and there are common
  391.           abstract superclasses in which to add new common
  392.           functionality.
  393.  
  394.           Unlike OpenStep, the Base Library also has additional
  395.           collection classes for heaps, stacks, queues, trees and
  396.           linked lists.  There is also a rich variety of enumeration
  397.           methods based on invocations.
  398.  
  399.        4. OpenStep's archiving mechanism provides only one choice of
  400.           backend format.  By backend format, I mean a format for
  401.           writing C types, such as ints, floats and C strings.  The
  402.           GNUstep archiving mechanism has a clear separation between
  403.           frontend and backend.  Different backends are provided.  One
  404.           backend writes in human-readable and human-editable ASCII
  405.           text, (including programmer-provided text name labels for
  406.           each of the items.)  Another writes in a compact, stream
  407.           machine-independent bits.  A third writes in an even more
  408.           compact stream of machine-dependent bits; this is useful for
  409.           distributed objects connections on machines of the same
  410.           architecture.
  411.  
  412.           I'm not sure how OpenStep's archiving system implements
  413.           forward references, (that is, calls to
  414.           `encodeConditionalObject:' for which the object argument has
  415.           not yet been encoded, but will be encoded later.)  According
  416.           to its restricted interface, NeXT's implementation must
  417.           either (1) make two passes through all the -encodeWithCoder:
  418.           methods of the objects to be encoded, or (2) not handle
  419.           forward references with `-encodeConditionalObject:', only
  420.           backward references.  GNU's archiving system, on the other
  421.           hand, implements forward references efficiently, without
  422.           making two passes.  It does this by using an object decoding
  423.           method (`-decodeObjectAt:..') that back-patches `id'-pointers
  424.           when the conditionally encoded objects are found in the coded
  425.           stream.
  426.  
  427.        5. OpenStep's distributed objects mechanism requires four network
  428.           "hops" when sending and responding to each new method--one to
  429.           send the request, one for the server to request the method
  430.           type from the client, one for the client to respond with the
  431.           method type, and one to respond with the return value of the
  432.           method call.  GNUstep distributed objects takes advantage of
  433.           the superior GNU Objective C runtime, which includes the
  434.           method type locally with the selector.  Since the method type
  435.           can already be found on the server, there is no need to ask
  436.           the client for the type, and GNU distributed objects takes
  437.           two less network hops.
  438.  
  439.        6. NeXT's Objective C runtime becomes very slow when
  440.           thread-safety is turned on since the runtime must acquire a
  441.           global mutual-exclusion lock each time an Objective C message
  442.           is sent.  GNUstep takes advantage of the superior GNU
  443.           Objective C runtime, which is requires zero extra time to
  444.           send a message when thread safe--not even one instruction
  445.           more is required for a thread-safe message send.  Mutual
  446.           exclusion locks are only necessary in the relatively
  447.           infrequent times in which classes are initialized or
  448.           `+poseAs:' is called.  Galen Hunt implemented the patches to
  449.           make the runtime thread-safe.
  450.  
  451.  
  452.   4. What are the features of GNU Distributed Objects?
  453.  
  454.      GNU Distributed Objects has many of the features of other
  455.      distributed objects implementations, but, since it is free
  456.      software, it can be ported to platforms for which other
  457.      distributed objects implementations are not available.
  458.  
  459.      If you are interested in having it ported to a new platform, or if
  460.      you have any questions about it, please contact Andrew McCallum,
  461.      <mccallum@gnu.ai.mit.edu>.
  462.  
  463.      The distributed object support classes are Connection, Proxy,
  464.      ConnectedCoder, Port, TcpPort, UdpPort, and MachPort.  Of the
  465.      various Port backend's, currently only the the TcpPort is in
  466.      working order.
  467.  
  468.      [NOTE: The GNU distributed object facilities have the same
  469.      ease-of-use as NeXT's; be warned, however, that they are not
  470.      compatible with each other.  They have different class
  471.      heirarchies, different instance variables, different method names,
  472.      different implementation strategies and different network message
  473.      formats.  You cannot communicate with a NeXT NXConnection using a
  474.      GNU Connection.
  475.  
  476.      Here are some differences between GNU distributed objects and
  477.      NeXT's distributed objects: NXConnection creates NXProxy objects
  478.      for local objects as well as remote objects; GNU Connection
  479.      doesn't need and doesn't create proxies for local objects.
  480.      NXProxy asks it's remote target for the method encoding types and
  481.      caches the results; GNU Proxy gets the types directly from the
  482.      local GNU "typed selector" mechanism and has no need for querying
  483.      the remote target or caching encoding types.  The NXProxy for the
  484.      remote root object always has name 0 and, once set, you cannot
  485.      change the root object of a NXConnection; the GNU Proxy for the
  486.      remote root object has a target address value just like all other
  487.      Proxy's, and you can change the root object as many times as you
  488.      like.  See the "lacking-capabilities" list below for a partial
  489.      list of things that NXConnection can do that GNU Connection
  490.      cannot.]
  491.  
  492.      Here is a partial list of what the current distributed objects
  493.      system can do:
  494.  
  495.         * It can pass and return all simple C types, including char*,
  496.           float and double, both by value and by reference.
  497.  
  498.         * It can pass structures by value and by reference, return
  499.           structures by reference.  The structures can contain arrays.
  500.  
  501.         * It obeys all the type qualifiers: oneway, in, out, inout,
  502.           const.
  503.  
  504.         * It can pass and return objects, either bycopy or with
  505.           proxies.  An object encoded multiple times in a single
  506.           message is properly decoded on the other side.
  507.  
  508.         * Proxies to remote objects are automatically created as they
  509.           are returned.  Proxies passed back where they came from are
  510.           decoded as the correct local object.
  511.  
  512.         * It can wait for an incoming message and timeout after a
  513.           specified period.
  514.  
  515.         * A server can handle multiple clients.
  516.  
  517.         * The server will ask its delegate before making new
  518.           connections.
  519.  
  520.         * The server can make call-back requests of the client, and
  521.           keep it all straight even when the server has multiple
  522.           clients.
  523.  
  524.         * A client will automatically form a connection to another
  525.           client if an object from the other client is vended to it.
  526.           (i.e. Always make a direct connection rather than forwarding
  527.           messages twice, once into the server, from there out to the
  528.           other client.)
  529.  
  530.         * Servers and clients can detect port deaths (due to remote
  531.           application crash, for example) and close down gracefully,
  532.           announcing the closed connection to other objects who have
  533.           requested notifications.
  534.  
  535.         * Exceptions that occur in the server (during the course of
  536.           servicing a request) are sent back to the client, and the
  537.           exception is then properly raised in the client's process.
  538.  
  539.         * Servers and clients can be on different machines of different
  540.           architectures; byte-order and all other
  541.           architecture-dependent nits are taken care of for you.  You
  542.           can have SPARC, i386, m68k, and MIPS--Linux, SunOS, Solaris,
  543.           IRIX, AIX and HPUX machines all distributed-object'ing away
  544.           together in one big web of client-server connections!  The
  545.           library can be ported to other architectures and operating
  546.           systems also.  Please contact Andrew McCallum,
  547.           <mccallum@gnu.ai.mit.edu>, if you are interested in having a
  548.           new port of GNU Distributed Objects.
  549.  
  550.      Here is a partial list of what the current distributed objects
  551.      system does not yet do:
  552.  
  553.         * Run multi-threaded.
  554.  
  555.         * Return structures by value.
  556.  
  557.         * Use Mach ports, pass Mach ports, pass Mach virtual memory.
  558.  
  559.   5. What is the general organization of the non-OpenStep, GNU classes?
  560.  
  561.      (This FAQ does not describe the OpenStep standard classes, because
  562.      a detailed description of those can be found in the OpenStep
  563.      documentation.)
  564.  
  565.      Here are some of the public GNU classes.  See the source header
  566.      files for more information.
  567.  
  568.      The collection class heirarchy:
  569.      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  570.      Collection                 Root all the collection classes (abstract)
  571.        Set                      Unordered collection, no duplicates
  572.        Bag                      Unordered collection, may have duplicates
  573.        KeyedCollection          Contents accessible by object key (abstract)
  574.          Dictionary             Concrete implementation
  575.          MappedCollection       One collection maps into another
  576.        IndexedCollection        Contents accessible by integer (abstract)
  577.          BinaryTree             Basic, sorted binary tree
  578.            RBTree               Red-Black tree, sorted, more balanced
  579.            SplayTree            Splay operation keeps tree balanced
  580.          OrderedCollection      Can insert at arbitrary index (abstract)
  581.            Array                Basic array
  582.              Queue              First in, first out
  583.              Stack              First in, last out
  584.              GapArray           Efficient handle middle insert and delete
  585.            LinkedList           More efficient than arrays for some ops
  586.      
  587.      Strings (as in Smalltalk, part of the collection class heirarchy):
  588.      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  589.            ConstantString        Root of string classes, chars not changable
  590.              String              contents can be changed
  591.              *CString            Strings based on 1-byte characters
  592.      
  593.      Writing/reading bytes, C-type variables, and connected groups of objects:
  594.      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  595.      Stream                     Source and Destination for stream of bytes
  596.        StdioStream              Stream based on FILE* (files, pipes, etc)
  597.        MemoryStream             Stream based on memory buffer
  598.      CStream                    Write/Read C-type variables on stream
  599.        TextCStream              use human-readable format
  600.        BinaryCStream            use compact machine independent format
  601.        RawCStream               use even more compact machine depedent format
  602.      Coder                      Write/Read groups of objects on CStream
  603.        Encoder                  Writing
  604.          Archiver               for files
  605.          ConnectedEncoder       for distributed objects
  606.        Decoder                  Reading
  607.          Unarchiver             for files
  608.          ConnectedDecoder       for distributed objects
  609.      
  610.      Holding code to be run on request:
  611.      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  612.      Invocation                 Contains code that can be run
  613.        ArgframeInvocation       based on gcc __builtin_apply()
  614.          MethodInvocation       invokes a method on an object
  615.          ObjectMethodInvocation the method takes at least one object arg
  616.        ObjectFunctionInvocation calls a function with type (id(*)(id))
  617.        VoidFunctionInvocation   calls a functions with type (void(*)())
  618.      
  619.      Posting information about happenings:
  620.      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  621.      Notification               for posting information others may want
  622.      NotificationRequest        a record of an observers request
  623.        NotificationInvocation   will be posted by invoking an Invocation
  624.        NotificationPerformer    will be posted by -perform:withObject
  625.      NotificationDispatcher     distributes Notification's among requestors
  626.      
  627.      Distributed Objects Support:
  628.      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  629.      Connection                 between two machines on which messages sent
  630.      Proxy                      Representative of a remote object
  631.      Port                       A mailbox for packets
  632.        InPort                   for receiving packets
  633.        OutPort                  for sending packets
  634.          Tcp*Port               based on TCP/IP
  635.          Udp*Port               based on UDP/IP
  636.          Mach*Port              based on Mach ports
  637.      Packet                     holds data and reply port
  638.  
  639.   6. Where can I get a copy?
  640.  
  641.      The most recently released "official" version can be obtained from
  642.      `ftp://prep.ai.mit.edu'.
  643.  
  644.      The most recently released alpha version can be obtained from
  645.      `ftp://alpha.gnu.ai.mit.edu'.
  646.  
  647.      The most recent developer's snapshot can be obtained from
  648.      `ftp://ftp.cs.rochester.edu/pub/u/mccallum/gnustep-base'.  These
  649.      releases are there for exchange between active GNUstep coders, and
  650.      for curious code-readers, not for naive users; read the
  651.      README.first file in the FTP directory.
  652.  
  653.  
  654. GNUstep GUI Library
  655. ===================
  656.  
  657.   1. What is the GUI Library?
  658.  
  659.      The GNUstep GUI Library is a library of objects useful for writing
  660.      graphical applications.  For example, it includes classes for
  661.      drawing and manipulating graphics objects on the screen: windows,
  662.      menus, buttons, sliders, text fields, and events.  There are also
  663.      many peripheral classes that offer operating-system-independent
  664.      interfaces to images, cursors, colors, fonts, pasteboards,
  665.      printing.  There are also workspace support classes such as data
  666.      links, open/save panels, context-dependent help, spell checking.
  667.  
  668.      It provides functionality that aims to implement the `AppKit'
  669.      portion of the OpenStep standard.  However the implementation has
  670.      been written to take advantage of GNUstep enhancements wherever
  671.      possible.
  672.  
  673.   2. Explain the organization of the front- and back-ends.
  674.  
  675.      The GNUstep GUI Library is divided into a front- and back-end.  The
  676.      front-end contains the majority of implementation, but leaves out
  677.      the low-level drawing and event code.  A back-end can override
  678.      whatever methods necessary in order to implement low-level drawing
  679.      event receiving.  Different back-ends will make GNUstep available
  680.      on various platforms.  The default GNU back-end will run on top of
  681.      X Windows and the DisplayGhostScript Server.  Other back-ends
  682.      could allow GNUstep to run on OpenGL, OS/2, and WIN32
  683.      graphics/event platforms.  Much work will be saved by this clean
  684.      separation between front- and back-end, because it allows
  685.      different platforms to share the large amount of front-end code.
  686.  
  687.      The front-end does not specify what mechanism to use in order to
  688.      "plug in" the back-end--that is the back-end implementor's choice.
  689.      At least two backends will use `+poseAs:' method, for example,
  690.      running `[XDPSWindow poseAs: [NSWindow class]]'.  Using `+poseAs:'
  691.      is more flexible than using Categories because it allows the the
  692.      back-end implementor to choose what to override in the front-end,
  693.      instead of having the interface between front- and back-end fixed
  694.      by the front-end.
  695.  
  696.   3. What is the current state of development of the front-end?
  697.  
  698.      A number of classes in the front-end are complete or almost
  699.      complete; these include:  NSActionCell, NSButtonCell, NSButton,
  700.      NSCell, NSControl, NSEvent, NSFont, NSResponder, and NSSlider.
  701.  
  702.      Other classes are complete enough to use, but still require some
  703.      major additions before being considered almost complete:
  704.      NSApplication, NSBox, NSColor, NSFontManager, NSMenu, NSMenuCell,
  705.      NSPopUpButton, NSSliderCell, NSText, NSTextField, NSTextFieldCell,
  706.      NSView, and NSWindow.
  707.  
  708.      All remaining classes have stub implementations.
  709.  
  710.   4. What is the current state of development of the X/DPS back-end?
  711.  
  712.   5. Where can I get a copy?
  713.  
  714.      It is not yet publically available.  When it is available you will
  715.      be able to find it in `ftp://alpha.gnu.ai.mit.edu/gnu'.
  716.  
  717.  
  718. GNUstep DisplayGhostScript Server
  719. =================================
  720.  
  721.   1. What is the DisplayGhostScript Server?
  722.  
  723.   2. What is its current state of development?
  724.  
  725.   3. What is the relationship between the DisplayGhostScript Server and
  726.      X Windows?
  727.  
  728.  
  729. GNUstep Interface Modeller Application
  730. ======================================
  731.  
  732.   1. What is the Interface Modeller?
  733.  
  734.      Interface Modeller, in its simplest form, is an application for
  735.      visually constructing and prototyping graphical user interfaces.
  736.      At a more abstract level, it is a tool for connecting instances of
  737.      Objective C classes to create a graph of objects; this graph is a
  738.      model of an executable program that Interface Modeller can save to
  739.      a file to be loaded and executed later outside of Interface
  740.      Modeller.
  741.  
  742.   2. What is its current state of development?
  743.  
  744.      It is in the specification stage; no code has been written yet.
  745.      The current specifications are available through the GNUstep WWW
  746.      pages.
  747.  
  748.  
  749.  
  750.  
  751. All trademarks mentioned on in this FAQ belong to their owners.
  752.  
  753.