<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">

<chapter id="introduction">
  <title>PackageKit Introduction</title>

  <sect1 id="introduction-description">
    <title>Overall Description</title>

    <para>
      PackageKit is a small open source system that abstracts out common package
      management tasks such as:
    </para>
    <itemizedlist>
      <listitem>
        <para>
          Checking for updates and installing them in the background.
        </para>
      </listitem>
      <listitem>
        <para>
          Automatically installing new or add-on software.
        </para>
      </listitem>
    </itemizedlist>

    <para>
      PackageKit has a modular design with an asynchronous API for client programs,
      a flexible queuing module, and run-time selectable backends.
    </para>

    <mediaobject id="pk-structure">
      <imageobject>
        <imagedata format="PNG" fileref="pk-structure.png" align="center"/>
      </imageobject>
    </mediaobject>
  </sect1>

  <sect1 id="introduction-backends">
    <title>Backends</title>
    <para>
      A backend is just a compiled <literal>.so</literal> object that is
      loaded at run-time and provides an interface to the underlying package
      commands.
      A backend converts an asynchronous request into either a new thread
      in the same process, or executes external "glue" files that
      can be written in any language.
    </para>
    <para>
      Backends do not have to support all of the commands supported
      by PackageKit. Each backend advertises the commands and
      options it supports, and the frontend will only show UI
      elements for those commands.
    </para>
  </sect1>

</chapter>

