<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <body>
    <h1>Contributing to libvirt</h1>

    <p>
      This page provides guidance on how to contribute to the
      libvirt project
    </p>

    <ul id="toc"></ul>

    <h2><a id="skills">Contributions required</a></h2>

    <p>
      The libvirt project is always looking for new contributors to
      participate in ongoing activities. While code development is a
      major part of the project, assistance is needed in many other
      areas including documentation writing, bug triage, testing,
      application integration, website / wiki content management,
      translation, branding, social media and more. The only
      requirement is an interest in virtualization and desire to
      help.
    </p>

    <p>
      The following is a non-exhaustive list of areas in which
      people can contribute to libvirt. If you have ideas for
      other contributions feel free to follow them.
    </p>

    <ul>
      <li><strong>Software development</strong>. The core library / daemon (and
        thus the bulk of coding) is written in C, but there are
        language bindings written in Python, Perl, Java, Ruby,
        Php, OCaml and Go. There are also higher level wrappers
        mapping libvirt into other object frameworks, such GLib,
        CIM and SNMP. For those interested in working on the core parts of
        libvirt, the <a href="hacking.html">contributor guidelines</a> are
        mandatory reading</li>
      <li><strong>Translation</strong>. All the libvirt modules aim to support
        translations where appropriate. All translation is
        handling outside of the normal libvirt review process,
        using the <a href="http://fedora.zanata.org">Fedora
        instance</a> of the Zanata tool. Thus people wishing
        to contribute to translation should join the Fedora
        translation team</li>
      <li><strong>Documentation</strong>. There are docbook guides on various
        aspects of libvirt, particularly application development
        guides for the C library and Python, and a virsh command
        reference. There is thus scope for work by people who are
        familiar with using or developing against libvirt, to
        write further content for these guides. There is also a
        need for people to review existing content for copy editing
        and identifying gaps in the docs</li>
      <li><strong>Website / wiki curation</strong>. The bulk of the website is
        maintained in the primary GIT repository, while the wiki
        site uses mediawiki. In both cases there is a need for
        people to both write new content and curate existing
        content to identify outdated information, improve its
        organization and target gaps.</li>
      <li><strong>Testing</strong>. There are a number of tests suites that can run
        automated tests against libvirt. The coverage of the tests
        is never complete, so there is a need for people to create
        new test suites and / or provide environments to actually
        run the tests in a variety of deployment scenarios.</li>
      <li><strong>Code analysis</strong>. The libvirt project has access to the coverity
        tool to run static analysis against the codebase, however,
        there are other types of code analysis that can be useful.
        In particular fuzzing of the inputs can be very effective
        at identifying problematic edge cases.</li>
      <li><strong>Security handling</strong>. Downstream (operating system) vendors
        who distribute libvirt may wish to propose a person to
        be part of the security handling team, to get early access
        to information about forthcoming vulnerability fixes.</li>
      <li><strong>Evangalism</strong>. Work done by the project is of no benefit
        unless the (potential) user community knows that it
        exists. Thus it is critically important to the health
        and future growth of the project, that there are a people
        who evangalise the work created by the project. This can
        take many forms, writing blog posts (about usage of features,
        personal user experiences, areas for future work, and more),
        syndicating docs and blogs via social media, giving user
        group and/or conference talks about libvirt.</li>
      <li><strong>User assistance</strong>. Since documentation
        is never perfect, there are inevitably cases where users
        will struggle to attain a deployment goal they have, or
        run into trouble with managing an existing deployment.
        While some users may be able to contact a software vendor
        to obtain support, it is common to rely on community help
        forums such as <a href="contact.html#email">libvirt users
          mailing list</a>, or sites such as
        <a href="http://stackoverflow.com/questions/tagged/libvirt">stackoverflow.</a>
        People who are familiar with libvirt and have ability &amp;
        desire to help other users are encouraged to participate in
        these help forums.</li>
    </ul>

    <h2><a id="comms">Communication</a></h2>

    <p>
      For full details on contacting other project contributors
      read the <a href="contact.html">contact</a> page. There
      are two main channels that libvirt uses for communication
      between contributors:
    </p>

    <h3><a id="email">Mailing lists</a></h3>

    <p>
      The project has a number of
      <a href="contact.html#email">mailing lists</a> for
      general communication between contributors.
      In general any design discussions and review
      of contributions will take place on the mailing
      lists, so it is important for all contributors
      to follow the traffic.
    </p>

    <h3><a id="irc">Instant messaging / chat</a></h3>

    <p>
      Contributors to libvirt are encouraged to join the
      <a href="contact.html#irc">IRC channel</a> used by
      the project, where they can have live conversations
      with others members.
    </p>

    <h2><a id="outreach">Student / outreach coding programs</a></h2>

    <p>
      Since 2016, the libvirt project directly participates as an
      organization in the <a href="http://wiki.libvirt.org/page/Google_Summer_of_Code_Ideas">Google Summer of Code program</a>. Prior to
      this the project had a number of students in the program
      via a joint application with the QEMU project. People are
      encouraged to look at both the libvirt and QEMU programs
      to identify potentially interesting projects to work on.
    </p>

  </body>
</html>
