<part>
  <title>GIO Overview</title>

  <chapter>
    <title>Introduction</title>

  <para>
    GIO is striving to provide a modern, easy-to-use VFS API that sits
    at the right level in the library stack, as well as other generally
    useful APIs for desktop applications (such as networking and
    D-Bus support). The goal is to overcome the shortcomings of GnomeVFS
    and provide an API that is so good that developers prefer it over raw
    POSIX calls. Among other things that means using GObject. It also means
    not cloning the POSIX API, but providing higher-level, document-centric
    interfaces.
  </para>

  <para>
    The abstract file system model of GIO consists of a number of
    interfaces and base classes for I/O and files:
    <variablelist>
       <varlistentry>
         <term>GFile</term>
         <listitem><para>reference to a file</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GFileInfo</term>
         <listitem><para>information about a file or filesystem</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GFileEnumerator</term>
         <listitem><para>list files in directories</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GDrive</term>
         <listitem><para>represents a drive</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GVolume</term>
         <listitem><para>represents a file system in an abstract way</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GMount</term>
         <listitem><para>represents a mounted file system</para></listitem>
       </varlistentry>
    </variablelist>
    Then there is a number of stream classes, similar to the input and
    output stream hierarchies that can be found in frameworks like Java:
    <variablelist>
       <varlistentry>
         <term>GInputStream</term>
         <listitem><para>read data</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GOutputStream</term>
         <listitem><para>write data</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GIOStream</term>
         <listitem><para>read and write data</para></listitem>
       </varlistentry>
       <varlistentry>
         <term>GSeekable</term>
         <listitem><para>interface optionally implemented by streams to support seeking</para></listitem>
       </varlistentry>
    </variablelist>
    There are interfaces related to applications and the types
    of files they handle:
    <variablelist>
       <varlistentry>
          <term>GAppInfo</term>
          <listitem><para>information about an installed application</para></listitem>
       </varlistentry>
       <varlistentry>
          <term>GIcon</term>
          <listitem><para>abstract type for file and application icons</para></listitem>
       </varlistentry>
    </variablelist>
    There is a framework for storing and retrieving application settings:
    <variablelist>
       <varlistentry>
          <term>GSettings</term>
          <listitem><para>stores and retrieves application settings</para></listitem>
       </varlistentry>
    </variablelist>
    There is support for network programming, including connectivity monitoring,
    name resolution, lowlevel socket APIs and highlevel client and server
    helper classes:
    <variablelist>
       <varlistentry>
          <term>GSocket</term>
          <listitem><para>lowlevel platform independent socket object</para></listitem>
       </varlistentry>
       <varlistentry>
          <term>GResolver</term>
          <listitem><para>asynchronous and cancellable DNS resolver</para></listitem>
       </varlistentry>
       <varlistentry>
          <term>GSocketClient</term>
          <listitem><para>high-level network client helper</para></listitem>
       </varlistentry>
       <varlistentry>
          <term>GSocketService</term>
          <listitem><para>high-level network server helper</para></listitem>
       </varlistentry>
       <varlistentry>
          <term>GSocketConnection</term>
          <listitem><para>network connection stream</para></listitem>
       </varlistentry>
       <varlistentry>
          <term>GNetworkMonitor</term>
          <listitem><para>network connectivity monitoring</para></listitem>
       </varlistentry>
    </variablelist>
    There is support for connecting to <link linkend="http://www.freedesktop.org/wiki/Software/dbus">D-Bus</link>,
    sending and receiving messages, owning and watching bus names,
    and making objects available on the bus:
    <variablelist>
       <varlistentry>
          <term>GDBusConnection</term>
          <listitem><para>a D-Bus connection</para></listitem>
       </varlistentry>

       <varlistentry>
          <term>GDBusMethodInvocation</term>
          <listitem><para>for handling remote calls</para></listitem>
       </varlistentry>

       <varlistentry>
          <term>GDBusServer</term>
          <listitem><para>helper for accepting connections</para></listitem>
       </varlistentry>

       <varlistentry>
          <term>GDBusProxy</term>
          <listitem><para>proxy to access D-Bus interfaces on a remote object</para></listitem>
       </varlistentry>

    </variablelist>
    Beyond these, GIO provides facilities for file monitoring,
    asynchronous I/O and filename completion. In addition to the
    interfaces, GIO provides implementations for the local case.
    Implementations for various network file systems are provided
    by the GVFS package as loadable modules.
  </para>

  <para>
    Other design choices which consciously break with the GnomeVFS
    design are to move backends out-of-process, which minimizes the
    dependency bloat and makes the whole system more robust. The backends
    are not included in GIO, but in the separate GVFS package. The GVFS
    package also contains the GVFS daemon, which spawn further mount
    daemons for each individual connection.
  </para>

  <figure id="gvfs-overview">
    <title>GIO in the GTK+ library stack</title>
    <graphic fileref="gvfs-overview.png" format="PNG"></graphic>
  </figure>

  <para>
    The GIO model of I/O is stateful: if an application establishes e.g.
    a SFTP connection to a server, it becomes available to all applications
    in the session; the user does not have to enter his password over
    and over again.
  </para>
  <para>
    One of the big advantages of putting the VFS in the GLib layer
    is that GTK+ can directly use it, e.g. in the filechooser.
  </para>
  </chapter>

  <chapter>
    <title>Writing GIO applications</title>

    <para>
      The information in the GLib <ulink url="http://developer.gnome.org/glib/stable/glib-programming.html">documentation</ulink> about writing GLib
      applications is generally applicable when writing GIO applications.
    </para>

    <simplesect><title>Threads</title>

    <para>
       GDBus has its own private worker thread, so applications using
       GDBus have at least 3 threads. GIO makes heavy use of the concept
       of a <link linkend="g-main-context-push-thread-default">thread-default
       main context</link> to execute callbacks of asynchronous
       methods in the same context in which the operation was started.
    </para>

    </simplesect>

    <simplesect id="async-programming"><title>Asynchronous Programming</title>

    <para>
      Many GIO functions come in two versions: synchronous and asynchronous,
      denoted by an <code>_async</code> suffix. It is important to use these
      appropriately: synchronous calls should not be used from
      within a main loop which is shared with other code, such as one in the
      application’s main thread. Synchronous calls block until they complete,
      and I/O operations can take noticeable amounts of time (even on ‘fast’
      SSDs). Blocking a main loop iteration while waiting for I/O means that
      other sources in the main loop will not be dispatched, such as input and
      redraw handlers for the application’s UI. This can cause the application
      to ‘freeze’ until I/O completes.
    </para>

    <para>
      A few self-contained groups of functions, such as code generated by
      <link linkend="gdbus-codegen"><application>gdbus-codegen</application></link>,
      use a different convention: functions are asynchronous default, and it is
      the <emphasis>synchronous</emphasis> version which has a
      <code>_sync</code>
      suffix. Aside from naming differences, they should be treated the same
      way as functions following the normal convention above.
    </para>

    <para>
      The asynchronous (<code>_async</code>) versions of functions return
      control to the caller immediately, after scheduling the I/O in the kernel
      and adding a callback for it to the main loop. This callback will be
      invoked when the operation has completed. From the callback, the paired
      <code>_finish</code> function should be called to retrieve the return
      value of the I/O operation, and any errors which occurred. For more
      information on using and implementing asynchronous functions, see
      <link linkend="GAsyncResult.description"><type>GAsyncResult</type></link>
      and <link linkend="GTask.description"><type>GTask</type></link>.
    </para>

    <para>
      By starting multiple asynchronous operations in succession, they will be
      executed in parallel (up to an arbitrary limit imposed by GIO’s internal
      worker thread pool).
    </para>

    <para>
      The synchronous versions of functions can be used early in application
      startup when there is no main loop to block, for example to load initial
      configuration files. They can also be used for I/O on files which are
      guaranteed to be small and on the local disk. Note that the user’s home
      directory is not guaranteed to be on the local disk.
    </para>
    </simplesect>

    <simplesect><title>Security</title>

<para>
When your program needs to carry out some privileged operation (say,
create a new user account), there are various ways in which you can go
about this:
<itemizedlist>
<listitem><para>
Implement a daemon that offers the privileged operation. A convenient
way to do this is as a D-Bus system-bus service. The daemon will probably
need ways to check the identity and authorization of the caller before
executing the operation. <ulink url="http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html">polkit</ulink> is a framework that allows this.
</para></listitem>
<listitem><para>
Use a small helper that is executed with elevated privileges via
pkexec. <ulink url="http://www.freedesktop.org/software/polkit/docs/latest/pkexec.1.html">pkexec</ulink> is a small program launcher that is part of polkit.
</para></listitem>
<listitem><para>
Use a small helper that is executed with elevated privileges by
being suid root.
</para></listitem>
</itemizedlist>
None of these approaches is the clear winner, they all have their
advantages and disadvantages.
</para>

<para>
When writing code that runs with elevated privileges, it is important
to follow some basic rules of secure programming. David Wheeler has an
excellent book on this topic,
<ulink url="http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/index.html">Secure Programming for Linux and Unix HOWTO</ulink>.
</para>

<para>
When using GIO in code that runs with elevated privileges, you have to
be careful. GIO has extension points whose implementations get loaded
from modules (executable code in shared objects), which could allow
an attacker to sneak his own code into your application by tricking it
into loading the code as a module. However, GIO will never load modules
from your home directory except when explictly asked to do so via an
environment variable.
</para>

<para>
In most cases, your helper program should be so small that you don't
need GIO, whose APIs are largely designed to support full-blown desktop
applications. If you can't resist the convenience of these APIs, here
are some steps you should take:
<itemizedlist>
<listitem><para>
Clear the environment, e.g. using the <function>clearenv()</function>
function.
David Wheeler has a good <ulink url="http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/environment-variables.html">explanation</ulink> for why it is
important to sanitize the environment.
See <xref linkend="running-gio-apps"/>
for a list of all environment variables affecting GIO. In particular,
<envar>PATH</envar> (used to locate binaries), <envar>GIO_EXTRA_MODULES</envar> (used to locate loadable modules) and <envar>DBUS_{SYSTEM,SESSION}_BUS_ADDRESS</envar> (used to locate the D-Bus system and session bus) are important.
</para></listitem>
<listitem><para>
Don't use GVfs, by setting <envar>GIO_USE_VFS=local</envar> in the environment.
The reason to avoid GVfs in security-sensitive programs is that it uses
many libraries which have not necessarily been audited for security problems.
Gvfs is also heavily distributed and relies on a session bus to be present.
</para></listitem>
</itemizedlist>
</para>

    </simplesect>

  </chapter>

  <chapter>
    <title>Compiling GIO applications</title>

    <para>
      GIO comes with a <filename>gio-2.0.pc</filename> file that you
      should use together with <literal>pkg-config</literal> to obtain
      the necessary information about header files and libraries. See
      the <literal>pkg-config</literal> man page or the GLib documentation
      for more information on how to use <literal>pkg-config</literal>
      to compile your application.
    </para>

    <para>
      If you are using GIO on UNIX-like systems, you may want to use
      UNIX-specific GIO interfaces such as #GUnixInputStream,
      #GUnixOutputStream, #GUnixMount or #GDesktopAppInfo.
      To do so, use the <filename>gio-unix-2.0.pc</filename> file
      instead of <filename>gio-2.0.pc</filename>
    </para>
  </chapter>

  <chapter id="running-gio-apps">
    <title>Running GIO applications</title>

    <para>
      GIO inspects a few environment variables in addition to the
      ones used by GLib.
    </para>

    <formalpara>
      <title><envar>XDG_DATA_HOME</envar>, <envar>XDG_DATA_DIRS</envar></title>

      <para>
        GIO uses these environment variables to locate MIME information.
        For more information, see the <ulink url="http://freedesktop.org/Standards/shared-mime-info-spec">Shared MIME-info Database</ulink>
        and the <ulink url="http://freedesktop.org/Standards/basedir-spec">Base Directory Specification</ulink>.
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GVFS_DISABLE_FUSE</envar></title>

      <para>
        This variable can be set to keep #Gvfs from starting the fuse backend,
        which may be unwanted or unnecessary in certain situations.
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GIO_USE_VFS</envar></title>

      <para>
        This environment variable can be set to the name of a #GVfs
        implementation to override the default for debugging purposes.
        The #GVfs implementation for local files that is included in GIO
        has the name "local", the implementation in the gvfs module has
        the name "gvfs".  Most commonly, system software will set this to "local"
	to avoid having `GFile` APIs perform unnecessary DBus calls.
      </para>
    </formalpara>

    <para>
      The following environment variables are only useful for debugging
      GIO itself or modules that it loads. They should not be set in a
      production environment.
    </para>

    <formalpara>
      <title><envar>GIO_USE_FILE_MONITOR</envar></title>

      <para>
        This variable can be set to the name of a #GFileMonitor
        implementation to override the default for debugging purposes.
        The #GFileMonitor implementation for local files that is included
        in GIO on Linux has the name "inotify", others that are built
        are built as modules (depending on the platform) are called
        "fam" and "fen".
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GIO_USE_VOLUME_MONITOR</envar></title>

      <para>
        This variable can be set to the name of a #GVolumeMonitor
        implementation to override the default for debugging purposes.
        The #GVolumeMonitor implementation for local files that is included
        in GIO has the name "unix", the udisks2-based implementation in the
        gvfs module has the name "udisks2".
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GIO_USE_TLS</envar></title>

      <para>
        This variable can be set to the name of a #GTlsBackend
        implementation to override the default for debugging purposes.
        GIO does not include a #GTlsBackend implementation, the gnutls-based
        implementation in the glib-networking module has the name "gnutls".
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GIO_MODULE_DIR</envar></title>

      <para>
        When this environment variable is set to a path, GIO will load
	modules from this alternate directory instead of the directory
	built into GIO. This is useful when running tests, for example.
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GIO_EXTRA_MODULES</envar></title>

      <para>
        When this environment variable is set to a path, or a set of
        paths separated by a colon, GIO will attempt to load
        additional modules from within the path.
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GSETTINGS_BACKEND</envar></title>

      <para>
        This variable can be set to the name of a #GSettingsBackend
        implementation to override the default for debugging purposes.
        The memory-based implementation that is included in GIO has
        the name "memory", the one in dconf has the name "dconf-settings".
      </para>
    </formalpara>

    <formalpara>
      <title><envar>GSETTINGS_SCHEMA_DIR</envar></title>

      <para>
        This variable can be set to the name of a directory that is
        considered in addition to the <filename>glib-2.0/schemas</filename>
        subdirectories of the XDG system data dirs when looking
        for compiled schemas for #GSettings.
      </para>
    </formalpara>

   <formalpara>
      <title><envar>DBUS_SYSTEM_BUS_ADDRESS</envar></title>

      <para>
        This variable is consulted to find the address of the D-Bus system
        bus. For the format of D-Bus addresses, see the D-Bus
        <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html#addresses">specification</ulink>.
      </para>
      <para>
        Setting this variable overrides platform-specific ways of determining
        the system bus address.
      </para>
   </formalpara>

   <formalpara>
      <title><envar>DBUS_SESSION_BUS_ADDRESS</envar></title>

      <para>
        This variable is consulted to find the address of the D-Bus session bus.
      </para>
      <para>
        Setting this variable overrides platform-specific ways of determining
        the session bus address.
      </para>
   </formalpara>

   <formalpara>
      <title><envar>DBUS_STARTER_BUS_TYPE</envar></title>

      <para>
        This variable is consulted to find out the 'starter' bus for an
        application that has been started via D-Bus activation. The possible
        values are 'system' or 'session'.
      </para>
   </formalpara>

   <formalpara>
      <title><envar>G_DBUS_DEBUG</envar></title>

      <para>
         This variable can be set to a list of debug options, which
         cause GLib to print out different types of debugging
         information when using the D-Bus routines.
         <variablelist>
           <varlistentry>
             <term>transport</term>
             <listitem><para>Show IO activity (e.g. reads and writes)</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>message</term>
             <listitem><para>Show all sent and received D-Bus messages</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>payload</term>
             <listitem><para>Show payload for all sent and received D-Bus messages (implies message)</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>call</term>
             <listitem><para>Trace g_dbus_connection_call() and g_dbus_connection_call_sync() API usage</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>signal</term>
             <listitem><para>Show when a D-Bus signal is received</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>incoming</term>
             <listitem><para>Show when an incoming D-Bus method call is received</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>return</term>
             <listitem><para>Show when a reply is returned via the #GDBusMethodInvocation API</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>emission</term>
             <listitem><para>Trace g_dbus_connection_emit_signal() API usage</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>authentication</term>
             <listitem><para>Show information about connection authentication</para></listitem>
           </varlistentry>
           <varlistentry>
             <term>address</term>
             <listitem><para>Show information about D-Bus address lookups and autolaunching</para></listitem>
           </varlistentry>
         </variablelist>
         The special value <literal>all</literal> can be used to turn
         on all debug options. The special value
         <literal>help</literal> can be used to print a list of
         supported options to standard output.
      </para>
   </formalpara>

   <formalpara>
      <title><envar>G_DBUS_COOKIE_SHA1_KEYRING_DIR</envar></title>

      <para>
        Can be used to override the directory used to store the
        keyring used in the <literal>DBUS_COOKIE_SHA1</literal>
        authentication mechanism. Normally the directory used is
        <filename>.dbus-keyrings</filename> in the user's home
        directory.
      </para>
   </formalpara>

   <formalpara>
      <title><envar>G_DBUS_COOKIE_SHA1_KEYRING_DIR_IGNORE_PERMISSION</envar></title>

      <para>
        If set, the permissions of the directory used to store the
        keyring used in the <literal>DBUS_COOKIE_SHA1</literal>
        authentication mechanism won't be checked. Normally the
        directory must be readable only by the user.
      </para>
   </formalpara>
  </chapter>

  <chapter id="extending-gio">
    <title>Extending GIO</title>

    <para>
      A lot of the functionality that is accessible through GIO
      is implemented in loadable modules, and modules provide a convenient
      way to extend GIO. In addition to the #GIOModule API which supports
      writing such modules, GIO has a mechanism to define extension points,
      and register implementations thereof, see #GIOExtensionPoint.
    </para>
    <para>
      The following extension points are currently defined by GIO:
    </para>

    <formalpara>
       <title>G_VFS_EXTENSION_POINT_NAME</title>

       <para>
          Allows to override the functionality of the #GVfs class.
          Implementations of this extension point must be derived from #GVfs.
          GIO uses the implementation with the highest priority that is active,
          see g_vfs_is_active().
       </para>
       <para>
          GIO implements this extension point for local files, gvfs contains
          an implementation that supports all the backends in gvfs.
       </para>
   </formalpara>

   <formalpara>
      <title>G_VOLUME_MONITOR_EXTENSION_POINT_NAME</title>

      <para>
         Allows to add more volume monitors.
         Implementations of this extension point must be derived from
         #GVolumeMonitor. GIO uses all registered extensions.
      </para>
      <para>
        gvfs contains an implementation that works together with the #GVfs
        implementation in gvfs.
      </para>
   </formalpara>

   <formalpara>
      <title>G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME</title>

      <para>
         Allows to override the 'native' volume monitor.
         Implementations of this extension point must be derived from
         #GNativeVolumeMonitor. GIO uses the implementation with
         the highest priority that is supported, as determined by the
         is_supported() vfunc in #GVolumeMonitorClass.
      </para>
      <para>
         GIO implements this extension point for local mounts,
         gvfs contains a udisks2-based implementation.
      </para>
   </formalpara>

   <formalpara>
      <title>G_LOCAL_FILE_MONITOR_EXTENSION_POINT_NAME</title>

      <para>
        Allows to override the file monitor implementation for
        local files. Implementations of this extension point must
        be derived from #GLocalFileMonitor. GIO uses the implementation
        with the highest priority that is supported, as determined by the
        is_supported() vfunc in #GLocalFileMonitorClass.
      </para>
      <para>
        GIO uses this extension point internally, to switch between
        its fam-based and inotify-based file monitoring implementations.
      </para>
   </formalpara>

   <formalpara>
      <title>G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME</title>

      <para>
        Allows to override the directory monitor implementation for
        local files. Implementations of this extension point must be
        derived from #GLocalDirectoryMonitor. GIO uses the implementation
        with the highest priority that is supported, as determined by the
        is_supported() vfunc in #GLocalDirectoryMonitorClass.
      </para>
      <para>
        GIO uses this extension point internally, to switch between
        its fam-based and inotify-based directory monitoring implementations.
      </para>
   </formalpara>

   <formalpara>
      <title>G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME</title>

      <para>
        Unix-only. Allows to provide a way to associate default handlers
        with URI schemes. Implementations of this extension point must
        implement the #GDesktopAppInfoLookup interface. GIO uses the
        implementation with the highest priority.
      </para>
      <para>
        This extension point has been discontinued in GLib 2.28. It is
        still available to keep API and ABI stability, but GIO is no
        longer using it for default handlers. Instead, the mime handler
        mechanism is used, together with x-scheme-handler pseudo-mimetypes.
      </para>
   </formalpara>

   <formalpara>
      <title>G_SETTINGS_BACKEND_EXTENSION_POINT_NAME</title>

      <para>
        Allows to provide an alternative storage for #GSettings.
        Implementations of this extension point must derive from the
        #GSettingsBackend type. GIO contains a keyfile-based
        implementation of this extension point, another one is provided
        by dconf.
      </para>
   </formalpara>

   <formalpara>
     <title>G_PROXY_EXTENSION_POINT_NAME</title>

     <para>
       Allows to provide implementations for network proxying.
       Implementations of this extension point must provide the
       #GProxy interface, and must be named after the network
       protocol they are proxying.
     </para>
     <para>
       glib-networking contains an implementation of this extension
       point based on libproxy.
     </para>
   </formalpara>
   <formalpara>
     <title>G_TLS_BACKEND_EXTENSION_POINT_NAME</title>

     <para>
       Allows to provide implementations for TLS support.
       Implementations of this extension point must implement
       the #GTlsBackend interface.
     </para>
     <para>
       glib-networking contains an implementation of this extension
       point.
     </para>
   </formalpara>

   <formalpara>
     <title>G_NETWORK_MONITOR_EXTENSION_POINT_NAME</title>

     <para>
       Allows to provide implementations for network connectivity
       monitoring.
       Implementations of this extension point must implement
       the #GNetworkMonitorInterface interface.
     </para>
     <para>
       GIO contains an implementation of this extension point
       that is using the netlink interface of the Linux kernel.
     </para>
   </formalpara>
  </chapter>
</part>

