~~NOTOC~~
There are several ways to contribute to OpenNebula. All of them are more than welcome, without the contribution and comments from our user community there is no reason for OpenNebula!. **This page describes how to contribute to the OpenNebula distribution**. Please read the [[:addons:addons|Add-ons Catalog page]] if you are interested in [[:addons:create|creating one new Add-on]] or [[:addons:contribute|contributing to one of the Add-ons]].
* [[#How Do I Report a Bug?|How Do I Report a Bug?]]
* [[#How Do I Make a Feature Request?|How Do I Make a Feature Request?]]
* [[#How Can I Contribute Bug and Feature Patches?|How Can I Contribute Bug and Feature Patches?]]
* [[#How Can I Contribute New Features?|How Can I Contribute New Features?]]
* [[#Licensing and Copyright|Licensing and Copyright]]
If you haven't already, create an account at the OpenNebula [[http://dev.opennebula.org|Development Portal]] and subscribe to the [[:community:mailinglists|developers mailing list]]. It is assumed that you're willing to contribute new code or documentation under the [[#Licensing and Copyright|Apache License 2.0]].
**Thanks for making OpenNebula a better project!**
====== How Do I Report a Bug? ======
You can report a bug by opening a new issue in the OpenNebula[[http://dev.opennebula.org | Development Portal]]. The priority of a **Bug** issue will be graded based on its severity (Low, Normal, High). Be sure to specify the version of OpenNebula you are using.
A **Bug** issue can be:
* Pending, needs to be verified
* New, the bug has been verified
* Assigned, someone is working on the bug
* Closed, the issue is fixed, could not be reproduced (worksforme) or duplicates another one
====== How Do I Make a Feature Request? ======
You may use the [[http://dev.opennebula.org | Development Portal]] to make feature requests, just open a new issue and label it as **Request**. The issue will be used to track the discussions about the new feature. You should also specify if you are planing to allocate resources to implement the new feature. Once the new issue is created, you can bring it up for discussion on the [[:community:mailinglists|developers mailing list]].
We will try to contact you as soon as possible to have more information and to give you a first feedback about your **Request** issue. Please consider that this can take some time, and it is usually not done until the next release cycle at the earliest. When we update the [[http://www.opennebula.org/software:release|roadmap of the project and plan the features for the next release]], we prioritize:
* The features demanded by the [[http://www.opennebula.org/about:sponsors|projects and organizations sponsoring the open-source project]]
* The most demanded features by the community
Your **Request** issue will be pending till:
* It is decided that is not in the scope of the project and closed
* It is interesting for the OpenNebula community and will be added as **Backlog** or **Feature**
**Backlog** issues are long-medium term roadmap features to be implemented in OpenNebula. The priority of the issues will be graded (Low, Normal, High). A backlog issue will be pending until:
* It is closed because it is no longer interesting for the OpenNebula community
* It is moved to the Feature list
**Feature** issues are short term features roadmap features. New OpenNebula releases will be made of Feature issues. The priority of the features will be graded (Low, Normal, High). A Feature will be;
* New, no one is working on the issue.
* Assigned, a developer is working on it.
* Closed, feature is ready and documented.
====== How Can I Contribute Bug and Feature Patches? ======
There are two different ways to submit a bug or feature patch. In both cases, it is understood that your patch addresses an **open issue** at the [[http://dev.opennebula.org|OpenNebula Development Portal]] to better track them. You will need to create an account in [[http://dev.opennebula.org|dev.opennebula.org]] if you do not already have one. Update the issue with a full description of what you have done and describe your tests. When your patch is reviewed, it may be accepted as-is or you may be asked to make changes. **Code commits (after review) with be implemented as named commits**.
===== Submission Through Development Portal =====
Bug and feature patches can be uploaded to the **open issue** in the OpenNebula [[http://dev.opennebula.org|Development Portal]] (please avoid submitting them to the mailing list).
We prefer patches to be submitted in unified diff format:
diff -u original_file.cc new_file.cc
If you have checked out the sources from git, then use:
git format-patch origin/master
===== Submission Through Github Pull Requests =====
You can alternatively use the github Pull Request model to the [[https://github.com/OpenNebula/one|OpenNebula public Git repository]]:
* Fork it
* Create a branch (git checkout -b my_markup)
* Commit your changes (git commit -am “My changes”)
* Push to the branch (git push origin my_markup)
* Create a Pull Request to this repository from your new branch
Finally do not forget to update the **open issue** with a link to the Pull Request.
===== Important Notice about Licensing =====
Patches that fix a bug or provide a minor enhancement might be accepted without a Contributor License Agreement being completed. Major enhancements require a valid Contributor License Agreement. [[#Licensing and Copyright|More information]].
====== How Can I Contribute New Functional Components? ======
Before entering a new issue following the [[#How Do I Make a Feature Request?|Feature Request process]], first check if there is already an open issue addressing a similar feature. Describe your work plan and the resources you are planning to allocate in the issue. Then you should bring it up for discussion on the [[:community:mailinglists|developers mailing list]]. Other developers may have suggestions, and this ensures that the new feature is aligned with the roadmap and other features being developed. It is important to be sure that you're not doing redundant work.
New features can be:
* **Enhancements in the OpenNebula core distribution**. These should be contributed by following the [[#How Can I Contribute Bug and Feature Patches?|process to contribute feature patches]].
* **New interfaces and drivers that extend platform support**. New tools, interfaces and drivers that enlarge the platform technologies and services that OpenNebula can interface with are published on the [[:addons:catalog|Add-ons catalog]]. These may be incorporated into the main OpenNebula distribution after an incubation process. Visit our [[:addons:addons|Add-on section]] for more information about how to [[:addons:create|contribute new Add-ons]] or [[:addons:contribute|contribute to an existing Add-on]].
* **Integration with Cloud tools extensions**. Third-party tools and extensions that complement or extend the functionality provided by OpenNebula are listed on the **Ecosystem catalog**. Visit our [[:community:ecosystem|Ecosystem section]] for more information about how to submit new components.
====== Licensing and Copyright ======
**Small patches** which fix a bug or provide a minor enhancement might be accepted without a Contributor License Agreement being completed. These contributions do not add functionality or new intellectual property in its generally accepted sense, and so are too insubstantial to be protected by copyright. These patches must not have any copyright or license attached to them.
**Significant patches** which provide a major enhancement, and **Add-ons incorporated into the OpenNebula distribution** require the completion of a Contributor License Agreement. These contributions add functionality or new intellectual property in its generally accepted sense, and so have to be protected by copyright. These contributions must have a copyright attached to them. Before we can merge these contributions, you will need to read and agree to our {{community:iCLA.pdf|Individual Contributor License Agreement}}. If you are contributing on behalf of a company, an authorized representative of your company should sign a {{community:cCLA.pdf|Corporate Contributor License Agreement}}. You can [[mailto:contact@opennebula.org|send us]] a PDF version of the completed and signed agreement, or [[mailto:contact@opennebula.org|contact us]] to send you simple electronic forms through Echosign. All accepted contributions will be released as part of OpenNebula under the Apache v2.0 license.