<!DOCTYPE ARTICLE PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
]>
<article id="index">
  <artheader>
  <authorgroup>
   <author>
    <firstname>Michael</firstname>
    <surname>Fulbright</surname>
    <affiliation>
     <orgname>Red Hat Software, Inc.</orgname>
     <address>
     <email>drmike@redhat.com</email>
     </address>
     </affiliation>
   </author>
   </authorgroup>
    <copyright>
      <year>1999</year>
      <holder>Red Hat, Inc</holder>
    </copyright>
    <title>GNOME 1.0 Library Roadmap</title>

    <abstract>
      <para>
          The GNOME desktop environment is built on top of numerous
          support libraries which handle the many tasks expected of a
          modern desktop. Using these libraries, the developer can
          build a fully integrated application that fits into the
          GNOME desktop seamlessly. This document provides a guide to
          the function and relationships among these libraries. 
      </para>
    </abstract>
  </artheader>


  <sect1 id="typapp">
    <title>Basic GNOME Libraries</title>
    <table>
     <title>GNOME Libraries</title>
     <tgroup cols="2">
     <thead>
     <row>
      <entry>Library Name</entry>
      <entry>Function</entry>
     </row>
     </thead>
      <tbody>
      <row>
       <entry>libaudiofile</entry>
       <entry>Reads common audio file formats</entry>
      </row>
      <row>
       <ENTRY>libgdk_imlib</entry>
       <entry>Loads and manipulates image formats</entry>
      </row>
      <row>
       <ENTRY>libgtk</entry>
       <entry>GIMP Toolkit, widget used in GNOME</entry>
      </row>
      <row>
       <ENTRY>libgnome</entry>
       <entry>GNOME utility functions</entry>
      </row>
      <row>
      <entry>libgnomeui</entry>
      <entry>GNOME UI utility functions</entry>
      </row>      
      <row>
       <entry>libglib</entry>
       <entry>String functions, hashes, lists, etc</entry>
      </row>
      <row>
       <ENTRY>libgdk</entry>
       <entry>Lower level drawing toolkit</entry>
      </row>
      <row>
       <entry>libesd</ENTRY>
       <entry>Client interface to esound daemon</entry>
      </row>
     </tbody>
    </tgroup>
   </table>
    
    <para>
        Modern desktop applications demand a wide variety of services from
        the underlying application framework.  In addition to the
        expectations of a widget set, programmers need tools to access
        and display audio and image information as well.
    </para>

    <formalpara>
     <title>libaudiofile</title>
    <para>
        The <function>libaudiofile</function> library can read a wide
        variety of audio file formats (AIFF, AIFC, WAV, and NeXT/Sun
        au).  Once samples have been loaded using
        <function>libaudiofile</function>, <function>libesd</function>
        routines are available to play these samples via the Esound
        sound daemon.  The Esound sound daemon allows several
        processes to access the sound hardware simultaneously. Esound
        is required because the Linux kernel does not allow multiple 
        process access. Esound also supports sound over a
        network. Sound samples can be preloaded into Esound for later
        playback, which signifcantly reduces latency on network
        connections since the sample does not have to be repeatedly sent
        over the wire. 
    </para>
    </formalpara>
  
    <formalpara>
     <title>libgdk_imlib</title>
    <para>
        GUI applications require extensive use of images to create a
        friendly and comfortable user interface.  Traditionally it has
        been difficult to load all the common graphic file formats
        into X11 applications.  The <function>libbgdk_imlib</function>
        library addresses this issue by providing convenient and
        powerful functions to load multiple file formats (JPEG, GIF,
        TIFF, PNG, XPM, PPM, PGM, PBM, and BMP). These files are
        converted to an internal 24 bit RGB representation, and
        utility functions exist to scale as well as render from 24 bit
        RGB to a variety of other color depths (with dithering if
        desired).  Input image files are cached internally by
        <function>libbgdk_imlib</function> to improve performance in
        applications which repeatedly use images. 
    </para>
    </formalpara>

    <formalpara>
     <title>libgtk</title>
    <para>
        The <function>libgtk</function> library is the GIMP toolkit
        library. It is a professional quality widget set which, in
        many ways, is superior to other widget sets. GNOME
        applications are written entirely using
        <function>libgtk</function> for all GUI elements (buttons,
        menus, scrollbars, etc).  
    </para>
    </formalpara>
     
    <formalpara>
     <title>libgnome</title>
    <para>
        The <function>libgnome</function> library provides many
        utility routines related to the GNOME desktop environment.
        Among the capabilities provided are config file support for
        applications to store persistent data, support for metadata
        (data attached to file objects, like the icon to display for a
        particular file type), and support for loading help documents
        into the GNOME help browser.  An interface is also provided so
        GNOME applications can talk to the GNOME session manager.  Finally,
        routines exist to configure how different mime-types are handled
        by GNOME and the GNOME file manager.
   </para>
    </formalpara>

   <formalpara>
    <title>libgnomeui</title>
   <para>
        GNOME applications use the <function>libgnomeui</function>
        library extensively.  This library contains toolkit extensions
        to the GTK+ widget set.  Users can easily create dialog boxes,
        and message boxes, as well as menubars, toolbars, and status
        lines. An extensive array of stock icons is provided for the
        programmer's use in dialogs, menu entries, and buttons.
   </para>
   </formalpara>
   
   <para>
        Because all GNOME applications will use
        <function>libgnomeui</function> to create these common GUI
        elements, visual consistency is guaranteed. Another important 
        capability provided is the GNOME canvas, which allows painless
        creation of complex interfaces. Similar in many ways to the Tk
        canvas, the GNOME canvas provides a framework to create
        address books, calendar applications, and spreadsheets. 
   </para>
  
  </sect1>


  <sect1 id="corbaapp">
    <title>CORBA&mdash;Enabled GNOME Libraries</title>
    <para>
       CORBA is a mechanism that GNOME applications can use to access
       services from other GNOME components. The CORBA implementation
       used by GNOME is called ORBit. 
    </para>
     <table>
     <title>CORBA Libraries</title>
     <tgroup  cols=2>
     <thead>
     <row>
      <entry>Library Name</entry>
      <entry>Function</entry>
     </row>
     </thead>
      <tbody>
       <row>
	<entry><function>libIIOP</function></entry>
        <entry>Low level CORBA communications</entry>
      </row>
      <row>
        <entry><function>libORBitutil</function></entry>
        <entry>Convenience routines for ORBit</entry>
      </row>
      <row>
        <entry><function>libORBit</function></entry>
        <entry>CORBA API</entry>
      </row>
      <row>
       <entry><function>libgnorba</function></entry>
       <entry>GNOME CORBA framework</entry>
      </row>
     </tbody>
    </tgroup>
   </table>
    
    
    <para>
        Applications will only access <function>libORBit</function> and 
        <function>libgnorba</function> directly, as 
        <function>libIIOP</function> and <function>libORBitutil</function>
        are used internally by ORBit.
    </para>

    <formalpara>
     <title>libORBit</title>
    <para>
        <function>libORBit</function> provides the implementation of the
        CORBA API. It is the ORB proper, and works in concert with 
        <function>libIIOP</function> and the IDL compiler to provide
        the complete CORBA implementation to the application.
    </para>
    </formalpara>
  
    <formalpara>
     <title>libgnorba</title>
    <para>
        ORBit provides the CORBA framework to developers for problem solving.
        To expedite the use of CORBA in GNOME applications specifically,
        additional facilities are provided by <function>libgnorba</function>:
    </para>
    </formalpara>

        <ITEMIZEDLIST MARK="bullet">
	<listitem>
	  <para>
              CORBA intialization routine for all GNOME apps, to
              automatically take care of security and GTK+ main loop
              integration.
            </para>
	</listitem>

	<listitem>
	  <para>
              Automatic name service bootstrapping and accessing. 
          </para>
	</listitem>

	<listitem>
	  <para>
              Standard object server directory, object server
              registration and activation.
	  </para>
	</listitem>
      </itemizedlist>
  </sect1>

  <sect1 id="misclibs">
    <title>Other GNOME Libraries</title>
    <para>
       Several other useful libraries have been created for use by
       GNOME applications (although most will work with non-GNOME
       applications as well) which can help when solving different
       kinds of problems. 
    </para>

    <formalpara>
     <title>libxml</title>
    <para>
       The <function>libxml</function> library assists in reading and
       parsing XML files.  Several GNOME applications (glade and gnumeric
       among for example) use <function>libxml</function> when dealing with
       XML files.
    </para>
    </formalpara>

    <formalpara>
     <title>libghttp</title>
    <para>
       When accessing data via HTTP, the protocal used by web servers,
       the <function>libghttp</function> library can be helpful.  It
       is designed with graphical applications in mind, so that
       requests can be made without block waiting on a response. This
       allows the graphical application to be responsive while a request 
       is in progress.
    </para>
    </formalpara>
  </sect1>

  <sect1 id="libmap">
    <title>Library Name to Package Name</title>
    <para>
       The following table maps the name of the library (which
       resides in <filename>/usr/lib</filename>) to the name of the
       package(s) which contain them:
    </para>
    <table>
     <title>CORBA Libraries</title>
     <tgroup  cols=3>
     <thead>
     <row>
      <entry>Library Name</entry>
      <entry>Run-time Package</entry>
      <entry>Development Package</entry>
     </row>
     </thead>
      <tbody>
     <row>
      <entry><function>libaudiofile</function></entry>
      <entry>audiofile</entry>
      <entry>audiofile-devel</entry>
     </row> 
     <row>
      <entry><function>libesd</function></entry>
      <entry>esound</entry>
      <entry>esound-devel</entry>
     </row>
     <row>
      <entry><function>libglib</function></entry>
      <entry>glib</entry>
      <entry>glib-devel</entry>
     </row>
     <row>
      <entry><function>libgtk</function></entry>
      <entry>gtk+</entry>
      <entry>gtk+-devel</entry>
     </row>
     <row>
      <entry><function>libgdk_imlib</function></entry>
      <entry>imlib</entry>
      <entry>imlib-devel</entry>
     </row>
     <row>
      <entry><function>libgnome</function></entry>
      <entry>gnome-libs</entry>
      <entry>gnome-libs-devel</entry>
     </row>
     <row>
      <entry><function>libgnomeui</function></entry>
      <entry>gnome-libs</entry>
      <entry>gnome-libs-devel</entry>
     </row>
     <row>
      <entry><function>libgnorba</function></entry>
      <entry>gnome-libs</entry>
      <entry>gnome-libs-devel</entry>
     </row>     
     <row>
      <entry><function>libIIOP</function></entry>
      <entry>ORBit</entry>
      <entry>ORBit-devel</entry>
     </row>
     <row>
      <entry><function>libORBitutil</function></entry>
      <entry>ORBit</entry>
      <entry>ORBit-devel</entry>
     </row>
     <row>
      <entry><function>libORBit</function></entry>
      <entry>ORBit</entry>
      <entry>ORBit-devel</entry>
     </row>     
     <row>
      <entry><function>libxml</function></entry>
      <entry>libxml</entry>
      <entry>libxml-devel</entry>
    </row>
     <row>
      <entry><function>libghttp</function></entry>
      <entry>libghttp</entry>
      <entry>libghttp-devel</entry>
    </row>
   </tbody>
  </tgroup>
 </table>

    <para>
       The "-devel" packages are only required for actual development using
       the library, and  end-users will only require the runtime library
       (the non-"-devel" packages) to be installed to run a GNOME application.
   </para>
  </sect1>

</article>
